Skip to content
  1. Feb 25, 2014
    • Rafael Espindola's avatar
      Factor out calls to AA.getDataLayout(). · 6d6e87be
      Rafael Espindola authored
      llvm-svn: 202157
      6d6e87be
    • Rafael Espindola's avatar
      Make a few more DataLayout variables const. · 43b5a51e
      Rafael Espindola authored
      llvm-svn: 202155
      43b5a51e
    • Chandler Carruth's avatar
      [SROA] Use the original load name with the SROA-prefixed IRB rather than · 25adb7b0
      Chandler Carruth authored
      just "load". This helps avoid pointless de-duping with order-sensitive
      numbers as we already have unique names from the original load. It also
      makes the resulting IR quite a bit easier to read.
      
      llvm-svn: 202140
      25adb7b0
    • Chandler Carruth's avatar
      [SROA] Thread the ability to add a pointer-specific name prefix through · cb93cd2d
      Chandler Carruth authored
      the pointer adjustment code. This is the primary code path that creates
      totally new instructions in SROA and being able to lump them based on
      the pointer value's name for which they were created causes
      *significantly* fewer name collisions and general noise in the debug
      output. This is particularly significant because it is making it much
      harder to track down instability in the output of SROA, as name
      de-duplication is a totally harmless form of instability that gets in
      the way of seeing real problems.
      
      The new fancy naming scheme tries to dig out the root "pre-SROA" name
      for pointer values and associate that all the way through the pointer
      formation instructions. Digging out the root is important to prevent the
      multiple iterative rounds of SROA from just layering too much cruft on
      top of cruft here. We already track the layers of SROAs iteration in the
      alloca name prefix. We don't need to duplicate it here.
      
      Should have no functionality change, and shouldn't have any really
      measurable impact on NDEBUG builds, as most of the complex logic is
      debug-only.
      
      llvm-svn: 202139
      cb93cd2d
    • Chandler Carruth's avatar
      [SROA] Rather than copying the logic for building a name prefix into the · 51175533
      Chandler Carruth authored
      PHI-pointer builder, just copy the builder and clobber the obvious
      fields.
      
      llvm-svn: 202136
      51175533
    • Chandler Carruth's avatar
      [SROA] Simplify some of the logic to dig out the old pointer value by · 8183a50f
      Chandler Carruth authored
      using OldPtr more heavily. Lots of this code was written before the
      rewriter had an OldPtr member setup ahead of time. There are already
      asserts in place that should ensure this doesn't change any
      functionality.
      
      llvm-svn: 202135
      8183a50f
    • Chandler Carruth's avatar
      [SROA] Adjust to new clang-format style. · 7625c54e
      Chandler Carruth authored
      llvm-svn: 202134
      7625c54e
    • Chandler Carruth's avatar
      [SROA] Fix a *glaring* bug in r202091: you have to actually *write* · a8c4cc68
      Chandler Carruth authored
      the break statement, not just think it to yourself....
      
      No idea how this worked at all, much less survived most bots, my
      bootstrap, and some bot bootstraps!
      
      The Polly one didn't survive, and this was filed as PR18959. I don't
      have a reduced test case and honestly I'm not seeing the need. What we
      probably need here are better asserts / debug-build behavior in
      SmallPtrSet so that this madness doesn't make it so far.
      
      llvm-svn: 202129
      a8c4cc68
    • Alexey Samsonov's avatar
      Silence GCC warning · 26af6f7f
      Alexey Samsonov authored
      llvm-svn: 202119
      26af6f7f
    • Alp Toker's avatar
      Fix typos · 70b36995
      Alp Toker authored
      llvm-svn: 202107
      70b36995
    • Chandler Carruth's avatar
      [SROA] Add a debugging tool which shuffles the slices sequence prior to · 83cee772
      Chandler Carruth authored
      sorting it. This helps uncover latent reliance on the original ordering
      which aren't guaranteed to be preserved by std::sort (but often are),
      and which are based on the use-def chain orderings which also aren't
      (technically) guaranteed.
      
      Only available in C++11 debug builds, and behind a flag to prevent noise
      at the moment, but this is generally useful so figured I'd put it in the
      tree rather than keeping it out-of-tree.
      
      llvm-svn: 202106
      83cee772
    • Chandler Carruth's avatar
      [SROA] Use a more direct way of determining whether we are processing · bb2a9324
      Chandler Carruth authored
      the destination operand or source operand of a memmove.
      
      It so happens that it was impossible for SROA to try to rewrite
      self-memmove where the operands are *identical*, because either such
      a think is volatile (and we don't rewrite) or it is non-volatile, and we
      don't even register it as a use of the alloca.
      
      However, making the 'IsDest' test *rely* on this subtle fact is... Very
      confusing for the reader. We should use the direct and readily available
      test of the Use* which gives us concrete information about which operand
      is being rewritten.
      
      No functionality changed, I hope! ;]
      
      llvm-svn: 202103
      bb2a9324
    • Chandler Carruth's avatar
      [SROA] Fix another instability in SROA with respect to the slice · 3bf18ed5
      Chandler Carruth authored
      ordering.
      
      The fundamental problem that we're hitting here is that the use-def
      chain ordering is *itself* not a stable thing to be relying on in the
      rewriting for SROA. Further, we use a non-stable sort over the slices to
      arrange them based on the section of the alloca they're operating on.
      With a debugging STL implementation (or different implementations in
      stage2 and stage3) this can cause stage2 != stage3.
      
      The specific aspect of this problem fixed in this commit deals with the
      rewriting and load-speculation around PHIs and Selects. This, like many
      other aspects of the use-rewriting in SROA, is really part of the
      "strong SSA-formation" that is doen by SROA where it works very hard to
      canonicalize loads and stores in *just* the right way to satisfy the
      needs of mem2reg[1]. When we have a select (or a PHI) with 2 uses of the
      same alloca, we test that loads downstream of the select are
      speculatable around it twice. If only one of the operands to the select
      needs to be rewritten, then if we get lucky we rewrite that one first
      and the select is immediately speculatable. This can cause the order of
      operand visitation, and thus the order of slices to be rewritten, to
      change an alloca from promotable to non-promotable and vice versa.
      
      The fix is to defer all of the speculation until *after* the rewrite
      phase is done. Once we've rewritten everything, we can accurately test
      for whether speculation will work (once, instead of twice!) and the
      order ceases to matter.
      
      This also happens to simplify the other subtlety of speculation -- we
      need to *not* speculate anything unless the result of speculating will
      make the alloca fully promotable by mem2reg. I had a previous attempt at
      simplifying this, but it was still pretty horrible.
      
      There is actually already a *really* nice test case for this in
      basictest.ll, but on multiple STL implementations and inputs, we just
      got "lucky". Fortunately, the test case is very small and we can
      essentially build it in exactly the opposite way to get reasonable
      coverage in both directions even from normal STL implementations.
      
      llvm-svn: 202092
      3bf18ed5
    • Rafael Espindola's avatar
      Make some DataLayout pointers const. · aeff8a9c
      Rafael Espindola authored
      No functionality change. Just reduces the noise of an upcoming patch.
      
      llvm-svn: 202087
      aeff8a9c
  2. Feb 24, 2014
  3. Feb 22, 2014
  4. Feb 21, 2014
  5. Feb 19, 2014
    • Rafael Espindola's avatar
      Add back r201608, r201622, r201624 and r201625 · daeafb4c
      Rafael Espindola authored
      r201608 made llvm corretly handle private globals with MachO. r201622 fixed
      a bug in it and r201624 and r201625 were changes for using private linkage,
      assuming that llvm would do the right thing.
      
      They all got reverted because r201608 introduced a crash in LTO. This patch
      includes a fix for that. The issue was that TargetLoweringObjectFile now has
      to be initialized before we can mangle names of private globals. This is
      trivially true during the normal codegen pipeline (the asm printer does it),
      but LTO has to do it manually.
      
      llvm-svn: 201700
      daeafb4c
    • Rafael Espindola's avatar
      This reverts commit r201625 and r201624. · 21736038
      Rafael Espindola authored
      Since r201608 got reverted, it is not safe to use private linkage in these cases
      until it is committed back.
      
      llvm-svn: 201688
      21736038
    • Tim Northover's avatar
      X86 CodeGenPrep: sink shufflevectors before shifts · aeb8e06d
      Tim Northover authored
      On x86, shifting a vector by a scalar is significantly cheaper than shifting a
      vector by another fully general vector. Unfortunately, because SelectionDAG
      operates on just one basic block at a time, the shufflevector instruction that
      reveals whether the right-hand side of a shift *is* really a scalar is often
      not visible to CodeGen when it's needed.
      
      This adds another handler to CodeGenPrepare, to sink any useful shufflevector
      instructions down to the basic block where they're used, predicated on a target
      hook (since on other architectures, doing so will often just introduce extra
      real work).
      
      rdar://problem/16063505
      
      llvm-svn: 201655
      aeb8e06d
    • Rafael Espindola's avatar
      Now that llvm always does the right thing with private, use it. · 8b27c4ed
      Rafael Espindola authored
      llvm-svn: 201625
      8b27c4ed
  6. Feb 18, 2014
  7. Feb 17, 2014
  8. Feb 16, 2014
  9. Feb 14, 2014
  10. Feb 13, 2014
Loading