Jakob Stoklund Olesen
e991f728d6
Recompute register class and hint for registers created during spilling.
...
The spill weight is not recomputed for an unspillable register - it stays infinite.
llvm-svn: 128490
2011-03-29 21:20:19 +00:00
Jakob Stoklund Olesen
0ed9ebca58
Remember to use the correct register when rematerializing for snippets.
...
llvm-svn: 128469
2011-03-29 17:47:02 +00:00
Jakob Stoklund Olesen
d8af5298d1
Properly enable rematerialization when spilling after live range splitting.
...
The instruction to be rematerialized may not be the one defining the register
that is being spilled. The traceSiblingValue() function sees through sibling
copies to find the remat candidate.
llvm-svn: 128449
2011-03-29 03:12:02 +00:00
Jakob Stoklund Olesen
b993f6394f
Notify the delegate before removing dead values from a live interval.
...
The register allocator needs to know when the range shrinks.
llvm-svn: 128145
2011-03-23 04:43:16 +00:00
Jakob Stoklund Olesen
8630840c30
Dead code elimination may separate the live interval into multiple connected components.
...
I have convinced myself that it can only happen when a phi value dies. When it
happens, allocate new virtual registers for the components.
llvm-svn: 127827
2011-03-17 20:37:07 +00:00
Jakob Stoklund Olesen
e14b2b226f
Add a LiveRangeEdit delegate callback before shrinking a live range.
...
The register allocator needs to adjust its live interval unions when that happens.
llvm-svn: 127774
2011-03-16 22:56:16 +00:00
Jakob Stoklund Olesen
c738c96519
Erase virtual registers that are unused after DCE.
...
llvm-svn: 127773
2011-03-16 22:56:13 +00:00
Jakob Stoklund Olesen
557a82c099
Clarify debugging output.
...
llvm-svn: 127771
2011-03-16 22:56:08 +00:00
Jakob Stoklund Olesen
43a87501b3
Tell the register allocator about new unused virtual registers.
...
This allows the allocator to free any resources used by the virtual register,
including physical register assignments.
llvm-svn: 127560
2011-03-13 01:23:11 +00:00
Jakob Stoklund Olesen
8e089640e0
Add a LiveRangeEdit::Delegate protocol.
...
This will we used for keeping register allocator data structures up to date
while LiveRangeEdit is trimming live intervals.
llvm-svn: 127300
2011-03-09 00:57:29 +00:00
Jakob Stoklund Olesen
ea5ebfed15
Delete dead code after rematerializing.
...
LiveRangeEdit::eliminateDeadDefs() will eventually be used by coalescing,
splitting, and spilling for dead code elimination. It can delete chains of dead
instructions as long as there are no dependency loops.
llvm-svn: 127287
2011-03-08 22:46:11 +00:00
Jakob Stoklund Olesen
27f942fa60
Make the UselessRegs argument optional in the LiveRangeEdit constructor.
...
llvm-svn: 127181
2011-03-07 22:42:16 +00:00
Jakob Stoklund Olesen
13eb3650b0
This method belonged in VirtRegMap.
...
llvm-svn: 126002
2011-02-19 00:38:43 +00:00
Jakob Stoklund Olesen
4376d67b6f
Use VirtRegMap's Virt2SplitMap to keep track of the original live range before splitting.
...
All new virtual registers created for spilling or splitting point back to their original.
llvm-svn: 125980
2011-02-18 22:35:20 +00:00
Jakob Stoklund Olesen
de5c4dc24b
Simplify the LiveRangeEdit::canRematerializeAt() interface a bit.
...
llvm-svn: 118661
2010-11-10 01:05:12 +00:00
Jakob Stoklund Olesen
ba9a4985a2
Don't assign new registers created during a split to the same stack slot, but
...
give them individual stack slots once the are actually spilled.
llvm-svn: 117945
2010-11-01 19:49:57 +00:00
Jakob Stoklund Olesen
a3b61d32d8
Remember to keep track of rematted values.
...
llvm-svn: 116962
2010-10-20 22:50:42 +00:00
Jakob Stoklund Olesen
2edaa2fb24
Move some of the InlineSpiller rematerialization code into LiveRangeEdit.
...
llvm-svn: 116951
2010-10-20 22:00:51 +00:00
Jakob Stoklund Olesen
0f3e98ce2e
Move stack slot assignments into LiveRangeEdit.
...
All registers created during splitting or spilling are assigned to the same
stack slot as the parent register.
When splitting or rematting, we may not spill at all. In that case the stack
slot is still assigned, but it will be dead.
llvm-svn: 116546
2010-10-15 00:16:55 +00:00
Jakob Stoklund Olesen
72911e49fa
Create a new LiveRangeEdit class to keep track of the new registers created when
...
splitting or spillling, and to help with rematerialization.
Use LiveRangeEdit in InlineSpiller and SplitKit. This will eventually make it
possible to share remat code between InlineSpiller and SplitKit.
llvm-svn: 116543
2010-10-14 23:49:52 +00:00