1. Mar 05, 2021
    • Christopher Di Bella's avatar
      [libcxx] adds concepts std::equality_comparable[_with] · e63ddccc
      Christopher Di Bella authored
      Implements parts of:
          - P0898R3 Standard Library Concepts
          - P1754 Rename concepts to standard_case for C++20, while we still can
      
      Depends on D96660
      
      Reviewed By: ldionne, #libc, Quuxplusone
      
      Differential Revision: https://reviews.llvm.org/D97176
      e63ddccc
    • Chen Zheng's avatar
      [XCOFF][DebugInfo] support DWARF for XCOFF for assembly output. · 87bbf3d1
      Chen Zheng authored
      Reviewed By: jasonliu
      
      Differential Revision: https://reviews.llvm.org/D95518
      87bbf3d1
    • George Balatsouras's avatar
      [dfsan] Remove hardcoded shadow width in array.ll · 46f52fb6
      George Balatsouras authored
      As a preparation step for fast8 support, we need to update the tests
      to pass in both modes. That requires generalizing the shadow width
      and remove any hard coded references that assume it's always 2 bytes.
      
      Reviewed By: stephan.yichao.zhao
      
      Differential Revision: https://reviews.llvm.org/D97988
      46f52fb6
    • Yonghong Song's avatar
      BPF: permit type modifiers for __builtin_btf_type_id() relocation · 9c0274cd
      Yonghong Song authored
      Lorenz Bauer from Cloudflare tried to use "const struct <name>"
      as the type for __builtin_btf_type_id(*(const struct <name>)0, 1)
      relocation and hit a llvm BPF fatal error.
         https://lore.kernel.org/bpf/a3782f71-3f6b-1e75-17a9-1827822c2030@fb.com/
      
         ...
         fatal error: error in backend: Empty type name for BTF_TYPE_ID_REMOTE reloc
      
      Currently, we require the debuginfo type itself must have a name.
      In this case, the debuginfo type is "const" which points to "struct <name>".
      The "const" type does not have a name, hence the above fatal error
      will be triggered.
      
      Let us permit "const" and "volatile" type modifiers. We skip modifiers
      in some other cases as well like structure member type tracing.
      This can aviod the above fatal error.
      
      Differential Revision: https://reviews.llvm.org/D97986
      9c0274cd
    • David Blaikie's avatar
      Fix clang for header move in LLVM/IR · cedc5325
      David Blaikie authored
      cedc5325
    • David Blaikie's avatar
      Move llvm/Analysis/ObjCARCUtil.h to IR to fix layering. · a2a55def
      David Blaikie authored
      This is included from IR files, and IR doesn't/can't depend on Analysis
      (because Analysis depends on IR).
      
      Also fix the implementation - don't use non-member static in headers, as
      it leads to ODR violations, inaccurate "unused function" warnings, etc.
      And fix the header protection macro name (we don't generally include
      "LIB" in the names, so far as I can tell).
      a2a55def
    • Nico Weber's avatar
      [gn build] port b973e2e2 · ecdae5df
      Nico Weber authored
      ecdae5df
    • Jianzhou Zhao's avatar
      [dfsan] Propagate origin tracking at store · db7fe6cd
      Jianzhou Zhao authored
      This is a part of https://reviews.llvm.org/D95835.
      
      Reviewed By: morehouse, gbalats
      
      Differential Revision: https://reviews.llvm.org/D97789
      db7fe6cd
    • Philip Reames's avatar
      [docs] Remove some stale wording from gc.relocate description · f2048046
      Philip Reames authored
      We dropped support for the non-bundle form a while back, but I apparently missed updating one place in the docs.
      f2048046
    • Philip Reames's avatar
    • Amara Emerson's avatar
      [AArch64][GlobalISel][RegBankSelect] Improve rbs of G_BUILD_VECTOR when fed by fp values. · 501f6a4e
      Amara Emerson authored
      This is actually two changes. One is to avoid copies when fp values are fed into
      a build_vector, without being able to tell from the opcode.
      
      The other is that build_vectors are also marked as only defining FP, since they
      produce vector results.
      
      Differential Revision: https://reviews.llvm.org/D97968
      501f6a4e
    • Heejin Ahn's avatar
      [WebAssembly] Fix ExceptionInfo grouping again · 2b957ed4
      Heejin Ahn authored
      This is a case D97677 missed. When taking out remaining BBs that are
      reachable from already-taken-out exceptions (because they are not
      subexcptions but unwind destinations), I assumed the remaining BBs are
      not EH pads, but they can be. For example,
      ```
      try {
        try {
          throw 0;
        } catch (int) { // (a)
        }
      } catch (int) {   // (b)
      }
      try {
        foo();
      } catch (int) {   // (c)
      }
      ```
      In this code, (b) is the unwind destination of (a) so its exception is
      taken out of (a)'s exception, But even though the next try-catch is not
      inside the first two-level try-catches, because the first try always
      throws, its continuation BB is unreachable and the whole rest of the
      function is dominated by EH pad (a), including EH pad (c). So after we
      take out of (b)'s exception out of (a)'s, we also need to take out (c)'s
      exception out of (a)'s, because (c) is reachable from (b).
      
      This adds one more step before what we did for remaining BBs in D97677;
      it traverses EH pads first to take subexceptions out of their incorrect
      parent exception. It's the same thing as D97677, but because we can do
      this before we add BBs to exceptions' sets, we don't need to fix sets
      and only need to fix parent exception pointers.
      
      Other changes are variable name changes (I changed `WE` -> `SrcWE`,
      `UnwindWE` -> `DstWE` for clarity), some comment changes, and a drive-by
      fix in a bug in a `LLVM_DEBUG` print statement.
      
      Fixes https://github.com/emscripten-core/emscripten/issues/13588.
      
      Reviewed By: dschuff
      
      Differential Revision: https://reviews.llvm.org/D97929
      2b957ed4
    • LLVM GN Syncbot's avatar
      [gn build] Port 561abd83 · c3960087
      LLVM GN Syncbot authored
      c3960087
    • Heejin Ahn's avatar
      [WebAssembly] Disable uses of __clang_call_terminate · 561abd83
      Heejin Ahn authored
      Background:
      
      Wasm EH, while using Windows EH (catchpad/cleanuppad based) IR, uses
      Itanium-based libraries and ABIs with some modifications.
      
      `__clang_call_terminate` is a wrapper generated in Clang's Itanium C++
      ABI implementation. It contains this code, in C-style pseudocode:
      ```
      void __clang_call_terminate(void *exn) {
        __cxa_begin_catch(exn);
        std::terminate();
      }
      ```
      So this function is a wrapper to call `__cxa_begin_catch` on the
      exception pointer before termination.
      
      In Itanium ABI, this function is called when another exception is thrown
      while processing an exception. The pointer for this second, violating
      exception is passed as the argument of this `__clang_call_terminate`,
      which calls `__cxa_begin_catch` with that pointer and calls
      `std::terminate` to terminate the program.
      
      The spec (https://libcxxabi.llvm.org/spec.html) for `__cxa_begin_catch`
      says,
      ```
      When the personality routine encounters a termination condition, it
      will call __cxa_begin_catch() to mark the exception as handled and then
      call terminate(), which shall not return to its caller.
      ```
      
      In wasm EH's Clang implementation, this function is called from
      cleanuppads that terminates the program, which we also call terminate
      pads. Cleanuppads normally don't access the thrown exception and the
      wasm backend converts them to `catch_all` blocks. But because we need
      the exception pointer in this cleanuppad, we generate
      `wasm.get.exception` intrinsic (which will eventually be lowered to
      `catch` instruction) as we do in the catchpads. But because terminate
      pads are cleanup pads and should run even when a foreign exception is
      thrown, so what we have been doing is:
      1. In `WebAssemblyLateEHPrepare::ensureSingleBBTermPads()`, we make sure
      terminate pads are in this simple shape:
      ```
      %exn = catch
      call @__clang_call_terminate(%exn)
      unreachable
      ```
      2. In `WebAssemblyHandleEHTerminatePads` pass at the end of the
      pipeline, we attach a `catch_all` to terminate pads, so they will be in
      this form:
      ```
      %exn = catch
      call @__clang_call_terminate(%exn)
      unreachable
      catch_all
      call @std::terminate()
      unreachable
      ```
      In `catch_all` part, we don't have the exception pointer, so we call
      `std::terminate()` directly. The reason we ran HandleEHTerminatePads at
      the end of the pipeline, separate from LateEHPrepare, was it was
      convenient to assume there was only a single `catch` part per `try`
      during CFGSort and CFGStackify.
      
      ---
      
      Problem:
      
      While it thinks terminate pads could have been possibly split or calls
      to `__clang_call_terminate` could have been duplicated,
      `WebAssemblyLateEHPrepare::ensureSingleBBTermPads()` assumes terminate
      pads contain no more than calls to `__clang_call_terminate` and
      `unreachable` instruction. I assumed that because in LLVM very limited
      forms of transformations are done to catchpads and cleanuppads to
      maintain the scoping structure. But it turned out to be incorrect;
      passes can merge cleanuppads into one, including terminate pads, as long
      as the new code has a correct scoping structure. One pass that does this
      I observed was `SimplifyCFG`, but there can be more. After this
      transformation, a single cleanuppad can contain any number of other
      instructions with the call to `__clang_call_terminate` and can span many
      BBs. It wouldn't be practical to duplicate all these BBs within the
      cleanuppad to generate the equivalent `catch_all` blocks, only with
      calls to `__clang_call_terminate` replaced by calls to `std::terminate`.
      
      Unless we do more complicated transformation to split those calls to
      `__clang_call_terminate` into a separate cleanuppad, it is tricky to
      solve.
      
      ---
      
      Solution (?):
      
      This CL just disables the generation and use of `__clang_call_terminate`
      and calls `std::terminate()` directly in its place.
      
      The possible downside of this approach can be, because the Itanium ABI
      intended to "mark" the violating exception handled, we don't do that
      anymore. What `__cxa_begin_catch` actually does is increment the
      exception's handler count and decrement the uncaught exception count,
      which in my opinion do not matter much given that we are about to
      terminate the program anyway. Also it does not affect info like stack
      traces that can be possibly shown to developers.
      
      And while we use a variant of Itanium EH ABI, we can make some
      deviations if we choose to; we are already different in that in the
      current version of the EH spec we don't support two-phase unwinding. We
      can possibly consider a more complicated transformation later to
      reenable this, but I don't think that has high priority.
      
      Changes in this CL contains:
      - In Clang, we don't generate a call to `wasm.get.exception()` intrinsic
        and `__clang_call_terminate` function in terminate pads anymore; we
        simply generate calls to `std::terminate()`, which is the default
        implementation of `CGCXXABI::emitTerminateForUnexpectedException`.
      - Remove `WebAssembly::ensureSingleBBTermPads() function and
        `WebAssemblyHandleEHTerminatePads` pass, because terminate pads are
        already `catch_all` now (because they don't need the exception
        pointer) and we don't need these transformations anymore.
      - Change tests to use `std::terminate` directly. Also removes tests that
        tested `LateEHPrepare::ensureSingleBBTermPads` and
        `HandleEHTerminatePads` pass.
      - Drive-by fix: Add some function attributes to EH intrinsic
        declarations
      
      Fixes https://github.com/emscripten-core/emscripten/issues/13582.
      
      Reviewed By: dschuff, tlively
      
      Differential Revision: https://reviews.llvm.org/D97834
      561abd83
    • William S. Moses's avatar
      Revert "[Attributor] Enable heap-to-stack of any size" · 2b896e39
      William S. Moses authored
      This reverts commit 51bd42ef.
      2b896e39
    • Sanjay Patel's avatar
      [LoopVectorize] propagate fast-math-flags from induction instructions · 1bee5497
      Sanjay Patel authored
      This code assumed that FP math was only permissable if it was
      fully "fast", so it hard-coded "fast" when creating new instructions.
      
      The underlying code already allows matching recurrences/reductions
      that are only "reassoc", so this change should prevent the potential
      miscompile seen in the test diffs (we created "fast" ops even though
      none existed in the original code).
      
      I don't know if we need to create the temporary IRBuilder objects
      used here, so that could be follow-up clean-up.
      
      There's an open question about whether we should require "nsz" in
      addition to "reassoc" here. InstCombine uses that combo for its
      reassociative folds, but I think codegen is not as strict.
      1bee5497
    • William S. Moses's avatar
      [Attributor] Enable heap-to-stack of any size · 51bd42ef
      William S. Moses authored
      Enable Attributor's heap-to-stack to lower unbounded allocations given a max size of -1
      
      Differential Revision: https://reviews.llvm.org/D97873
      51bd42ef
    • Reid Kleckner's avatar
      [MS] Fix crash involving gnu stmt exprs and inalloca · 1c2e7d20
      Reid Kleckner authored
      Use a WeakTrackingVH to cope with the stmt emission logic that cleans up
      unreachable blocks. This invalidates the reference to the deferred
      replacement placeholder. Cope with it.
      
      Fixes PR25102 (from 2015!)
      1c2e7d20
    • dfukalov's avatar
      [NFC][AliasSetTracker] Remove implicit conversion AliasResult to integer. · 98994271
      dfukalov authored
      Preparation to make AliasResult scoped enumeration.
      
      Reviewed By: nikic
      
      Differential Revision: https://reviews.llvm.org/D97973
      98994271
    • Jay Foad's avatar
      [AMDGPU] Don't check for VMEM hazards on GFX10 · ed745839
      Jay Foad authored
      The hazard where a VMEM reads an SGPR written by a VALU counts as a data
      dependency hazard, so no nops are required on GFX10. Tested with Vulkan
      CTS on GFX10.1 and GFX10.3.
      
      Differential Revision: https://reviews.llvm.org/D97926
      ed745839
    • LLVM GN Syncbot's avatar
      [gn build] Port d7834556 · ba18a51c
      LLVM GN Syncbot authored
      ba18a51c
    • Nico Weber's avatar
      [gn build] port db06088d · 4b192f80
      Nico Weber authored
      4b192f80
    • Eric Schweitz's avatar
      [flang][fir][NFC] Update comments. · 21c8e1b0
      Eric Schweitz authored
      21c8e1b0
    • KareemErgawy-TomTom's avatar
      [MLIR][SPIRV] Rename `spv.globalVariable` to `spv.GlobalVariable`. · c74eb466
      KareemErgawy-TomTom authored
      To unify the naming scheme across all ops in the SPIR-V dialect, we are
      moving from spv.camelCase to spv.CamelCase everywhere.
      
      Reviewed By: antiagainst
      
      Differential Revision: https://reviews.llvm.org/D97919
      c74eb466
    • Martin Storsjö's avatar
    • KareemErgawy-TomTom's avatar
      [MLIR][SPIRV] Rename `spv.constant` to `spv.Constant`. · 5abdca47
      KareemErgawy-TomTom authored
      To unify the naming scheme across all ops in the SPIR-V dialect, we are
      moving from `spv.camelCase` to `spv.CamelCase` everywhere.
      
      Reviewed By: antiagainst
      
      Differential Revision: https://reviews.llvm.org/D97917
      5abdca47
    • Jinsong Ji's avatar
      [PowerPC] Disable more extended mne on AIX · 7967221a
      Jinsong Ji authored
      To avoid assembler errors.
      
      Reviewed By: sfertile
      
      Differential Revision: https://reviews.llvm.org/D97418
      7967221a
    • KareemErgawy-TomTom's avatar
      [MLIR][SPIRV] Rename `spv.spcConstant...` to `spv.SpcConstant...`. · 4d90e460
      KareemErgawy-TomTom authored
      To unify the naming scheme across all ops in the SPIR-V dialect, we are
      moving from spv.camelCase to spv.CamelCase everywhere.
      
      Differential Revision: https://reviews.llvm.org/D97920
      4d90e460
    • Philip Reames's avatar
      [basicaa] Recurse through a single phi input · 83ae4967
      Philip Reames authored
      BasicAA knows how to analyze phis, but to control compile time, we're fairly limited in doing so. This patch loosens that restriction just slightly when there is exactly one phi input (after discounting induction variable increments). The result of this is that we can handle more cases around nested and sibling loops with pointer induction variables.
      
      A few points to note.
      * This is deliberately extremely restrictive about recursing through at most one input of the phi.  There's a known general problem with BasicAA sometimes hitting exponential compile time already, and this patch makes every effort not to compound the problem.  Once the root issue is fixed, we can probably loosen the restrictions here a bit.
      * As seen in the test file, we're still missing cases which aren't *directly* based on phis (e.g. using the indvar increment). I believe this to be a separate problem and am going to explore this in another patch once this one lands.
      * As seen in the test file, this results in the unfortunate fact that using phivalues sometimes results in worse quality results. I believe this comes down to an oversight in how recursive phi detection was implemented for phivalues. I'm happy to tackle this in a follow up change.
      
      Differential Revision: https://reviews.llvm.org/D97401
      83ae4967
    • River Riddle's avatar
      [mlir][IR][NFC] Move a majority of the builtin attributes to ODS · 2f37cdd5
      River Riddle authored
      Now that attributes can be generated using ODS, we can move the builtin attributes as well. This revision removes a majority of the builtin attributes with a few left for followup revisions. The attributes moved to ODS in this revision are: AffineMapAttr, ArrayAttr, DictionaryAttr, IntegerSetAttr, StringAttr, SymbolRefAttr, TypeAttr, and UnitAttr.
      
      Differential Revision: https://reviews.llvm.org/D97591
      2f37cdd5
    • River Riddle's avatar
      [mlir][AttrDefGen] Add support for specifying the value type of an attribute · 1447ec51
      River Riddle authored
      The value type of the attribute can be specified by either overriding the typeBuilder field on the AttrDef, or by providing a parameter of type `AttributeSelfTypeParameter`. This removes the need to define custom storage class constructors for attributes that have a value type other than NoneType.
      
      Differential Revision: https://reviews.llvm.org/D97590
      1447ec51
    • Louis Dionne's avatar
    • George Balatsouras's avatar
      [dfsan] Increase coverage of vector and select tests · bd99f232
      George Balatsouras authored
      Add more expectations in vector.ll and select.ll based on command-line option combinations.
      Also, remove hard-coded shadow width references to enable fast8 transition.
      
      Reviewed By: stephan.yichao.zhao
      
      Differential Revision: https://reviews.llvm.org/D97903
      bd99f232
    • Francis Visoiu Mistrih's avatar
      [Remarks] Emit variable info in auto-init remarks · 365b7839
      Francis Visoiu Mistrih authored
      This enhances the auto-init remark with information about the variable
      that is auto-initialized.
      
      This is based of debug info if available, or alloca names (mostly for
      development purposes).
      
      ```
      auto-init.c:4:7: remark: Call to memset inserted by -ftrivial-auto-var-init. Memory operation size: 4096 bytes.Variables: var (4096 bytes). [-Rpass-missed=annotation-remarks]
        int var[1024];
            ^
      ```
      
      This allows to see things like partial initialization of a variable that
      the optimizer won't be able to completely remove.
      
      Differential Revision: https://reviews.llvm.org/D97734
      365b7839
    • Petar Avramovic's avatar
      Reland [GlobalISel] Start using vectors in GISelKnownBits · d7834556
      Petar Avramovic authored
      This is recommit of 4c8fb7dd.
      MIR in one unit test had mismatched types.
      
      For vectors we consider a bit as known if it is the same for all demanded
      vector elements (all elements by default). KnownBits BitWidth for vector
      type is size of vector element. Add support for G_BUILD_VECTOR.
      This allows combines of urem_pow2_to_mask in pre-legalizer combiner.
      
      Differential Revision: https://reviews.llvm.org/D96122
      d7834556
    • Nicolas Guillemot's avatar
      Revert "[Support] Add raw_ostream_iterator: ostream_iterator for raw_ostream" · 6b8cf735
      Nicolas Guillemot authored
      This reverts commit 7479a2e0.
      
      This commit causes compile errors on clang-x64-windows-msvc, so I'm
      reverting the patch for now.
      
      For reference, the error in question is:
      
      ```
      error C2280: 'llvm::raw_ostream_iterator<char,char>
      &llvm::raw_ostream_iterator<char,char>::operator =(const
      llvm::raw_ostream_iterator<char,char> &)': attempting to reference a deleted
      function
      
      note: compiler has generated 'llvm::raw_ostream_iterator<char,char>::operator ='
      here
      
      note: 'llvm::raw_ostream_iterator<char,char>
      &llvm::raw_ostream_iterator<char,char>::operator =(const
      llvm::raw_ostream_iterator<char,char> &)': function was implicitly deleted
      because 'llvm::raw_ostream_iterator<char,char>' has a data member
      'llvm::raw_ostream_iterator<char,char>::OutStream' of reference type
      ```
      6b8cf735
    • Benjamin Kramer's avatar
    • Philip Reames's avatar
    • Philip Reames's avatar
      cf40539e
    • Philip Reames's avatar
      [test] Add DCE coverage for gc.relocate · f1fdbd67
      Philip Reames authored
      f1fdbd67