1. Sep 02, 2021
    • Jon Chesterfield's avatar
      Revert "[openmp] Accept directory for libomptarget-bc-path" · 6b0636ce
      Jon Chesterfield authored
      Windows separator problem. Fixing that broke another regex.
      This reverts commit 0173e024.
      6b0636ce
    • Jon Chesterfield's avatar
      Revert "[openmp] No longer use LIBRARY_PATH to find devicertl" · cef11996
      Jon Chesterfield authored
      This reverts commit 7a228f87.
      Failing test case under CI
      cef11996
    • Siva Chandra Reddy's avatar
      [libc] Add a skeleton for C standard condition variable functions. · 2f4f452f
      Siva Chandra Reddy authored
      This patch adds a skeleton as a preparatory step for the next patch which
      adds the actual implementations of the condition variable functions.
      
      Reviewed By: michaelrj
      
      Differential Revision: https://reviews.llvm.org/D108947
      2f4f452f
    • Craig Topper's avatar
      [RISCV] Fold (RISCVISD::SELECT_CC X, Y, CC, Z, Z) -> Z. · ccbb4c8b
      Craig Topper authored
      If the true and false values are the same, we don't need a SELECT_CC.
      
      This would normally be folded before a select is legalized to
      select_cc. The test case exploits the late legalization of vscale
      to trigger a case where they become identical after legalization.
      
      This works around an issue found on a test case in D107957. In that
      case the true/false values were both eventually 0 and the select was
      used by a vector AVL operand. The select_cc got expanded to control
      flow and a phi, but the phi inputs were both copies from X0. MachineIR
      optimizations simplified this to a single copy from X0 going into the
      vector instruction. This became the input of a vsetvli after vsetvli
      insertion. Then register coalescing folded the copy into the vsetvli.
      X0 as the source of a vsetvli is a special encoding and should not be
      created by coalesing. We need to fix our vsetvli handling to make sure
      this can never happen any other way, but removing the unneeded select
      is still a worthwhile optimization.
      ccbb4c8b
    • Kostya Serebryany's avatar
      [ubsan] warn inside the sigaction interceptor if static linking is suspected,... · b0fdbadf
      Kostya Serebryany authored
      [ubsan] warn inside the sigaction interceptor if static linking is suspected, and continue instead of crashing on null deref
      
      [ubsan] warn inside the sigaction interceptor if static linking is suspected, and continue instead of crashing on null deref
      
      Reviewed By: kostik
      
      Differential Revision: https://reviews.llvm.org/D109081
      b0fdbadf
    • Jon Chesterfield's avatar
    • Jon Chesterfield's avatar
      [openmp] No longer use LIBRARY_PATH to find devicertl · 7a228f87
      Jon Chesterfield authored
      Given D109057, change test runner to use the libomptarget-x-bc-path
      argument instead of the LIBRARY_PATH environment variable to find the device
      library.
      
      Also drop the use of LIBRARY_PATH environment variable as it is far
      too easy to pull in the device library from an unrelated toolchain by accident
      with the current setup. No loss in flexibility to developers as the clang
      commandline used here is still available.
      
      Reviewed By: jdoerfert
      
      Differential Revision: https://reviews.llvm.org/D109061
      7a228f87
    • Hongtao Yu's avatar
      [CSSPGO] Sort function offset table to speed up profile loading. · f4711e0d
      Hongtao Yu authored
      With the context split work, the context-based (an array of strings) sorting performed at profile load time is way more expansive than single-string-based sorting. This is likely due to auxiliary operations done on each array element, such as indirect references, std::min operations, also likely cache misses. In this change I'm presorting profiles during profile generation time to avoid sorting at compile time.
      
      Compared to the previous context-split work, this effectively cuts down compile time by 20% for one of our large services and brings us closer to non-CS build, with still a small gap in build time.
      
      Reviewed By: wenlei, wmi
      
      Differential Revision: https://reviews.llvm.org/D109036
      f4711e0d
    • Nikita Popov's avatar
      [IVDescriptors] Make pointer inductions compatible with opaque pointers · 02f74ead
      Nikita Popov authored
      Store the used element type in the InductionDescriptor. For typed
      pointers, it remains the pointer element type. For opaque pointers,
      we always use an i8 element type, such that the step is a simple
      offset.
      
      A previous version of this patch instead tried to guess the element
      type from an induction GEP, but this is not reliable, as the GEP
      may be hidden (see @both in iv_outside_user.ll).
      
      Differential Revision: https://reviews.llvm.org/D104795
      02f74ead
    • Siva Chandra Reddy's avatar
      [libc] Mark return value of memcpy in strcpy as initialized for msan. · 0239adac
      Siva Chandra Reddy authored
      Reviewed By: michaelrj
      
      Differential Revision: https://reviews.llvm.org/D109045
      0239adac
    • Mehdi Amini's avatar
      Remove deprecated registration APIs (NFC) · 43a89436
      Mehdi Amini authored
      In D104421, we changed the API for pass registration.
      Before you would write:
      
            void registerPass("my-pass", "My Pass Description.",
                              [] { return createMyPass(); });
      while now you’d only write:
      
            void registerPass([] { return createMyPass(); });
      
      If you’re using TableGen to define your pass registration, you shouldn’t have anything to do. If you’re using directly the C++ API here are some changes.
      Your project may also be broken even if you use TableGen and you call the
      generated registration API in case your pass implementation didn’t inherit from
      the MyPassBase class generated by TableGen.
      
      If you don't use TableGen, the "my-pass" and "My Pass Description." fields must
      be provided by overriding methods on the pass itself:
      
        llvm::StringRef getArgument() const final { return "my-pass"; }
        llvm::StringRef getDescription() const final {
          return "My Pass Description.";
        }
      
      Reviewed By: rriddle
      
      Differential Revision: https://reviews.llvm.org/D104429
      43a89436
    • Philip Reames's avatar
      [SCEV] If max BTC is zero, then so is the exact BTC [2 of 2] · 29fa37ec
      Philip Reames authored
      This extends D108921 into a generic rule applied to constructing ExitLimits along all paths. The remaining paths (primarily howFarToZero) don't have the same reasoning about UB sensitivity as the howManyLessThan ones did. Instead, the remain cause for max counts being more precise than exact counts is that we apply context sensitive loop guards on the max path, and not on the exact path. That choice is mildly suspect, but out of scope of this patch.
      
      The MVETailPredication.cpp change deserves a bit of explanation. We were previously figuring out that two SCEVs happened to be equal because the happened to be identical. When we optimized one with context sensitive information, but not the other, we lost the ability to prove them equal. So, cover this case by subtracting and then applying loop guards again. Without this, we see changes in test/CodeGen/Thumb2/mve-blockplacement.ll
      
      Differential Revision: https://reviews.llvm.org/D109015
      29fa37ec
    • Nico Weber's avatar
      [clang] Add a -canonical-prefixes option · 3d157cfc
      Nico Weber authored
      In https://reviews.llvm.org/D47480 I complained that there's no positive
      form of this flag, so let's add one :)
      
      https://gcc.gnu.org/PR29931 also has a pending patch to add the positive
      form to gcc (but there's admittedly not a lot of movement on that bug).
      
      This doesn't change any defaults.
      
      Differential Revision: https://reviews.llvm.org/D108818
      3d157cfc
    • Alexander Yermolovich's avatar
      [DWARF] Find offset of attribute. · 779d24e1
      Alexander Yermolovich authored
      This is used by BOLT to do patching of DebugInfo section, and Line Table. Directly by using find, and through getAttrFieldOffsetForUnit.
      
      Reviewed By: dblaikie
      
      Differential Revision: https://reviews.llvm.org/D107874
      779d24e1
    • Jon Chesterfield's avatar
      [openmp] Accept directory for libomptarget-bc-path · 0173e024
      Jon Chesterfield authored
      The commandline flag to specify a particular openmp devicertl library
      currently errors like:
      ```
      fatal error: cannot open file
            './runtimes/runtimes-bins/openmp/libomptarget':
            Is a directory
      ```
      CommonArgs successfully appends the directory to the commandline args then
      mlink-builtin-bitcode rejects it.
      
      This patch is a point fix to that. If --libomptarget-amdgcn-bc-path=directory
      then append the expected name for the current architecture and go on as before.
      This is useful for test runners that don't hardcode the architecture.
      
      Reviewed By: jdoerfert
      
      Differential Revision: https://reviews.llvm.org/D109057
      0173e024
    • Sanjay Patel's avatar
      [InstCombine] allow more min/max with 'not' folds for intrinsics · 8c7a7e1f
      Sanjay Patel authored
      isFreeToInvert allows min/max with 'not' on both operands,
      so easing the argument restriction catches the case where
      that operand has one use.
      
      We already handle the sub-patterns when there are less uses:
      https://alive2.llvm.org/ce/z/8Jatm_
      
      ...but this is another step towards parity with the
      equivalent icmp+select idioms ( D98152 ).
      
      Differential Revision: https://reviews.llvm.org/D109059
      8c7a7e1f
    • Sanjay Patel's avatar
      [InstCombine] use isFreeToInvert to generalize min/max with 'not' · 8a10f4a0
      Sanjay Patel authored
      This mimics the code for the corresponding cmp-select idiom.
      
      This also prevents an infinite loop because isFreeToInvert
      does not match constant expressions.
      
      So this patch solves the same problem as D108814 and obsoletes
      it, but my main motivation is to enhance the pattern matching
      to allow more invertible ops. That change will be a follow-up
      patch on top of this one.
      
      Differential Revision: https://reviews.llvm.org/D109058
      8a10f4a0
    • Arthur Eubanks's avatar
      b9b419a1
    • Arthur Eubanks's avatar
      [NFC] Use newly introduced *AtIndex methods · 52e6d70c
      Arthur Eubanks authored
      Introduced in D108788. These are clearer.
      52e6d70c
    • Adrian Prantl's avatar
      Tighten heuristic for coroutine debug info workaround. · 12de296d
      Adrian Prantl authored
      The OutermostLoad condition is supposed to strip the outermost
      DW_OP_deref operation because dbg.declares are implicitly
      indirect. This patch makes sure the heuristic is only applied to
      dbg.declare intrinsics and only if the outermost instruction is a
      load.
      
      This was found while qualifying the latest Swift compiler rebranch.
      
      rdar://82037764
      12de296d
    • Craig Topper's avatar
      [RISCV] Add a test case showing an extra sext.w near a sh2add with multiple uses. NFC · af1ca435
      Craig Topper authored
      See description in test.
      
      Reviewed By: frasercrmck
      
      Differential Revision: https://reviews.llvm.org/D108965
      af1ca435
    • LLVM GN Syncbot's avatar
      [gn build] Port 0922ce56 · 621a6153
      LLVM GN Syncbot authored
      621a6153
    • Jon Chesterfield's avatar
      [libomptarget] Set runpath on libomptarget, use that to drop LD_LIBRARY_PATH from test runner · 718e5a98
      Jon Chesterfield authored
      Using rpath instead of LD_LIBRARY_PATH to find libomp.so and
      libomptarget.so lets one rerun the already built test executables without
      setting environment variables and removes the risk of the test runner picking
      up different libraries to the developer debugging the failure.
      
      rpath usually means runpath, which is not transitive, so set runpath on
      libomptarget itself so that it can find the plugins located next to it,
      spelled $ORIGIN. This provides sufficient functionality to drop D102043
      
      Reviewed By: tianshilei1992
      
      Differential Revision: https://reviews.llvm.org/D109071
      718e5a98
    • Artem Belevich's avatar
      [IRLinker] Suppress linker warnings when linking with CUDA libdevice. · 3af981b0
      Artem Belevich authored
      libdevice bitcode provided by NVIDIA is linked with clang/LLVM-generated IR
      which uses nvptx*-nvidia-cuda triple. We need to mark them as compatible.
      
      Differential Revision: https://reviews.llvm.org/D108835
      3af981b0
    • Mark de Wever's avatar
      [libc++][format] Add __format_arg_store. · 0922ce56
      Mark de Wever authored
      This implements the struct `__format_arg_store` and its dependencies:
      * the class basic_format_arg,
      * the class basic_format_args,
      * the class basic_format_context,
      * the function make_format_args,
      * the function wmake_format_args,
      * the function visit_format_arg,
      * several Standard required typedefs.
      
      The following parts will be implemented in a later patch:
      
      * the child class `basic_format_arg::handle`,
      * the function `basic_format_arg::basic_format_arg(const T* p)`.
      
      The following extension has been implemented:
      * the class basic_format_arg supports `__[u]int128_t` on platform where libc++ supports 128 bit integrals.
      
      Implements parts of:
      * P0645 Text Formatting
      
      Completes:
      * LWG3371 visit_format_arg and make_format_args are not hidden friends
      * LWG3542 basic_format_arg mishandles basic_string_view with custom traits
      
      Note https://mordante.github.io/blog/2021/06/05/format.html gives a bit more information about the goals and non-goals of this initial patch serie...
      0922ce56
    • Arthur Eubanks's avatar
      [NFC] Rename attribute methods that work with indexes · c9693492
      Arthur Eubanks authored
      This is part one of a couple of patches to fully rename these methods.
      
      I've made the mistake of assuming that these indexes are for parameters
      multiple times, but actually they're based off of a weird indexing
      scheme AttributeList::AttrIndex where 0 is the return value and ~0 is
      the function. Hopefully renaming these methods will make this clearer.
      Ideally users should use more specific methods like
      AttributeList::getFnAttr().
      
      This patch simply adds the name that we want in the end. This is so the
      removal of the methods with the original names happens in a separate
      change to make it easier for downstream users.
      
      This touches all relevant methods in AttributeList, CallBase, and Function.
      
      Reviewed By: rnk
      
      Differential Revision: https://reviews.llvm.org/D108788
      c9693492
    • Thomas Lively's avatar
      [WebAssembly] Lower v2f32 to v2f64 extending loads with promote_low · fec47492
      Thomas Lively authored
      Previously extra wide v4f32 to v4f64 extending loads would be legalized to v2f32
      to v2f64 extending loads, which would then be scalarized by legalization. (v2f32
      to v2f64 extending loads not produced by legalization were already being emitted
      correctly.) Instead, mark v2f32 to v2f64 extending loads as legal and explicitly
      lower them using promote_low. This regresses the addressing modes supported for
      the extloads not produced by legalization, but that's a fine trade off for now.
      
      Differential Revision: https://reviews.llvm.org/D108496
      fec47492
    • Hongtao Yu's avatar
      [CSSPGO] Fix an access violation due to invalided std::vector pointer invalidation. · dde162d8
      Hongtao Yu authored
      std::vector pointers can be invalided while growing. Using std::list instead.
      dde162d8
    • Amara Emerson's avatar
      [AArch64][GlobalISel] Handle any-extending FPR loads in manual selection code. · a86bbe1e
      Amara Emerson authored
      When we have an any-extending FPR bank load, none of the tablegen patterns
      match and we fall back to the C++ selector. Like with the truncating stores
      that were fixed recently, the C++ wasn't able to handle it and ended up
      generating invalid copies between different size regclasses.
      
      This change adds handling for this case, splitting the load into a regular
      load and a SUBREG_TO_REG to extend it into the original wide destination reg.
      a86bbe1e
    • natashaknk's avatar
      [mlir][tosa] Small refactor to the functionality of Depthwise_Conv2D to add... · f596acc7
      natashaknk authored
      [mlir][tosa] Small refactor to the functionality of Depthwise_Conv2D to add the bias at the end of the convolution
      
      Follow-up to the Conv2d and fully_connected lowering adjustments
      
      Reviewed By: rsuderman
      
      Differential Revision: https://reviews.llvm.org/D108949
      f596acc7
    • Tyler Augustine's avatar
      Support alias.scope and noalias metadata lowering on intrinsics. · 7105512a
      Tyler Augustine authored
      Builds on https://reviews.llvm.org/D107870 to support annotating intrinsics with alias.scope and noalias metadata.
      
      Reviewed By: arpith-jacob, ftynse
      
      Differential Revision: https://reviews.llvm.org/D109025
      7105512a
    • peter klausler's avatar
      [flang] Include default component initialization in static initializers · d60a0220
      peter klausler authored
      The combined initializers constructed from DATA statements and explicit
      static initialization in declarations needs to include derived type
      component default initializations, overriding those default values
      without complaint with values from explicit DATA statement or declaration
      initializations when they overlap.  This also has to work for objects
      with storage association due to EQUIVALENCE.  When storage association causes
      default component initializations to overlap, emit errors if and only
      if the values differ (See Fortran 2018 subclause 19.5.3, esp. paragraph
      10).
      
      The f18 front-end has a module that analyzes and converts DATA statements
      into equivalent static initializers for objects.  For storage-associated
      objects, compiler-generated objects are created that overlay the entire
      association and fill it with a combined initializer.  This "data-to-inits"
      module already exists, and this patch is essentially extension and
      clean-up of its machinery to complete the job.
      
      Also: emit EQUIVALENCE to module files; mark compiler-created symbols
      and *don't* emit those to module files; check non-static EQUIVALENCE
      sets for conflicting default component initializations, so lowering
      doesn't have to check them or emit diagnostics.
      
      Differential Revision: https://reviews.llvm.org/D109022
      d60a0220
    • hsmahesha's avatar
      Revert "Revert "Disable ReplaceLDS pass, patch up tests to match"" · 97688bfd
      hsmahesha authored
      This reverts commit 5ae6804d.
      97688bfd
    • Hongtao Yu's avatar
      [CSSPGO] Enable loading MD5 CS profile. · 7ca80300
      Hongtao Yu authored
      Adding the compiler support of MD5 CS profile based on pervious context split work D107299. A MD5 CS profile is about 40% smaller than the string-based extbinary profile. As a result, the compilation is 15% faster.
      
      There are a few conversion from real names to md5 names that have been made on the sample loader and context tracker side to get it work.
      
      Reviewed By: wenlei, wmi
      
      Differential Revision: https://reviews.llvm.org/D108342
      7ca80300
    • Nikita Popov's avatar
      [LoadStoreVectorizer] Make aliasing check more precise · 9d720dcb
      Nikita Popov authored
      The load store vectorizer currently uses isNoAlias() to determine
      whether memory-accessing instructions should prevent vectorization.
      However, this only works for loads and stores. Additionally, a
      couple of intrinsics like assume are special-cased to be ignored.
      
      Instead use getModRefInfo() to generically determine whether the
      instruction accesses/modifies the relevant location. This will
      automatically handle all inaccessiblememonly intrinsics correctly
      (as well as other calls that don't modref for other reasons).
      This requires generalizing the code a bit, as it was previously
      only considering loads and stored in particular.
      
      Differential Revision: https://reviews.llvm.org/D109020
      9d720dcb
  2. Sep 01, 2021