| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
| |
When an interfering live range ends at a dead slot index between two
instructions, make sure that the inserted copy instruction gets a slot index
after the dead ones. This makes it possible to avoid the interference.
Ideally, there shouldn't be interference ending at a deleted instruction, but
physical register coalescing can sometimes do that to sub-registers.
This fixes PR9823.
llvm-svn: 130687
|
|
|
|
| |
llvm-svn: 129883
|
|
|
|
| |
llvm-svn: 129579
|
|
|
|
|
|
| |
In particular, don't repeatedly recompute the PIC base live range after rematerialization.
llvm-svn: 129275
|
|
|
|
|
|
|
|
| |
def into the remaining use.
Rematerialization can leave single-use loads behind that we might as well fold whenever possible.
llvm-svn: 128918
|
|
|
|
|
|
|
|
|
|
|
|
| |
When DCE clones a live range because it separates into connected components,
make sure that the clones enter the same register allocator stage as the
register they were cloned from.
For instance, clones may be split even when they where created during spilling.
Other registers created during spilling are not candidates for splitting or even
(re-)spilling.
llvm-svn: 128524
|
|
|
|
|
|
| |
The spill weight is not recomputed for an unspillable register - it stays infinite.
llvm-svn: 128490
|
|
|
|
| |
llvm-svn: 128469
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
The register allocator needs to know when the range shrinks.
llvm-svn: 128145
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
The register allocator needs to adjust its live interval unions when that happens.
llvm-svn: 127774
|
|
|
|
| |
llvm-svn: 127773
|
|
|
|
| |
llvm-svn: 127771
|
|
|
|
|
|
|
| |
This allows the allocator to free any resources used by the virtual register,
including physical register assignments.
llvm-svn: 127560
|
|
|
|
|
|
|
| |
This will we used for keeping register allocator data structures up to date
while LiveRangeEdit is trimming live intervals.
llvm-svn: 127300
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 127181
|
|
|
|
| |
llvm-svn: 126002
|
|
|
|
|
|
|
|
| |
before splitting.
All new virtual registers created for spilling or splitting point back to their original.
llvm-svn: 125980
|
|
|
|
| |
llvm-svn: 118661
|
|
|
|
|
|
| |
give them individual stack slots once the are actually spilled.
llvm-svn: 117945
|
|
|
|
| |
llvm-svn: 116962
|
|
|
|
| |
llvm-svn: 116951
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
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
|