1. Feb 13, 2021
    • Florian Hahn's avatar
      [clang] Remove redundant condition (NFC). · 6280bb4c
      Florian Hahn authored
      6280bb4c
    • Jessica Paquette's avatar
      [GlobalISel] Combine (x + 0) -> x, G_PTR_ADD edition · 145549ff
      Jessica Paquette authored
      Add it to right_identity_zero.
      
      Differential Revision: https://reviews.llvm.org/D96621
      145549ff
    • Vedant Kumar's avatar
      [docs/Coverage] Document -show-region-summary · 0c4935bb
      Vedant Kumar authored
      As a drive-by, fix the section in the clang docs about the number of
      statistics visible in a report.
      0c4935bb
    • Vedant Kumar's avatar
      13bd6fb4
    • Martin Storsjö's avatar
      [OpenMP] Silence more warning flags · 496ca412
      Martin Storsjö authored
      This silences warnings like these, in mingw builds with clang:
      
      runtime/src/kmp_atomic.h:1021:13: warning: '__kmpc_atomic_cmplx8_rd' has C-linkage specified, but returns user-defined type 'kmp_cmplx64' (aka '__kmp_cmplx64_t') which is incompatible with C [-Wreturn-type-c-linkage]
      
      runtime/src/z_Windows_NT_util.cpp:479:17: warning: cast from 'volatile void *' to 'type-parameter-0-0 *' drops volatile qualifier [-Wcast-qual]
          flag = (C *)th->th.th_sleep_loc;
      
      runtime/src/z_Windows_NT_util.cpp:1321:14: warning: cast to 'void *' from smaller integer type 'DWORD' (aka 'unsigned long') [-Wint-to-void-pointer-cast]
        } else if ((void *)exit_val != (void *)th) {
      
      Differential Revision: https://reviews.llvm.org/D96585
      496ca412
    • Martin Storsjö's avatar
      [OpenMP] Avoid warnings about unused static functions on windows · 16428a8d
      Martin Storsjö authored
      Add ifdefs around one function that only is used in unix build
      configurations.
      
      Add a void cast for a windows specific function that currently is
      unused but may be intended to be used at some point.
      
      Differential Revision: https://reviews.llvm.org/D96584
      16428a8d
    • Martin Storsjö's avatar
      [OpenMP] Remove two entirely unused variables · b388c84c
      Martin Storsjö authored
      Differential Revision: https://reviews.llvm.org/D96583
      b388c84c
    • Martin Storsjö's avatar
      [OpenMP] Add void casts to silence unused variable warnings · b3d84790
      Martin Storsjö authored
      These variables are used only in certain build configurations,
      or marked with a todo comment indicating that they should be
      used/checked/reported.
      
      Differential Revision: https://reviews.llvm.org/D96582
      b3d84790
    • Martin Storsjö's avatar
      [OpenMP] Only use #pragma comment(lib, ...) in MSVC build configurations · 3f9519b7
      Martin Storsjö authored
      MinGW build configurations don't support this pragma (unless
      compiling with clang, with -fms-extensions, and linking with
      lld), and at least clang warns about it.
      
      This library does end up linked by the cmake files anyway (as
      long as the check works properly).
      
      Differential Revision: https://reviews.llvm.org/D96581
      3f9519b7
    • Martin Storsjö's avatar
      [OpenMP] Fix the check for libpsapi for i386 · 77632422
      Martin Storsjö authored
      check_library_exists fails for stdcall functions, because that
      check doesn't include the necessary headers (and thus fails with
      an undefined reference to _EnumProcessModules, when the import
      library symbol actually is called _EnumProcessModules@16).
      
      Merge the two previous checks check_include_files and
      check_library_exists into one with check_c_source_compiles, and
      merge the variables that indicate whether it succeeded.
      
      Differential Revision: https://reviews.llvm.org/D96580
      77632422
    • James Y Knight's avatar
      Fix layering after ed4718ec. · 3c06676d
      James Y Knight authored
      That commit added a dependency from IR to Analysis, which isn't
      allowed. Fix it by duplicating a string constant.
      3c06676d
    • Amara Emerson's avatar
      [GlobalISel] Propagate extends through G_PHIs into the incoming value blocks. · 5d6d9b63
      Amara Emerson authored
      This combine tries to do inter-block hoisting of extends of G_PHIs, into the
      originating blocks of the phi's incoming value. The idea is to expose further
      optimization opportunities that are normally obscured by the PHI.
      
      Some basic heuristics, and a target hook for AArch64 is added, to allow tuning.
      E.g. if the extend is used by a G_PTR_ADD, it doesn't perform this combine
      since it may be folded into the addressing mode during selection.
      
      There are very minor code size improvements on AArch64 -Os, but the real benefit
      is that it unlocks optimizations like AArch64 conditional compares on some
      benchmarks.
      
      Differential Revision: https://reviews.llvm.org/D95703
      5d6d9b63
    • Amy Huang's avatar
    • Florian Hahn's avatar
      [clang] Add -ffinite-loops & -fno-finite-loops options. · 51bf4c0e
      Florian Hahn authored
      This patch adds 2 new options to control when Clang adds `mustprogress`:
      
        1. -ffinite-loops: assume all loops are finite; mustprogress is added
           to all loops, regardless of the selected language standard.
        2. -fno-finite-loops: assume no loop is finite; mustprogress is not
           added to any loop or function. We could add mustprogress to
           functions without loops, but we would have to detect that in Clang,
           which is probably not worth it.
      
      Reviewed By: jdoerfert
      
      Differential Revision: https://reviews.llvm.org/D96419
      51bf4c0e
    • Andy Wingo's avatar
      [WebAssembly][lld] Preassign table number 0 to indirect function table for MVP inputs · 4fc25573
      Andy Wingo authored
      MVP object files may import at most one table, and if they do, it must
      be assigned table number zero in the output, as the references to that
      table are not relocatable.  Ensure that this is the case, even if some
      inputs define other tables.
      
      Differential Revision: https://reviews.llvm.org/D96001
      4fc25573
    • Marco Vanotti's avatar
      Expand unit tests for fuzzer::Merger · 0fe4701e
      Marco Vanotti authored
      This change adds additional unit tests for fuzzer::Merger::Parse and fuzzer::Merger::Merge in anticipation of additional changes to the merge control file format to support cross-process fuzzing.
      
      It modifies the parameter handling of Merge slightly in order to make NewFeatures and NewCov consistent with NewFiles; namely, Merge *replaces* the contents of these output parameters rather than accumulating them (thereby fixing a buggy return value).
      
      This is change 1 of (at least) 18 for cross-process fuzzing support.
      
      Reviewed By: morehouse
      
      Differential Revision: https://reviews.llvm.org/D94506
      0fe4701e
    • 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