1. Feb 13, 2021
    • Mehdi Amini's avatar
      [mlir][Linalg] Improve region support in Linalg ops · aa4e466c
      Mehdi Amini authored
      This revision takes advantage of the newly extended `ref` directive in assembly format
      to allow better region handling for LinalgOps. Specifically, FillOp and CopyOp now build their regions explicitly which allows retiring older behavior that relied on specific op knowledge in both lowering to loops and vectorization.
      
      This reverts commit 3f22547f and reland 973e133b with a workaround for
      a gcc bug that does not accept lambda default parameters:
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59949
      
      Differential Revision: https://reviews.llvm.org/D96598
      aa4e466c
    • Shafik Yaghmour's avatar
      [LLDB] Fix LLDB_LOG calls to use correct formatting · 9f175998
      Shafik Yaghmour authored
      It looks like a previous change switched these from LLDB_LOGF but did not update the format strings.
      
      Differential Revision: https://reviews.llvm.org/D96550
      9f175998
    • Fangrui Song's avatar
      DebugInfo/Symbolize: Exclude ARM mapping symbols for .symtab symbolization after D95916 · a7ceef92
      Fangrui Song authored
      Their names don't convey much information, so they should be excluded.
      The behavior matches addr2line.
      
      Differential Revision: https://reviews.llvm.org/D96617
      a7ceef92
    • Diego Caballero's avatar
      [mlir][Vector] Align gather/scatter/expand/compress API · 656674a7
      Diego Caballero authored
      Align the vector gather/scatter/expand/compress API with
      the vector load/store/maskedload/maskedstore API.
      
      Reviewed By: aartbik
      
      Differential Revision: https://reviews.llvm.org/D96396
      656674a7
    • Diego Caballero's avatar
      [mlir][Vector] Introduce 'vector.load' and 'vector.store' ops · ee66e43a
      Diego Caballero authored
      This patch adds the 'vector.load' and 'vector.store' ops to the Vector
      dialect [1]. These operations model *contiguous* vector loads and stores
      from/to memory. Their semantics are similar to the 'affine.vector_load' and
      'affine.vector_store' counterparts but without the affine constraints. The
      most relevant feature is that these new vector operations may perform a vector
      load/store on memrefs with a non-vector element type, unlike 'std.load' and
      'std.store' ops. This opens the representation to model more generic vector
      load/store scenarios: unaligned vector loads/stores, perform scalar and vector
      memory access on the same memref, decouple memory allocation constraints from
      memory accesses, etc [1]. These operations will also facilitate the progressive
      lowering of both Affine vector loads/stores and Vector transfer reads/writes
      for those that read/write contiguous slices from/to memory.
      
      In particular, this patch adds the 'vector.load' and 'vector.store' ops to the
      Vector dialect, implements their lowering to the LLVM dialect, and changes the
      lowering of 'affine.vector_load' and 'affine.vector_store' ops to the new vector
      ops. The lowering of Vector transfer reads/writes will be implemented in the
      future, probably as an independent pass. The API of 'vector.maskedload' and
      'vector.maskedstore' has also been changed slightly to align it with the
      transfer read/write ops and the vector new ops. This will improve reusability
      among all these operations. For example, the lowering of 'vector.load',
      'vector.store', 'vector.maskedload' and 'vector.maskedstore' to the LLVM dialect
      is implemented with a single template conversion pattern.
      
      [1] https://llvm.discourse.group/t/memref-type-and-data-layout/
      
      Reviewed By: nicolasvasilache
      
      Differential Revision: https://reviews.llvm.org/D96185
      ee66e43a
    • Paul Robinson's avatar
      [RGT][GlobalIsel] Add missing setUp() calls to legalizer unittests · 98754e29
      Paul Robinson authored
      Some of these accidentally disabled tests failed as a result; updated
      tests per @qcolombet instructions. A small number needed additional
      updates because legalization has actually changed since they were
      written.
      
      Found by the Rotten Green Tests project.
      
      Differential Revision: https://reviews.llvm.org/D95257
      98754e29
    • Xun Li's avatar
      [NFC][Coroutine] Fix an error message on coro.id verification · a0d09ce4
      Xun Li authored
      The error message should be about coro.id, not coro.begin
      
      Differential Revision: https://reviews.llvm.org/D96447
      a0d09ce4
    • LLVM GN Syncbot's avatar
      [gn build] Port cb2d2ae5 · 7ff0cbe4
      LLVM GN Syncbot authored
      7ff0cbe4
    • Zbigniew Sarbinowski's avatar
      [SystemZ][ZOS] Provide CLOCK_MONOTONIC alternative · cb2d2ae5
      Zbigniew Sarbinowski authored
      We need CLOCK_MONOTONIC equivalent implementation for z/OS within libc++. The default implementation is asserting.
      
      On z/OS the lack of  'clock_gettime()' and 'time_point()' force us to look for alternatives.
      The current proposal is to use `gettimeofday()` for CLOCK_MONOTONIC  which is also used in CLOCK_REALTIME.  This will allow us to skip the assertion with compromised CLOCK_MONOTONIC implementation which will not guarantee to never go back in time because it will use `gettimeofday()` but only when it's set.
      
      Is this a good compromise for platforms which does not support monotonic clock?
      Hopefully this will spark the discussion and agreement how to proceed in this situation.
      
      Reviewed By: #libc, ldionne, hubert.reinterpretcast
      
      Differential Revision: https://reviews.llvm.org/D93542
      cb2d2ae5
    • David Green's avatar
      [ARM] Optimize fp store of extract to integer store if already available. · 875f0cbc
      David Green authored
      Given a floating point store from an extracted vector, with an integer
      VGETLANE that already exists, storing the existing VGETLANEu directly
      can be better for performance. As the value is known to already be in an
      integer registers, this can help reduce fp register pressure, removed
      the need for the fp extract and allows use of more integer post-inc
      stores not available with vstr.
      
      This can be a bit narrow in scope, but helps with certain biquad kernels
      that store shuffled vector elements.
      
      Differential Revision: https://reviews.llvm.org/D96159
      875f0cbc
    • Scott Linder's avatar
      [Symbolize] Teach symbolizer to work directly on object file. · 12999d74
      Scott Linder authored
      This patch intended to provide additional interface to LLVMsymbolizer
      such that they work directly on object files. There is an existing
      method - symbolizecode which takes an object file, this patch provides
      similar overloads for symbolizeInlinedCode, symbolizeData,
      symbolizeFrame. This can be useful for clients who already have a
      in-memory object files to symbolize for.
      
      Patch By: pvellien (praveen velliengiri)
      
      Reviewed By: scott.linder
      
      Differential Revision: https://reviews.llvm.org/D95232
      12999d74
    • Simon Pilgrim's avatar
      [DAG] Move basic USUBSAT pattern matches from X86 to DAGCombine · 4841a225
      Simon Pilgrim authored
      Begin transitioning the X86 vector code to recognise sub(umax(a,b) ,b) or sub(a,umin(a,b)) USUBSAT patterns to make it more generic and available to all targets.
      
      This initial patch just moves the basic umin/umax patterns to DAG, removing some vector-only checks on the way - these are some of the patterns that the legalizer will try to expand back to so we can be reasonably relaxed about matching these pre-legalization.
      
      We can handle the trunc(sub(..))) variants as well, which helps with patterns where we were promoting to a wider type to detect overflow/saturation.
      
      The remaining x86 code requires some cleanup first - some of it isn't actually tested etc. I also need to resurrect D25987.
      
      Differential Revision: https://reviews.llvm.org/D96413
      4841a225
    • Amy Huang's avatar
      Revert "[DebugInfo] Add an attribute to force type info to be emitted for" · 3fe465fb
      Amy Huang authored
      Didn't mean to commit this.
      
      This reverts commit 1b5c2915.
      3fe465fb
    • Amy Huang's avatar
      Try to fix external_symbolizer_path.cpp test to stop breaking on buildbots. · 394913fd
      Amy Huang authored
      Not sure what the issue is, but it might be because the test copies
      llvm-symbolizer to a different directory, and it can't find libc++.
      Try to add some REQUIRES that we use in other tests where we copy
      llvm tools out of their original directories.
      394913fd
    • Amy Huang's avatar
      [DebugInfo] Add an attribute to force type info to be emitted for · 1b5c2915
      Amy Huang authored
      class types.
      
      The goal is to provide a way to bypass constructor homing when emitting
      class definitions and force class definitions in the debug info.
      
      Not sure about the wording of the attribute, or whether it should be
      specific to classes with constructors
      1b5c2915
    • Mehdi Amini's avatar
      Revert "[mlir][Linalg] Improve region support in Linalg ops." · 3f22547f
      Mehdi Amini authored
      This reverts commit 973e133b.
      
      It triggers an issue in gcc5 that require investigation, the build is
      broken with:
      
      /tmp/ccdpj3B9.s: Assembler messages:
      /tmp/ccdpj3B9.s:5821: Error: symbol `_ZNSt17_Function_handlerIFvjjEUljjE2_E9_M_invokeERKSt9_Any_dataOjS6_' is already defined
      /tmp/ccdpj3B9.s:5860: Error: symbol `_ZNSt14_Function_base13_Base_managerIUljjE2_E10_M_managerERSt9_Any_dataRKS3_St18_Manager_operation' is already defined
      3f22547f
    • Jianzhou Zhao's avatar
      [dfsan] Comment out ChainOrigin temporarily · a7538fee
      Jianzhou Zhao authored
      It was added by D96160, will be used by D96564.
      Some OS got errors if it is not used.
      Comment it out for the time being.
      a7538fee
    • Arnold Schwaighofer's avatar
      [coro] Add support for polymorphic return typed coro.suspend.async · e760ec2a
      Arnold Schwaighofer authored
      This allows for suspend point specific resume function types.
      
      Return values from a suspend point can therefore be modelled as
      arguments to the resume function. Allowing for directly passed return
      types.
      
      Differential Revision: https://reviews.llvm.org/D96136
      e760ec2a
    • Stanislav Mekhanoshin's avatar
      [AMDGPU] Allow accvgpr_read/write decode with opsel · c0d7a8bc
      Stanislav Mekhanoshin authored
      These two instructions are VOP3P and have op_sel_hi bits,
      however do not use op_sel_hi. That is recommended to set
      unused op_sel_hi bits to 1. However, we cannot decode
      both representations with 1 and 0 if bits are set to
      default value 1. If bits are set to be ignored with '?'
      initializer then encoding defaults them to 0.
      
      The patch is a hack to force ignored '?' bits to 1 on
      encoding for these instructions.
      
      There is still canonicalization happens on disasm print
      if incoming values are non-default, so that disasm output
      does not match binary input, but this is pre-existing
      problem for all instructions with '?' bits.
      
      Fixes: SWDEV-272540
      
      Differential Revision: https://reviews.llvm.org/D96543
      c0d7a8bc
    • Lukas Sommer's avatar
      [CodeGen] New pass: Replace vector intrinsics with call to vector library · 6577cef9
      Lukas Sommer authored
      This patch adds a pass to replace calls to vector intrinsics (i.e., LLVM
      intrinsics operating on vector operands) with calls to a vector library.
      
      Currently, calls to LLVM intrinsics are only replaced with calls to vector
      libraries when scalar calls to intrinsics are vectorized by the Loop- or
      SLP-Vectorizer.
      
      With this pass, it is now possible to replace calls to LLVM intrinsics
      already operating on vector operands, e.g., if such code was generated
      by MLIR. For the replacement, information from the TargetLibraryInfo,
      e.g., as specified via -vector-library is used.
      
      This is a re-try of the original commit 2303e93e that was reverted
      due to pass manager problems. Other minor changes have also been made.
      
      Differential Revision: https://reviews.llvm.org/D95373
      6577cef9
    • Akira Hatanaka's avatar
      [ObjC][ARC] Use operand bundle 'clang.arc.attachedcall' instead of · ed4718ec
      Akira Hatanaka authored
      explicitly emitting retainRV or claimRV calls in the IR
      
      Background:
      
      This fixes a longstanding problem where llvm breaks ARC's autorelease
      optimization (see the link below) by separating calls from the marker
      instructions or retainRV/claimRV calls. The backend changes are in
      https://reviews.llvm.org/D92569.
      
      https://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-autoreleasereturnvalue
      
      What this patch does to fix the problem:
      
      - The front-end adds operand bundle "clang.arc.attachedcall" to calls,
        which indicates the call is implicitly followed by a marker
        instruction and an implicit retainRV/claimRV call that consumes the
        call result. In addition, it emits a call to
        @llvm.objc.clang.arc.noop.use, which consumes the call result, to
        prevent the middle-end passes from changing the return type of the
        called function. This is currently done only when the target is arm64
        and the optimization level is higher than -O0.
      
      - ARC optimizer temporarily emits retainRV/claimRV calls after the calls
        with the operand bundle in the IR and removes the inserted calls after
        processing the function.
      
      - ARC contract pass emits retainRV/claimRV calls after the call with the
        operand bundle. It doesn't remove the operand bundle on the call since
        the backend needs it to emit the marker instruction. The retainRV and
        claimRV calls are emitted late in the pipeline to prevent optimization
        passes from transforming the IR in a way that makes it harder for the
        ARC middle-end passes to figure out the def-use relationship between
        the call and the retainRV/claimRV calls (which is the cause of
        PR31925).
      
      - The function inliner removes an autoreleaseRV call in the callee if
        nothing in the callee prevents it from being paired up with the
        retainRV/claimRV call in the caller. It then inserts a release call if
        claimRV is attached to the call since autoreleaseRV+claimRV is
        equivalent to a release. If it cannot find an autoreleaseRV call, it
        tries to transfer the operand bundle to a function call in the callee.
        This is important since the ARC optimizer can remove the autoreleaseRV
        returning the callee result, which makes it impossible to pair it up
        with the retainRV/claimRV call in the caller. If that fails, it simply
        emits a retain call in the IR if retainRV is attached to the call and
        does nothing if claimRV is attached to it.
      
      - SCCP refrains from replacing the return value of a call with a
        constant value if the call has the operand bundle. This ensures the
        call always has at least one user (the call to
        @llvm.objc.clang.arc.noop.use).
      
      - This patch also fixes a bug in replaceUsesOfNonProtoConstant where
        multiple operand bundles of the same kind were being added to a call.
      
      Future work:
      
      - Use the operand bundle on x86-64.
      
      - Fix the auto upgrader to convert call+retainRV/claimRV pairs into
        calls with the operand bundles.
      
      rdar://71443534
      
      Differential Revision: https://reviews.llvm.org/D92808
      ed4718ec
    • Matthew G McGovern's avatar
      [sanitizers][Windows] Implement __sanitizer_purge_allocator for Win64 · 81b1d3da
      Matthew G McGovern authored
          Windows' memory unmapping has to be explicit, there is no madvise.
      Similarly, re-mapping memory has to be explicit as well. This patch
      implements a basic method for remapping memory which was previously
      returned to the OS on Windows.
      
      Patch by Matthew G. McGovern and Jordyn Puryear
      81b1d3da
    • Hongtao Yu's avatar
      [ThinLTO][gold] Fix filenaming scheme for tasks. · 0b1914e8
      Hongtao Yu authored
      The gold LTO plugin uses a set of hooks to implements emit-llvm and capture intermediate file generated during LTO. The hooks are called by each lto backend thread with a taskID as argument to differentiate between threads and tasks. Currently, all threads are overwriting the same file which results into only the intermediate output of the last backend thread to be preserved. This diff encodes the taskID into the filename.
      
      Reviewed By: tejohnson, wenlei
      
      Differential Revision: https://reviews.llvm.org/D96173
      0b1914e8
    • Alex Zinenko's avatar
      [mlir] Use dialect interfaces to translate OpenMP dialect to LLVM IR · 66900b3e
      Alex Zinenko authored
      Migrate the translation of the OpenMP dialect operations to LLVM IR to the new
      dialect-based mechanism.
      
      Depends On D96503
      
      Reviewed By: nicolasvasilache
      
      Differential Revision: https://reviews.llvm.org/D96504
      66900b3e
    • Kadir Cetinkaya's avatar
      [clangd] Introduce Modules · 2423a386
      Kadir Cetinkaya authored
      Modules can be used to augment clangd's behaviours in various features.
      
      Differential Revision: https://reviews.llvm.org/D96244
      2423a386
    • Craig Topper's avatar
      [RISCV] Add support for integer fixed vector setcc · 1697cc78
      Craig Topper authored
      I believe I've covered all orderings of splat operands here. Better
      canonicalization in lowering might help reduce this. I did not handle
      the immediate adjustments needed for set(u)gt/set(u)lt.
      
      Testing here is limited to byte types because the scalable vector
      type used for masks for the store is calculated assuming 8 byte
      elements. But for the setcc its based on the element count of the
      container type for the setcc input. So they don't agree. We'll need
      to enhanced D96352 to handle this I think.
      
      Differential Revision: https://reviews.llvm.org/D96443
      1697cc78
    • Craig Topper's avatar
      [RISCV] Add support for matching .vx and .vi forms of binary instructions for fixed vectors. · 875c76de
      Craig Topper authored
      Unlike scalable vectors, I'm only using a ComplexPattern for
      the immediate itself. The vmv_v_x is matched explicitly. We igore
      the VL argument when matching a binary operator, but we do check
      it when matching splat directly.
      
      I left out tests for vXi64 as they fail on rv32 right now.
      
      Reviewed By: frasercrmck
      
      Differential Revision: https://reviews.llvm.org/D96365
      875c76de
    • Jianzhou Zhao's avatar
      [dfsan] Turn off THP at dfsan_flush · 7590c007
      Jianzhou Zhao authored
      https://reviews.llvm.org/D89662 turned this off at dfsan_init.
      dfsan_flush also needs to turn it off.
      W/o this a program may get more and more memory usage after hours.
      
      Reviewed-by: morehouse
      
      Differential Revision: https://reviews.llvm.org/D96569
      7590c007
    • Sam Clegg's avatar
      Revert "[lld][WebAssembly] Fix for weak undefined functions in -pie mode" · e1617d23
      Sam Clegg authored
      This reverts commit ac2be2b6.
      
      This causes a whole much of emscripten tests to fail due to newly
      undefined symbols appearing.  Will investigate and look into re-landing
      later.
      e1617d23
    • Sam McCall's avatar
    • LLVM GN Syncbot's avatar
      [gn build] Port ba3ea9c6 · ac2627fd
      LLVM GN Syncbot authored
      ac2627fd
    • Nathan James's avatar
      [clangd] Fix clang tidy provider when multiple config files exist in directory tree · ba3ea9c6
      Nathan James authored
      Currently Clang tidy provider searches from the root directory up to the target directory, this is the opposite of how clang-tidy searches for config files.
      The result of this is .clang-tidy files are ignored in any subdirectory of a directory containing a .clang-tidy file.
      
      Reviewed By: sammccall
      
      Differential Revision: https://reviews.llvm.org/D96204
      ba3ea9c6
    • Florian Hahn's avatar
      [clang] Update mustprogress tests. · fb4d8fe8
      Florian Hahn authored
      This unifies the positive and negative tests in a single file and
      manually adjusts the check lines to check for differences surgically.
      fb4d8fe8
    • Alex Zinenko's avatar
      [mlir] Introduce dialect interfaces for translation to LLVM IR · b77bac05
      Alex Zinenko authored
      The existing approach to translation to the LLVM IR relies on a single
      translation supporting the base LLVM dialect, extensible through inheritance to
      support intrinsic-based dialects also derived from LLVM IR such as NVVM and
      AVX512. This approach does not scale well as it requires additional
      translations to be created for each new intrinsic-based dialect and does not
      allow them to mix in the same module, contrary to the rest of the MLIR
      infrastructure. Furthermore, OpenMP translation ingrained itself into the main
      translation mechanism.
      
      Start refactoring the translation to LLVM IR to operate using dialect
      interfaces. Each dialect that contains ops translatable to LLVM IR can
      implement the interface for translating them, and the top-level translation
      driver can operate on interfaces without knowing about specific dialects.
      Furthermore, the delayed dialect registration mechanism allows one to avoid a
      dependency on LLVM IR in the dialect that is translated to it by implementing
      the translation as a separate library and only registering it at the client
      level.
      
      This change introduces the new mechanism and factors out the translation of the
      "main" LLVM dialect. The remaining dialects will follow suit.
      
      Reviewed By: nicolasvasilache
      
      Differential Revision: https://reviews.llvm.org/D96503
      b77bac05
    • Yitzhak Mandelbaum's avatar
      [clang-tidy] Fix `TransformerClangTidyCheck`'s handling of include insertions. · 33f35a4b
      Yitzhak Mandelbaum authored
      Currently, all include insertions are directed to the main file. However,
      Transformer rules can specify alternative destinations for include
      insertions. This patch fixes the code to associate the include with the correct
      file.
      
      This patch was tested manually. The clang tidy unit test framework does not
      support testing changes to header files. Given that this is a bug fix for a live
      bug, the patch relies on manual testing rather than blocking on upgrading the
      unit test framework.
      
      Differential Revision: https://reviews.llvm.org/D96542
      33f35a4b
    • Florian Hahn's avatar
    • Florian Hahn's avatar
      [AArch64] Add test case where machine outliner breaks up a bundle. · a3f6233f
      Florian Hahn authored
      This is a backend test for PR49082.
      a3f6233f
    • Petar Avramovic's avatar
      AMDGPU/GlobalISel: Calculate isKnownNeverNaN for fminnum and fmaxnum · f0d65f40
      Petar Avramovic authored
      Implements same logis as in SelectionDAG.
      G_FMINNUM_IEEE and G_FMAXNUM_IEEE are never SNaN by definition and
      never NaN when one operand is known non-NaN and other known non-SNaN.
      G_FMINNUM and G_FMAXNUM are never NaN/SNaN when one of the operands
      is known non-NaN/SNaN.
      
      Differential Revision: https://reviews.llvm.org/D91716
      f0d65f40
    • Petar Avramovic's avatar
    • Petar Avramovic's avatar