Skip to content
  1. Jan 12, 2009
  2. Jan 11, 2009
  3. Jan 09, 2009
  4. Jan 08, 2009
    • Chris Lattner's avatar
      This implements the second half of the fix for PR3290, handling · c518dfd1
      Chris Lattner authored
      loads from allocas that cover the entire aggregate.  This handles
      some memcpy/byval cases that are produced by llvm-gcc.  This triggers
      a few times in kc++ (with std::pair<std::_Rb_tree_const_iterator
      <kc::impl_abstract_phylum*>,bool>) and once in 176.gcc (with %struct..0anon).
      
      llvm-svn: 61915
      c518dfd1
  5. Jan 07, 2009
  6. Jan 06, 2009
  7. Jan 05, 2009
  8. Jan 04, 2009
  9. Jan 01, 2009
  10. Dec 24, 2008
  11. Dec 23, 2008
    • Dale Johannesen's avatar
      Fix the time regression I introduced in 464.h264ref with · 93b9aa87
      Dale Johannesen authored
      my last patch to this file.
      
      The issue there was that all uses of an IV inside a loop
      are actually references to Base[IV*2], and there was one
      use outside that was the same but LSR didn't see the base
      or the scaling because it didn't recurse into uses outside
      the loop; thus, it used base+IV*scale mode inside the loop
      instead of pulling base out of the loop.  This was extra bad
      because register pressure later forced both base and IV into
      memory.  Doing that recursion, at least enough
      to figure out addressing modes, is a good idea in general;
      the change in AddUsersIfInteresting does this.  However,
      there were side effects....
      
      It is also possible for recursing outside the loop to
      introduce another IV where there was only 1 before (if
      the refs inside are not scaled and the ref outside is).
      I don't think this is a common case, but it's in the testsuite.
      It is right to be very aggressive about getting rid of
      such introduced IVs (CheckForIVReuse and the handling of
      nonzero RewriteFactor in StrengthReduceStridedIVUsers).
      In the testcase in question the new IV produced this way
      has both a nonconstant stride and a nonzero base, neither
      of which was handled before.  And when inserting 
      new code that feeds into a PHI, it's right to put such 
      code at the original location rather than in the PHI's 
      immediate predecessor(s) when the original location is outside 
      the loop (a case that couldn't happen before)
      (RewriteInstructionToUseNewBase); better to avoid making
      multiple copies of it in this case.
      
      Also, the mechanism for keeping SCEV's corresponding to GEP's
      no longer works, as the GEP might change after its SCEV
      is remembered, invalidating the SCEV, and we might get a bad
      SCEV value when looking up the GEP again for a later loop.  
      This also couldn't happen before, as we weren't recursing
      into GEP's outside the loop.
      
      I owe some testcases for this, want to get it in for nightly runs.
      
      llvm-svn: 61362
      93b9aa87
    • Owen Anderson's avatar
  12. Dec 22, 2008
  13. Dec 21, 2008
  14. Dec 20, 2008
  15. Dec 19, 2008
    • Evan Cheng's avatar
      - CodeGenPrepare does not split loop back edges but it only knows about back... · 3b3de7c2
      Evan Cheng authored
      - CodeGenPrepare does not split loop back edges but it only knows about back edges of single block loops. It now does a DFS walk to find loop back edges.
      - Use SplitBlockPredecessors to factor out common predecessors of the critical edge destination. This is disabled for now due to some regressions.
      
      llvm-svn: 61248
      3b3de7c2
  16. Dec 18, 2008
Loading