Skip to content
  1. Apr 07, 2011
  2. Apr 04, 2011
    • Jakob Stoklund Olesen's avatar
      Allow coalescing with reserved physregs in certain cases: · 2e853965
      Jakob Stoklund Olesen authored
      When a virtual register has a single value that is defined as a copy of a
      reserved register, permit that copy to be joined. These virtual register are
      usually copies of the stack pointer:
      
        %vreg75<def> = COPY %ESP; GR32:%vreg75
        MOV32mr %vreg75, 1, %noreg, 0, %noreg, %vreg74<kill>
        MOV32mi %vreg75, 1, %noreg, 8, %noreg, 0
        MOV32mi %vreg75<kill>, 1, %noreg, 4, %noreg, 0
        CALLpcrel32 ...
      
      Coalescing these virtual registers early decreases register pressure.
      Previously, they were coalesced by RALinScan::attemptTrivialCoalescing after
      register allocation was completed.
      
      The lower register pressure causes the mcinst-lowering-cmp0.ll test case to fail
      because it depends on linear scan spilling a particular register.
      
      I am deleting 2008-08-05-SpillerBug.ll because it is counting the number of
      instructions emitted, and its revision history shows the 'correct' count being
      edited many times.
      
      llvm-svn: 128845
      2e853965
  3. Mar 31, 2011
  4. Mar 18, 2011
  5. Mar 17, 2011
  6. Mar 16, 2011
  7. Mar 10, 2011
  8. Mar 08, 2011
  9. Mar 07, 2011
  10. Mar 03, 2011
  11. Mar 02, 2011
  12. Feb 15, 2011
    • Jakob Stoklund Olesen's avatar
      Move more fragments of spill weight calculation into CalcSpillWeights.h · 1dd377d8
      Jakob Stoklund Olesen authored
      Simplify the spill weight calculation a bit by bypassing
      getApproximateInstructionCount() and using LiveInterval::getSize() directly.
      This changes the computed spill weights, but only by a constant factor in each
      function. It should not affect how spill weights compare against each other, and
      so it shouldn't affect code generation.
      
      llvm-svn: 125530
      1dd377d8
  13. Feb 09, 2011
  14. Feb 08, 2011
  15. Feb 05, 2011
  16. Feb 04, 2011
    • Jakob Stoklund Olesen's avatar
      Add LiveIntervals::getLastSplitPoint(). · 096bd883
      Jakob Stoklund Olesen authored
      A live range cannot be split everywhere in a basic block. A split must go before
      the first terminator, and if the variable is live into a landing pad, the split
      must happen before the call that can throw.
      
      llvm-svn: 124894
      096bd883
  17. Jan 10, 2011
  18. Jan 09, 2011
  19. Nov 16, 2010
    • Jakob Stoklund Olesen's avatar
      Fix emergency spilling in LiveIntervals::spillPhysRegAroundRegDefsUses. · 9beef41f
      Jakob Stoklund Olesen authored
      Always spill the full representative register at any point where any subregister
      is live.
      
      This fixes PR8620 which caused the old logic to get confused and not spill
      anything at all.
      
      The fundamental problem here is that the coalescer is too aggressive about
      physical register coalescing. It sometimes makes it impossible to allocate
      registers without these emergency spills.
      
      llvm-svn: 119375
      9beef41f
    • Jakob Stoklund Olesen's avatar
      Fix PR8612 in the standard spiller, take two. · e2b88586
      Jakob Stoklund Olesen authored
      The live range of a register defined by an early clobber starts at the use slot,
      not the def slot.
      
      Except when it is an early clobber tied to a use operand. Then it starts at the
      def slot like a standard def.
      
      llvm-svn: 119305
      e2b88586
  20. Nov 15, 2010
  21. Nov 10, 2010
  22. Oct 26, 2010
  23. Oct 12, 2010
  24. Oct 11, 2010
  25. Oct 08, 2010
  26. Sep 25, 2010
  27. Aug 17, 2010
  28. Aug 12, 2010
  29. Aug 03, 2010
  30. Jul 22, 2010
  31. Jul 16, 2010
  32. Jul 09, 2010
  33. Jul 08, 2010
Loading