Skip to content
  1. Jun 26, 2012
    • Andrew Trick's avatar
      Enable the new LoopInfo algorithm by default. · fb2ba3e1
      Andrew Trick authored
      The primary advantage is that loop optimizations will be applied in a
      stable order. This helps debugging and unit test creation. It is also
      a better overall implementation without pathologically bad performance
      on deep functions.
      
      On large functions (llvm-stress --size=200000 | opt -loops)
      Before: 0.1263s
      After:  0.0225s
      
      On deep functions (after tweaking llvm-stress, thanks Nadav):
      Before: 0.2281s
      After:  0.0227s
      
      See r158790 for more comments.
      
      The loop tree is now consistently generated in forward order, but loop
      passes are applied in reverse order over the program. If we have a
      loop optimization that prefers forward order, that can easily be
      achieved by adding a different type of LoopPassManager.
      
      llvm-svn: 159183
      fb2ba3e1
  2. Jun 20, 2012
    • Andrew Trick's avatar
      A new algorithm for computing LoopInfo. Temporarily disabled. · ff2ed7b6
      Andrew Trick authored
      -stable-loops enables a new algorithm for generating the Loop
      forest. It differs from the original algorithm in a few respects:
      
      - Not determined by use-list order.
      - Initially guarantees RPO order of block and subloops.
      - Linear in the number of CFG edges.
      - Nonrecursive.
      
      I didn't want to change the LoopInfo API yet, so the block lists are
      still inclusive. This seems strange to me, and it means that building
      LoopInfo is not strictly linear, but it may not be a problem in
      practice. At least the block lists start out in RPO order now. In the
      future we may add an attribute or wrapper analysis that allows other
      passes to assume RPO order.
      
      The primary motivation of this work was not to optimize LoopInfo, but
      to allow reproducing performance issues by decomposing the compilation
      stages. I'm often unable to do this with the current LoopInfo, because
      the loop tree order determines Loop pass order. Serializing the IR
      tends to invert the order, which reverses the optimization order. This
      makes it nearly impossible to debug interdependent loop optimizations
      such as LSR.
      
      I also believe this will provide more stable performance results across time.
      
      llvm-svn: 158790
      ff2ed7b6
    • Andrew Trick's avatar
      Move the implementation of LoopInfo into LoopInfoImpl.h. · cda51d43
      Andrew Trick authored
      The implementation only needs inclusion from LoopInfo.cpp and
      MachineLoopInfo.cpp. Clients of the interface should only include the
      interface. This makes the interface readable and speeds up rebuilds
      after modifying the implementation.
      
      llvm-svn: 158787
      cda51d43
  3. Oct 12, 2010
  4. Oct 08, 2010
  5. Aug 23, 2010
  6. Aug 06, 2010
  7. Jan 05, 2010
  8. Dec 16, 2009
  9. Dec 03, 2009
  10. Oct 20, 2009
  11. Jul 31, 2009
    • Dan Gohman's avatar
      Reapply r77654 with a fix: MachineFunctionPass's getAnalysisUsage · 5ea74d55
      Dan Gohman authored
      shouldn't do AU.setPreservesCFG(), because even though CodeGen passes
      don't modify the LLVM IR CFG, they may modify the MachineFunction CFG,
      and passes like MachineLoop are registered with isCFGOnly set to true.
      
      llvm-svn: 77691
      5ea74d55
    • Daniel Dunbar's avatar
      Revert r77654, it appears to be causing llvm-gcc bootstrap failures, and many · 54347565
      Daniel Dunbar authored
      failures when building assorted projects with clang.
      
      --- Reverse-merging r77654 into '.':
      U    include/llvm/CodeGen/Passes.h
      U    include/llvm/CodeGen/MachineFunctionPass.h
      U    include/llvm/CodeGen/MachineFunction.h
      U    include/llvm/CodeGen/LazyLiveness.h
      U    include/llvm/CodeGen/SelectionDAGISel.h
      D    include/llvm/CodeGen/MachineFunctionAnalysis.h
      U    include/llvm/Function.h
      U    lib/Target/CellSPU/SPUISelDAGToDAG.cpp
      U    lib/Target/PowerPC/PPCISelDAGToDAG.cpp
      U    lib/CodeGen/LLVMTargetMachine.cpp
      U    lib/CodeGen/MachineVerifier.cpp
      U    lib/CodeGen/MachineFunction.cpp
      U    lib/CodeGen/PrologEpilogInserter.cpp
      U    lib/CodeGen/MachineLoopInfo.cpp
      U    lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
      D    lib/CodeGen/MachineFunctionAnalysis.cpp
      D    lib/CodeGen/MachineFunctionPass.cpp
      U    lib/CodeGen/LiveVariables.cpp
      
      llvm-svn: 77661
      54347565
    • Dan Gohman's avatar
      Manage MachineFunctions with an analysis Pass instead of the Annotable · bcb44baa
      Dan Gohman authored
      mechanism. To support this, make MachineFunctionPass a little more
      complete.
      
      llvm-svn: 77654
      bcb44baa
  12. Jul 13, 2009
  13. Jun 27, 2009
  14. May 13, 2008
  15. May 06, 2008
  16. Jan 06, 2008
  17. Jan 04, 2008
  18. Dec 29, 2007
  19. Nov 28, 2007
  20. Nov 27, 2007
Loading