Skip to content
  1. 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
  2. Dec 01, 2009
  3. Nov 21, 2009
  4. 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
  5. 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
  6. 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
  7. Nov 10, 2009
  8. Sep 04, 2009
  9. Jul 23, 2009
  10. Jul 22, 2009
Loading