Skip to content
  1. Aug 27, 2006
  2. Aug 12, 2006
    • Chris Lattner's avatar
      Don't attempt to split subloops out of a loop with a huge number of backedges. · f18b396c
      Chris Lattner authored
      Not only will this take huge amounts of compile time, the resultant loop nests
      won't be useful for optimization.  This reduces loopsimplify time on
      Transforms/LoopSimplify/2006-08-11-LoopSimplifyLongTime.ll from ~32s to ~0.4s
      with a debug build of llvm on a 2.7Ghz G5.
      
      llvm-svn: 29647
      f18b396c
    • Chris Lattner's avatar
      Reimplement the loopsimplify code which deletes edges from unreachable · 85d9944f
      Chris Lattner authored
      blocks that target loop blocks.
      
      Before, the code was run once per loop, and depended on the number of
      predecessors each block in the loop had.  Unfortunately, scanning preds can
      be really slow when huge numbers of phis exist or when phis with huge numbers
      of inputs exist.
      
      Now, the code is run once per function and scans successors instead of preds,
      which is far faster.  In addition, the new code is simpler and is goto free,
      woo.
      
      This change speeds up a nasty testcase Duraid provided me from taking hours to
      taking ~72s with a debug build.  The functionality this implements is already
      tested in the testsuite as Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll.
      
      llvm-svn: 29644
      85d9944f
  3. Aug 03, 2006
  4. Aug 02, 2006
    • Chris Lattner's avatar
      Add special check to avoid isLoop call. Simple, but doesn't seem to speed · 38b6e838
      Chris Lattner authored
      up lcssa much in practice.
      
      llvm-svn: 29465
      38b6e838
    • Chris Lattner's avatar
      Replace the SSA update code in LCSSA with a bottom-up approach instead of a top · 5a2bc786
      Chris Lattner authored
      down approach, inspired by discussions with Tanya.
      
      This approach is significantly faster, because it does not need dominator
      frontiers and it does not insert extraneous unused PHI nodes.  For example, on
      252.eon, in a release-asserts build, this speeds up LCSSA (which is the slowest
      pass in gccas) from 9.14s to 0.74s on my G5.  This code is also slightly smaller
      and significantly simpler than the old code.
      
      Amusingly, in a normal Release build (which includes the
      "assert(L->isLCSSAForm());" assertion), asserting that the result of LCSSA
      is in LCSSA form is actually slower than the LCSSA transformation pass
      itself on 252.eon.  I will see if Loop::isLCSSAForm can be sped up next.
      
      llvm-svn: 29463
      5a2bc786
  5. Jul 27, 2006
  6. Jul 18, 2006
  7. Jul 15, 2006
  8. Jul 12, 2006
  9. Jul 09, 2006
  10. Jun 29, 2006
  11. Jun 14, 2006
  12. Jun 13, 2006
  13. Jun 12, 2006
  14. Jun 11, 2006
  15. Jun 09, 2006
  16. Jun 08, 2006
  17. Jun 06, 2006
  18. Jun 04, 2006
  19. Jun 02, 2006
  20. Jun 01, 2006
  21. May 31, 2006
  22. May 29, 2006
  23. May 28, 2006
  24. May 27, 2006
    • Owen Anderson's avatar
      Make LCSSA insert proper Phi nodes throughout the rest of the CFG by computing · 1310e428
      Owen Anderson authored
      the iterated Dominance Frontier of the loop-closure Phi's.  This is the
      second phase of the LCSSA pass.  The third phase (coming soon) will be to
      update all uses of loop variables to use the loop-closure Phi's instead.
      
      llvm-svn: 28524
      1310e428
    • Chris Lattner's avatar
      Fix some regression from the inliner patch I committed last night. This fixes · 67c424e0
      Chris Lattner authored
      ldecod, lencod, and SPASS.
      
      llvm-svn: 28523
      67c424e0
    • Chris Lattner's avatar
      Switch the inliner over to using CloneAndPruneFunctionInto. This effectively · be853d77
      Chris Lattner authored
      makes it so that it constant folds instructions on the fly.  This is good
      for several reasons:
      
      0. Many instructions are constant foldable after inlining, particularly if
         inlining a call with constant arguments.
      1. Without this, the inliner has to allocate memory for all of the instructions
         that can be constant folded, then a subsequent pass has to delete them.  This
         gets the job done without this extra work.
      2. This makes the inliner *pass* a bit more aggressive: in particular, it
         partially solves a phase order issue where the inliner would inline lots
         of code that folds away to nothing, but think that the resultant function
         is big because of this code that will be gone.  Now the code never exists.
      
      This is the first part of a 2-step process.  The second part will be smart
      enough to see when this implicit constant folding propagates a constant into
      a branch or switch instruction, making CFG edges dead.
      
      This implements Transforms/Inline/inline_constprop.ll
      
      llvm-svn: 28521
      be853d77
Loading