Skip to content
  1. Oct 19, 2010
    • Owen Anderson's avatar
      Get rid of static constructors for pass registration. Instead, every pass... · 6c18d1aa
      Owen Anderson authored
      Get rid of static constructors for pass registration.  Instead, every pass exposes an initializeMyPassFunction(), which
      must be called in the pass's constructor.  This function uses static dependency declarations to recursively initialize
      the pass's dependencies.
      
      Clients that only create passes through the createFooPass() APIs will require no changes.  Clients that want to use the
      CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
      before parsing commandline arguments.
      
      I have tested this with all standard configurations of clang and llvm-gcc on Darwin.  It is possible that there are problems
      with the static dependencies that will only be visible with non-standard options.  If you encounter any crash in pass
      registration/creation, please send the testcase to me directly.
      
      llvm-svn: 116820
      6c18d1aa
  2. Aug 17, 2010
  3. Aug 06, 2010
  4. May 05, 2010
  5. May 04, 2010
    • Evan Cheng's avatar
      Teach PHI elimination to remove REG_SEQUENCE instructions and update... · 4c908f41
      Evan Cheng authored
      Teach PHI elimination to remove REG_SEQUENCE instructions and update references of the source operands with references of the destination with subreg indices. e.g.
      %reg1029<def>, %reg1030<def> = VLD1q16 %reg1024<kill>, ...
      %reg1031<def> = REG_SEQUENCE %reg1029<kill>, 5, %reg1030<kill>, 6
      =>
      %reg1031:5<def>, %reg1031:6<def> = VLD1q16 %reg1024<kill>, ...
      
      PHI elimination now does more than phi elimination. It is really a de-SSA pass.
      
      llvm-svn: 103039
      4c908f41
  6. Mar 04, 2010
  7. Feb 23, 2010
  8. Feb 17, 2010
  9. Feb 16, 2010
  10. Feb 09, 2010
  11. Dec 16, 2009
    • Jakob Stoklund Olesen's avatar
      Reuse lowered phi nodes. · ec20a88a
      Jakob Stoklund Olesen authored
      Tail duplication produces lots of identical phi nodes in different basic
      blocks. Teach PHIElimination to reuse the join registers when lowering a phi
      node that is identical to an already lowered node. This saves virtual
      registers, and more importantly it avoids creating copies the the coalescer
      doesn't know how to eliminate.
      
      Teach LiveIntervalAnalysis about the phi joins with multiple uses.
      
      This patch significantly reduces code size produced by -pre-regalloc-taildup.
      
      llvm-svn: 91549
      ec20a88a
  12. Dec 01, 2009
  13. Nov 21, 2009
  14. Nov 18, 2009
    • Jakob Stoklund Olesen's avatar
      Don't require LiveVariables for PHIElimination. Enable critical edge splitting · 736888f7
      Jakob Stoklund Olesen authored
      when LiveVariables is available.
      
      The -split-phi-edges is now gone, and so is the hack to disable it when using
      the local register allocator. The PHIElimination pass no longer has
      LiveVariables as a prerequisite - that is what broke the local allocator.
      Instead we do critical edge splitting when possible - that is when
      LiveVariables is available.
      
      llvm-svn: 89213
      736888f7
  15. Nov 13, 2009
    • Jakob Stoklund Olesen's avatar
      Fix PHIElimination optimization that uses MBB->getBasicBlock. · ad205d61
      Jakob Stoklund Olesen authored
      The BasicBlock associated with a MachineBasicBlock does not necessarily
      correspond to the code in the MBB.
      
      Don't insert a new IR BasicBlock when splitting critical edges. We are not
      supposed to modify the IR during codegen, and we should be able to do just
      fine with a NULL BB.
      
      llvm-svn: 88707
      ad205d61
  16. Nov 11, 2009
    • Jakob Stoklund Olesen's avatar
      Fix liveness calculation when splitting critical edges during PHI elimination. · 4f7fd3ba
      Jakob Stoklund Olesen authored
      - Edges are split before any phis are eliminated, so the code is SSA.
      
      - Create a proper IR BasicBlock for the split edges.
      
      - LiveVariables::addNewBlock now has same syntax as
        MachineDominatorTree::addNewBlock. Algorithm calculates predecessor live-out
        set rather than successor live-in set.
      
      This feature still causes some miscompilations.
      
      llvm-svn: 86867
      4f7fd3ba
  17. Nov 10, 2009
  18. Sep 04, 2009
  19. Jul 23, 2009
  20. Jul 22, 2009
Loading