Skip to content
  1. Feb 09, 2010
  2. Feb 06, 2010
    • Evan Cheng's avatar
      Run codegen dce pass for all targets at all optimization levels. Previously it's · ea5c6be7
      Evan Cheng authored
      only run for x86 with fastisel. I've found it being very effective in
      eliminating some obvious dead code as result of formal parameter lowering
      especially when tail call optimization eliminated the need for some of the loads
      from fixed frame objects. It also shrinks a number of the tests. A couple of
      tests no longer make sense and are now eliminated.
      
      llvm-svn: 95493
      ea5c6be7
  3. Jan 22, 2010
  4. Jan 04, 2010
    • David Greene's avatar
      · 1a51a211
      David Greene authored
      Change errs() to dbgs().
      
      llvm-svn: 92529
      1a51a211
  5. Dec 22, 2009
  6. 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
  7. Dec 11, 2009
  8. Dec 10, 2009
    • Jakob Stoklund Olesen's avatar
      Also attempt trivial coalescing for live intervals that end in a copy. · 497161c4
      Jakob Stoklund Olesen authored
      The coalescer is supposed to clean these up, but when setting up parameters
      for a function call, there may be copies to physregs. If the defining
      instruction has been LICM'ed far away, the coalescer won't touch it.
      
      The register allocation hint does not always work - when the register
      allocator is backtracking, it clears the hints.
      
      This patch is more conservative than r90502, and does not break
      483.xalancbmk/i686. It still breaks the PowerPC bootstrap, so it is disabled
      by default, and can be enabled with the -trivial-coalesce-ends option.
      
      llvm-svn: 91049
      497161c4
  9. Dec 09, 2009
    • Lang Hames's avatar
      Added a new "splitting" spiller. · 1ab2b49e
      Lang Hames authored
      When a call is placed to spill an interval this spiller will first try to
      break the interval up into its component values. Single value intervals and
      intervals which have already been split (or are the result of previous splits)
      are spilled by the default spiller.
      
      Splitting intervals as described above may improve the performance of generated
      code in some circumstances. This work is experimental however, and it still
      miscompiles many benchmarks. It's not recommended for general use yet.
      
      llvm-svn: 90951
      1ab2b49e
  10. Dec 05, 2009
  11. Dec 04, 2009
    • Jakob Stoklund Olesen's avatar
      Also attempt trivial coalescing for live intervals that end in a copy. · ca9cf654
      Jakob Stoklund Olesen authored
      The coalescer is supposed to clean these up, but when setting up parameters
      for a function call, there may be copies to physregs. If the defining
      instruction has been LICM'ed far away, the coalescer won't touch it.
      
      The register allocation hint does not always work - when the register
      allocator is backtracking, it clears the hints.
      
      This patch takes care of a few more cases that r90163 missed.
      
      llvm-svn: 90502
      ca9cf654
  12. Dec 03, 2009
  13. Dec 01, 2009
    • Evan Cheng's avatar
      Fix PR5391: support early clobber physical register def tied with a use (ewwww) · 732351f7
      Evan Cheng authored
      - A valno should be set HasRedefByEC if there is an early clobber def in the middle of its live ranges. It should not be set if the def of the valno is defined by an early clobber.
      - If a physical register def is tied to an use and it's an early clobber, it just means the HasRedefByEC is set since it's still one continuous live range.
      - Add a couple of missing checks for HasRedefByEC in the coalescer. In general, it should not coalesce a vr with a physical register if the physical register has a early clobber def somewhere. This is overly conservative but that's the price for using such a nasty inline asm "feature".
      
      llvm-svn: 90269
      732351f7
  14. Nov 30, 2009
    • Jakob Stoklund Olesen's avatar
      New virtual registers created for spill intervals should inherit allocation... · 020d8d4c
      Jakob Stoklund Olesen authored
      New virtual registers created for spill intervals should inherit allocation hints from the original register.
      
      This helps us avoid silly copies when rematting values that are copied to a physical register:
      
      leaq	_.str44(%rip), %rcx
      movq	%rcx, %rsi
      call	_strcmp
      
      becomes:
      
      leaq	_.str44(%rip), %rsi
      call	_strcmp
      
      The coalescer will not touch the movq because that would tie down the physical register.
      
      llvm-svn: 90163
      020d8d4c
  15. Nov 20, 2009
  16. Nov 18, 2009
  17. Nov 09, 2009
  18. Nov 07, 2009
    • Jakob Stoklund Olesen's avatar
      Fix inverted conflict test in -early-coalesce. · 4141d8ee
      Jakob Stoklund Olesen authored
      A non-identity copy cannot be coalesced when the phi join destination register
      is live at the copy site.
      
      Also verify the condition that the PHI join source register is only used in
      the PHI join. Otherwise the coalescing is invalid.
      
      llvm-svn: 86322
      4141d8ee
  19. Nov 04, 2009
    • Lang Hames's avatar
      The Indexes Patch. · 05fb9637
      Lang Hames authored
      This introduces a new pass, SlotIndexes, which is responsible for numbering
      instructions for register allocation (and other clients). SlotIndexes numbering
      is designed to match the existing scheme, so this patch should not cause any
      changes in the generated code.
      
      For consistency, and to avoid naming confusion, LiveIndex has been renamed
      SlotIndex.
      
      The processImplicitDefs method of the LiveIntervals analysis has been moved
      into its own pass so that it can be run prior to SlotIndexes. This was
      necessary to match the existing numbering scheme.
      
      llvm-svn: 85979
      05fb9637
  20. Oct 20, 2009
  21. Oct 10, 2009
    • Dan Gohman's avatar
      Factor out LiveIntervalAnalysis' code to determine whether an instruction · 87b02d5b
      Dan Gohman authored
      is trivially rematerializable and integrate it into
      TargetInstrInfo::isTriviallyReMaterializable. This way, all places that
      need to know whether an instruction is rematerializable will get the
      same answer.
      
      This enables the useful parts of the aggressive-remat option by
      default -- using AliasAnalysis to determine whether a memory location
      is invariant, and removes the questionable parts -- rematting operations
      with virtual register inputs that may not be live everywhere.
      
      llvm-svn: 83687
      87b02d5b
  22. Oct 09, 2009
  23. Oct 07, 2009
  24. Oct 03, 2009
  25. Sep 26, 2009
  26. Sep 25, 2009
    • Dan Gohman's avatar
      Improve MachineMemOperand handling. · 48b185d6
      Dan Gohman authored
       - Allocate MachineMemOperands and MachineMemOperand lists in MachineFunctions.
         This eliminates MachineInstr's std::list member and allows the data to be
         created by isel and live for the remainder of codegen, avoiding a lot of
         copying and unnecessary translation. This also shrinks MemSDNode.
       - Delete MemOperandSDNode. Introduce MachineSDNode which has dedicated
         fields for MachineMemOperands.
       - Change MemSDNode to have a MachineMemOperand member instead of its own
         fields with the same information. This introduces some redundancy, but
         it's more consistent with what MachineInstr will eventually want.
       - Ignore alignment when searching for redundant loads for CSE, but remember
         the greatest alignment.
      
      Target-specific code which previously used MemOperandSDNodes with generic
      SDNodes now use MemIntrinsicSDNodes, with opcodes in a designated range
      so that the SelectionDAG framework knows that MachineMemOperand information
      is available.
      
      llvm-svn: 82794
      48b185d6
  27. Sep 23, 2009
  28. Sep 21, 2009
  29. Sep 20, 2009
    • Dale Johannesen's avatar
      When computing live intervals for earlyclobber operands, · a894053a
      Dale Johannesen authored
      we pushed the beginning of the interval back 1, so the
      interval would overlap with inputs that die.  We were
      also pushing the end of the interval back 1, though,
      which means the earlyclobber didn't overlap with other
      output operands.  Don't do this.  PR 4964.
      
      llvm-svn: 82342
      a894053a
  30. Sep 15, 2009
  31. Sep 14, 2009
    • Evan Cheng's avatar
      Add early coalescing to liveintervals. This is work in progress and is known... · 7f789596
      Evan Cheng authored
      Add early coalescing to liveintervals. This is work in progress and is known to miscompute some tests. Read it at your own rish, I have aged 10 year while writing this.
      
      The gist of this is if source of some of the copies that feed into a phi join is defined by the phi join, we'd like to eliminate them. However, if any of the non-identity source overlaps the live interval of the phi join then the coalescer won't be able to coalesce them. The early coalescer's job is to eliminate the identity copies by partially-coalescing the two live intervals.
      
      llvm-svn: 81796
      7f789596
  32. Sep 12, 2009
  33. Sep 04, 2009
  34. Aug 23, 2009
Loading