Skip to content
  1. Sep 04, 2018
    • Sanjay Patel's avatar
      [InstCombine] improve xor+and/or tests · 664b2e3b
      Sanjay Patel authored
      The tests attempted to check for commuted variants
      of these folds, but complexity-based canonicalization
      meant we had no coverage for at least 1/2 of the cases.
      
      Also, the folds correctly check hasOneUse(), but there
      was no coverage for that.
      
      llvm-svn: 341394
      664b2e3b
    • Matt Arsenault's avatar
      AMDGPU: Fix DAG divergence not reporting flat loads · 813613c4
      Matt Arsenault authored
      Match behavior in DAG of r340343
      
      llvm-svn: 341393
      813613c4
    • Matt Arsenault's avatar
      DAG: Factor out helper function for odd vector sizes · a6f32f40
      Matt Arsenault authored
      llvm-svn: 341392
      a6f32f40
    • Hiroshi Yamauchi's avatar
      Fix build failures after rL341386. · 72ee6d60
      Hiroshi Yamauchi authored
      Reviewers: davidxl
      
      Reviewed By: davidxl
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D51647
      
      llvm-svn: 341391
      72ee6d60
    • Dan Gohman's avatar
      [WebAssembly] Fix operand rewriting in inline asm lowering. · 045a217b
      Dan Gohman authored
      Use MachineOperand::ChangeToImmediate rather than reassigning
      MachineOperands to new values created from MachineOperand::CreateImm,
      so that their parent pointers are preserved.
      
      This fixes "Instruction has operand with wrong parent set" errors
      reported by the MachineVerifier.
      
      llvm-svn: 341389
      045a217b
    • Hiroshi Yamauchi's avatar
      [PGO] Control Height Reduction · 9775a620
      Hiroshi Yamauchi authored
      Summary:
      Control height reduction merges conditional blocks of code and reduces the
      number of conditional branches in the hot path based on profiles.
      
      if (hot_cond1) { // Likely true.
        do_stg_hot1();
      }
      if (hot_cond2) { // Likely true.
        do_stg_hot2();
      }
      
      ->
      
      if (hot_cond1 && hot_cond2) { // Hot path.
        do_stg_hot1();
        do_stg_hot2();
      } else { // Cold path.
        if (hot_cond1) {
          do_stg_hot1();
        }
        if (hot_cond2) {
          do_stg_hot2();
        }
      }
      
      This speeds up some internal benchmarks up to ~30%.
      
      Reviewers: davidxl
      
      Reviewed By: davidxl
      
      Subscribers: xbolva00, dmgreen, mehdi_amini, llvm-commits, mgorny
      
      Differential Revision: https://reviews.llvm.org/D50591
      
      llvm-svn: 341386
      9775a620
    • Scott Linder's avatar
      [CodeGen] Fix remaining zext() assertions in SelectionDAG · cab029f4
      Scott Linder authored
      Fix remaining cases not committed in https://reviews.llvm.org/D49574
      
      Differential Revision: https://reviews.llvm.org/D50659
      
      llvm-svn: 341380
      cab029f4
    • Francis Visoiu Mistrih's avatar
    • Francis Visoiu Mistrih's avatar
      [MachO] Fix LC_DYSYMTAB validation for external symbols · 7690af4d
      Francis Visoiu Mistrih authored
      We were validating the same index (ilocalsym) twice, while iextdefsym
      was never validated.
      
      llvm-svn: 341378
      7690af4d
    • Jonas Devlieghere's avatar
      [dwarfdump] Improve -diff option by hiding more data. · 88145238
      Jonas Devlieghere authored
      The -diff option makes it easy to diff dwarf by hiding addresses and
      offsets. However not all of them were hidden, which should be fixed by
      this patch.
      
      Differential revision: https://reviews.llvm.org/D51593
      
      llvm-svn: 341377
      88145238
    • Chandler Carruth's avatar
      Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions · 6cb12444
      Chandler Carruth authored
      One of the tests is failing 50% of the time when expensive checks are
      enabled. Not sure how deep the problem is so just reverting while the
      author can investigate so that the bots stop repeatedly failing and
      blaming things incorrectly. Will respond with details on the original
      commit.
      
      llvm-svn: 341365
      6cb12444
    • Sven van Haastregt's avatar
      Fix some Wundef warnings in Compiler.h · 9a5cd78e
      Sven van Haastregt authored
      Check for definedness of the __cpp_sized_deallocation and
      __cpp_aligned_new feature test macros.  These will not be defined
      when the feature is not available, and that prevents any code that
      includes this header from compiling with -Wundef -Werror.
      
      Differential Revision: https://reviews.llvm.org/D51171
      
      llvm-svn: 341364
      9a5cd78e
    • Chandler Carruth's avatar
      [x86/SLH] Add a real Clang flag and LLVM IR attribute for Speculative · 664aa868
      Chandler Carruth authored
      Load Hardening.
      
      Wires up the existing pass to work with a proper IR attribute rather
      than just a hidden/internal flag. The internal flag continues to work
      for now, but I'll likely remove it soon.
      
      Most of the churn here is adding the IR attribute. I talked about this
      Kristof Beyls and he seemed at least initially OK with this direction.
      The idea of using a full attribute here is that we *do* expect at least
      some forms of this for other architectures. There isn't anything
      *inherently* x86-specific about this technique, just that we only have
      an implementation for x86 at the moment.
      
      While we could potentially expose this as a Clang-level attribute as
      well, that seems like a good question to defer for the moment as it
      isn't 100% clear whether that or some other programmer interface (or
      both?) would be best. We'll defer the programmer interface side of this
      for now, but at least get to the point where the feature can be enabled
      without relying on implementation details.
      
      This also allows us to do something that was really hard before: we can
      enable *just* the indirect call retpolines when using SLH. For x86, we
      don't have any other way to mitigate indirect calls. Other architectures
      may take a different approach of course, and none of this is surfaced to
      user-level flags.
      
      Differential Revision: https://reviews.llvm.org/D51157
      
      llvm-svn: 341363
      664aa868
    • Aaron Ballman's avatar
      Disable -Wnoexcept-type due to false positives with GCC. · 89225ed5
      Aaron Ballman authored
      GCC triggers false positives if a nothrow function is called through a template argument. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80985 for details. The LLVM libraries have no stable C++ API, so the warning is not useful.
      
      llvm-svn: 341361
      89225ed5
    • Chandler Carruth's avatar
      Revert r341342: Dwarf .debug section compression support (zlib, zlib-gnu). · 163222f5
      Chandler Carruth authored
      Also reverts follow-up commits r341343 and r341344.
      
      The primary commit continues to break some build bots even after the
      fixes in r341343 for UBSan issues:
      http://lab.llvm.org:8011/builders/clang-cmake-aarch64-full/builds/5823
      
      It is also failing for me locally (linux, x86-64).
      
      llvm-svn: 341360
      163222f5
    • Chandler Carruth's avatar
      [x86/SLH] Teach SLH to harden against the "ret2spec" attack by · 219888d1
      Chandler Carruth authored
      implementing the proposed mitigation technique described in the original
      design document.
      
      The idea is to check after calls that the return address used to arrive
      at that location is in fact the correct address. In the event of
      a mis-predicted return which reaches a *valid* return but not the
      *correct* return, this will detect the mismatch much like it would
      a mispredicted conditional branch.
      
      This is the last published attack vector that I am aware of in the
      Spectre v1 space which is not mitigated by SLH+retpolines. However,
      don't read *too* much into that: this is an area of ongoing research
      where we expect more issues to be discovered in the future, and it also
      makes no attempt to mitigate Spectre v4. Still, this is an important
      completeness bar for SLH.
      
      The change here is of course delightfully simple. It was predicated on
      cutting support for post-instruction symbols into LLVM which was not at
      all simple. Many thanks to Hal Finkel, Reid Kleckner, and Justin Bogner
      who helped me figure out how to do a bunch of the complex changes
      involved there.
      
      Differential Revision: https://reviews.llvm.org/D50837
      
      llvm-svn: 341358
      219888d1
    • Kristina Brooks's avatar
      Do not leak the Mach host port in sys::getHostCPUName() · 51ae9346
      Kristina Brooks authored
      Patch by rsesek (Robert Sesek)
      
      llvm-svn: 341357
      51ae9346
    • Chandler Carruth's avatar
      [x86/SLH] Teach SLH to harden indirect branches and switches without · 8d8489f5
      Chandler Carruth authored
      retpolines.
      
      This implements the core design of tracing the intended target into the
      target, checking it, and using that to update the predicate state. It
      takes advantage of a few interesting aspects of SLH to make it a bit
      easier to implement:
      - We already split critical edges with conditional branches, so we can
      assume those are gone.
      - We already unfolded any memory access in the indirect branch
      instruction itself.
      
      I've left hard errors in place to catch if any of these somewhat subtle
      invariants get violated.
      
      There is some code that I can factor out and share with D50837 when it
      lands, but I didn't want to couple landing the two patches, so I'll do
      that in a follow-up cleanup commit if alright.
      
      Factoring out the code to handle different scenarios of materializing an
      address remains frustratingly hard. In a bunch of cases you want to fold
      one of the cases into an immediate operand of some other instruction,
      and you also have both symbols and basic blocks being used which require
      different methods on the MI builder (and different operand kinds).
      Still, I'll take a stab at sharing at least some of this code in
      a follow-up if I can figure out how.
      
      Differential Revision: https://reviews.llvm.org/D51083
      
      llvm-svn: 341356
      8d8489f5
    • Nicola Zaghen's avatar
      [InstCombine] Fold icmp ugt/ult (add nuw X, C2), C --> icmp ugt/ult X, (C - C2) · 9588ad96
      Nicola Zaghen authored
      Support for sgt/slt was added in rL294898, this adds the same cases also for unsigned compares.
      
      This is the Alive proof: https://rise4fun.com/Alive/nyY
      
      Differential Revision: https://reviews.llvm.org/D50972
      
      llvm-svn: 341353
      9588ad96
    • Fedor Sergeev's avatar
      [NFC] correcting patterns in time-passes test to fix buildbot · 961811f3
      Fedor Sergeev authored
      llvm-svn: 341348
      961811f3
    • Max Kazantsev's avatar
      [NFC] Add assert to detect LCSSA breaches early · f34115c6
      Max Kazantsev authored
      llvm-svn: 341347
      f34115c6
    • Fedor Sergeev's avatar
      [PassTiming] reporting time-passes separately for multiple pass instances of the same pass · f2d4372e
      Fedor Sergeev authored
      Summary:
      Refactoring done by rL340872 accidentally appeared to be non-NFC, changing the way how
      multiple instances of the same pass are handled - aggregation of results by PassName
      forced data for multiple instances to be merged together and reported as one line.
      
      Getting back to creating/reporting timers per pass instance.
      Reporting was a bit enhanced by counting pass instances and adding #<num> suffix
      to the pass description. Note that it is instances that are being counted,
      not invocations of them.
      
      time-passes test updated to account for multiple passes being run.
      
      Reviewers: paquette, jhenderson, MatzeB, skatkov
      
      Reviewed By: skatkov
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D51535
      
      llvm-svn: 341346
      f2d4372e
    • Max Kazantsev's avatar
      [IndVars] Fix usage of SCEVExpander to not mess with SCEVConstant. PR38674 · 2cbba563
      Max Kazantsev authored
      This patch removes the function `expandSCEVIfNeeded` which behaves not as
      it was intended. This function tries to make a lookup for exact existing expansion
      and only goes to normal expansion via `expandCodeFor` if this lookup hasn't found
      anything. As a result of this, if some instruction above the loop has a `SCEVConstant`
      SCEV, this logic will return this instruction when asked for this `SCEVConstant` rather
      than return a constant value. This is both non-profitable and in some cases leads to
      breach of LCSSA form (as in PR38674).
      
      Whether or not it is possible to break LCSSA with this algorithm and with some
      non-constant SCEVs is still in question, this is still being investigated. I wasn't
      able to construct such a test so far, so maybe this situation is impossible. If it is,
      it will go as a separate fix.
      
      Rather than do it, it is always correct to just invoke `expandCodeFor` unconditionally:
      it behaves smarter about insertion points, and as side effect of this it will choose a
      constant value for SCEVConstants. For other SCEVs it may end up finding a better insertion
      point. So it should not be worse in any case.
      
      NOTE: So far the only known case for which this transform may break LCSSA is mapping
      of SCEVConstant to an instruction. However there is a suspicion that the entire algorithm
      can compromise LCSSA form for other cases as well (yet not proved).
      
      Differential Revision: https://reviews.llvm.org/D51286
      Reviewed By: etherzhhb
      
      llvm-svn: 341345
      2cbba563
    • Puyan Lotfi's avatar
      [NFC][llvm-objcopy] clang-formating Object.cpp · bd203e03
      Puyan Lotfi authored
      llvm-svn: 341344
      bd203e03
    • Puyan Lotfi's avatar
      a7a5816b
    • Puyan Lotfi's avatar
      [llvm-objcopy] Dwarf .debug section compression support (zlib, zlib-gnu). · 5a40cd5b
      Puyan Lotfi authored
        Usage:
      
        llvm-objcopy --compress-debug-sections=zlib foo.o
        llvm-objcopy --compress-debug-sections=zlib-gnu foo.o
      
        In both cases the debug section contents is compressed with zlib. In the GNU
        style case the header is the "ZLIB" magic string followed by the uint64 big-
        endian decompressed size. In the non-GNU mode the header is the
        Elf(32|64)_Chdr.
      
        Decompression support is coming soon.
      
      
        Differential Revision: https://reviews.llvm.org/D49678
      
      llvm-svn: 341342
      5a40cd5b
    • Sanjay Patel's avatar
      [AArch64][x86] add tests for pow(x, 0.25); NFC · 09459598
      Sanjay Patel authored
      Folds for this were proposed in D49306, but we
      decided the transform is better suited for the backend.
      
      llvm-svn: 341341
      09459598
  2. Sep 03, 2018
Loading