- Sep 12, 2009
-
-
Lang Hames authored
llvm-svn: 81605
-
- Sep 04, 2009
-
-
Lang Hames authored
a new class, MachineInstrIndex, which hides arithmetic details from most clients. This is a step towards allowing the register allocator to update/insert code during allocation. llvm-svn: 81040
-
- Aug 23, 2009
-
-
Chris Lattner authored
llvm-svn: 79814
-
- Aug 11, 2009
-
-
Lang Hames authored
Modified VNInfo. The "copy" member is now a union which holds the copy for a register interval, or the defining register for a stack interval. Access is via getCopy/setCopy and getReg/setReg. llvm-svn: 78620
-
- Jul 24, 2009
-
-
Daniel Dunbar authored
llvm-svn: 76966
-
Daniel Dunbar authored
LiveInterval, etc to raw_ostream. llvm-svn: 76965
-
- Jul 23, 2009
-
-
David Greene authored
Reorder if-else branches as suggested by Bill. llvm-svn: 76808
-
- Jul 22, 2009
-
-
David Greene authored
Make some changes suggested by Bill and Evan. llvm-svn: 76775
-
David Greene authored
Add some support for iterative coalescers to calculate a joined live range's weight properly. This is turned off right now in the sense that you'll get an assert if you get into a situation that can only be caused by an iterative coalescer. All other code paths operate exactly as before so there is no functional change with this patch. The asserts should be disabled if/when an iterative coalescer gets added to trunk. llvm-svn: 76680
-
- Jul 09, 2009
-
-
Lang Hames authored
as an (index,bool) pair. The bool flag records whether the kill is a PHI kill or not. This code will be used to enable splitting of live intervals containing PHI-kills. A slight change to live interval weights introduced an extra spill into lsr-code-insertion (outside the critical sections). The test condition has been updated to reflect this. llvm-svn: 75097
-
- Jun 24, 2009
-
-
Lang Hames authored
Fixed a bug in LiveInterval scaling (failure to scale VNI defs correctly), removed old TODO comments. llvm-svn: 74054
-
- Jun 17, 2009
-
-
Lang Hames authored
llvm-svn: 73634
-
- Jun 15, 2009
-
-
Evan Cheng authored
- Change register allocation hint to a pair of unsigned integers. The hint type is zero (which means prefer the register specified as second part of the pair) or entirely target dependent. - Allow targets to specify alternative register allocation orders based on allocation hint. Part 2. - Use the register allocation hint system to implement more aggressive load / store multiple formation. - Aggressively form LDRD / STRD. These are formed *before* register allocation. It has to be done this way to shorten live interval of base and offset registers. e.g. v1025 = LDR v1024, 0 v1026 = LDR v1024, 0 => v1025,v1026 = LDRD v1024, 0 If this transformation isn't done before allocation, v1024 will overlap v1025 which means it more difficult to allocate a register pair. - Even with the register allocation hint, it may not be possible to get the desired allocation. In that case, the post-allocation load / store multiple pass must fix the ldrd / strd instructions. They can either become ldm / stm instructions or back to a pair of ldr / str instructions. This is work in progress, not yet enabled. llvm-svn: 73381
-
- Jun 14, 2009
-
-
Evan Cheng authored
Move register allocation preference (or hint) from LiveInterval to MachineRegisterInfo. This allows more passes to set them. llvm-svn: 73346
-
- Jun 02, 2009
-
-
Lang Hames authored
llvm-svn: 72729
-
- Apr 28, 2009
-
-
Evan Cheng authored
llvm-svn: 70291
-
- Apr 27, 2009
-
-
Evan Cheng authored
llvm-svn: 70212
-
- Apr 25, 2009
-
-
Evan Cheng authored
llvm-svn: 70069
-
Evan Cheng authored
Do not share a single unknown val# for all the live ranges merged into a physical sub-register live interval. When coalescer is merging in clobbered virtaul register live interval into a physical register live interval, give each virtual register val# a separate val# in the physical register live interval. Otherwise, the coalescer would have lost track of the definitions information it needs to make correct coalescing decisions. llvm-svn: 70026
-
- Apr 18, 2009
-
-
Evan Cheng authored
Add a new LiveInterval::overlaps(). It checks if the live interval overlaps a range specified by [Start, End). llvm-svn: 69434
-
- Apr 08, 2009
-
-
Dan Gohman authored
with SUBREG_TO_REG, teach SimpleRegisterCoalescing to coalesce SUBREG_TO_REG instructions (which are similar to INSERT_SUBREG instructions), and teach the DAGCombiner to take advantage of this on targets which support it. This eliminates many redundant zero-extension operations on x86-64. This adds a new TargetLowering hook, isZExtFree. It's similar to isTruncateFree, except it only applies to actual definitions, and not no-op truncates which may not zero the high bits. Also, this adds a new optimization to SimplifyDemandedBits: transform operations like x+y into (zext (add (trunc x), (trunc y))) on targets where all the casts are no-ops. In contexts where the high part of the add is explicitly masked off, this allows the mask operation to be eliminated. Fix the DAGCombiner to avoid undoing these transformations to eliminate casts on targets where the casts are no-ops. Also, this adds a new two-address lowering heuristic. Since two-address lowering runs before coalescing, it helps to be able to look through copies when deciding whether commuting and/or three-address conversion are profitable. Also, fix a bug in LiveInterval::MergeInClobberRanges. It didn't handle the case that a clobber range extended both before and beyond an existing live range. In that case, multiple live ranges need to be added. This was exposed by the new subreg coalescing code. Remove 2008-05-06-SpillerBug.ll. It was bugpoint-reduced, and the spiller behavior it was looking for no longer occurrs with the new instruction selection. llvm-svn: 68576
-
- Mar 11, 2009
-
-
Evan Cheng authored
1. Use the same value# to represent unknown values being merged into sub-registers. 2. When coalescer commute an instruction and the destination is a physical register, update its sub-registers by merging in the extended ranges. llvm-svn: 66610
-
- Feb 02, 2009
-
-
Owen Anderson authored
Live interval reconstruction needs to account for this, and scour its maps to prevent dangling references. llvm-svn: 63558
-
- Jan 29, 2009
-
-
Evan Cheng authored
llvm-svn: 63267
-
Evan Cheng authored
llvm-svn: 63255
-
- Sep 24, 2008
-
-
Dale Johannesen authored
RA problem by expanding the live interval of an earlyclobber def back one slot. Remove overlap-earlyclobber throughout. Remove earlyclobber bits and their handling from live internals. llvm-svn: 56539
-
- Sep 19, 2008
-
-
Dale Johannesen authored
and redo as linked list walk. Logic moved into RA. Per review feedback. llvm-svn: 56326
-
- Aug 14, 2008
-
-
Dan Gohman authored
llvm-svn: 54780
-
- Jun 23, 2008
-
-
Evan Cheng authored
Instead of adding an isSS field to LiveInterval to denote stack slot. Use top bit of 'reg' instead. If the top bit is set, than the LiveInterval represents a stack slot live interval. llvm-svn: 52639
-
- Jun 04, 2008
-
-
Evan Cheng authored
llvm-svn: 51934
-
- Feb 26, 2008
-
-
Bill Wendling authored
llvm-svn: 47629
-
Bill Wendling authored
would have been a Godsend here! llvm-svn: 47625
-
- Feb 20, 2008
-
-
Anton Korobeynikov authored
llvm-svn: 47368
-
- Feb 15, 2008
-
-
Evan Cheng authored
register defs and uses after each successful coalescing. - Also removed a number of hacks and fixed some subtle kill information bugs. llvm-svn: 47167
-
- Feb 13, 2008
-
-
Evan Cheng authored
- removeRange() can now update value# information. llvm-svn: 47044
-
- Feb 10, 2008
-
-
Dan Gohman authored
llvm-svn: 46930
-
- Jan 30, 2008
-
-
Evan Cheng authored
Fixed a bug in MergeValueInAsValue() pointed out by David Greene. Replace val# with previous liverange's. llvm-svn: 46579
-
- Jan 14, 2008
-
-
Chris Lattner authored
llvm-svn: 45971
-
- Dec 29, 2007
-
-
Chris Lattner authored
llvm-svn: 45418
-
- Nov 29, 2007
-
-
Evan Cheng authored
llvm-svn: 44434
-