- Dec 20, 2011
-
-
- Dec 12, 2011
-
-
Pete Cooper authored
If we create new intervals for a variable that is being spilled, then those new intervals are not guaranteed to also spill. This means that anything reading from the original spilling value might not get the correct value if spills were missed. Fixes <rdar://problem/10546864> llvm-svn: 146428
-
- Dec 07, 2011
-
-
Evan Cheng authored
generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API. For properties like mayLoad / mayStore, look into the bundle and if any of the bundled instructions has the property it would return true. For properties like isPredicable, only return true if *all* of the bundled instructions have the property. For properties like canFoldAsLoad, isCompare, conservatively return false for bundles. llvm-svn: 146026
-
- Nov 13, 2011
-
-
Jakob Stoklund Olesen authored
The old naming scheme (load/use/def/store) can be traced back to an old linear scan article, but the names don't match how slots are actually used. The load and store slots are not needed after the deferred spill code insertion framework was deleted. The use and def slots don't make any sense because we are using half-open intervals as is customary in C code, but the names suggest closed intervals. In reality, these slots were used to distinguish early-clobber defs from normal defs. The new naming scheme also has 4 slots, but the names match how the slots are really used. This is a purely mechanical renaming, but some of the code makes a lot more sense now. llvm-svn: 144503
-
- Aug 09, 2011
-
-
Jakob Stoklund Olesen authored
This function doesn't have anything to do with spill weights, and MRI already has functions for manipulating the register class of a virtual register. llvm-svn: 137123
-
- Jul 05, 2011
-
-
Jakob Stoklund Olesen authored
Remat during spilling triggers dead code elimination. If a phi-def becomes unused, that may also cause live ranges to split into separate connected components. This type of splitting is different from normal live range splitting. In particular, there may not be a common original interval. When the split range is its own original, make sure that the new siblings are also their own originals. The range being split cannot be used as an original since it doesn't cover the new siblings. llvm-svn: 134413
-
- May 05, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 130931
-
- May 02, 2011
-
-
Jakob Stoklund Olesen authored
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
-
- Apr 21, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 129883
-
- Apr 15, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 129579
-
- Apr 11, 2011
-
-
Jakob Stoklund Olesen authored
In particular, don't repeatedly recompute the PIC base live range after rematerialization. llvm-svn: 129275
-
- Apr 05, 2011
-
-
Jakob Stoklund Olesen authored
When dead code elimination removes all but one use, try to fold the single def into the remaining use. Rematerialization can leave single-use loads behind that we might as well fold whenever possible. llvm-svn: 128918
-
- Mar 30, 2011
-
-
Jakob Stoklund Olesen authored
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
-
- Mar 29, 2011
-
-
Jakob Stoklund Olesen authored
The spill weight is not recomputed for an unspillable register - it stays infinite. llvm-svn: 128490
-
Jakob Stoklund Olesen authored
llvm-svn: 128469
-
Jakob Stoklund Olesen authored
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
-
- Mar 23, 2011
-
-
Jakob Stoklund Olesen authored
The register allocator needs to know when the range shrinks. llvm-svn: 128145
-
- Mar 17, 2011
-
-
Jakob Stoklund Olesen authored
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
-
- Mar 16, 2011
-
-
Jakob Stoklund Olesen authored
The register allocator needs to adjust its live interval unions when that happens. llvm-svn: 127774
-
Jakob Stoklund Olesen authored
llvm-svn: 127773
-
Jakob Stoklund Olesen authored
llvm-svn: 127771
-
- Mar 13, 2011
-
-
Jakob Stoklund Olesen authored
This allows the allocator to free any resources used by the virtual register, including physical register assignments. llvm-svn: 127560
-
- Mar 09, 2011
-
-
Jakob Stoklund Olesen authored
This will we used for keeping register allocator data structures up to date while LiveRangeEdit is trimming live intervals. llvm-svn: 127300
-
- Mar 08, 2011
-
-
Jakob Stoklund Olesen authored
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
-
- Mar 07, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 127181
-
- Feb 19, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 126002
-
- Feb 18, 2011
-
-
Jakob Stoklund Olesen authored
All new virtual registers created for spilling or splitting point back to their original. llvm-svn: 125980
-
- Nov 10, 2010
-
-
Jakob Stoklund Olesen authored
llvm-svn: 118661
-
- Nov 01, 2010
-
-
Jakob Stoklund Olesen authored
give them individual stack slots once the are actually spilled. llvm-svn: 117945
-
- Oct 21, 2010
-
-
Jakob Stoklund Olesen authored
llvm-svn: 116962
-
Jakob Stoklund Olesen authored
llvm-svn: 116951
-
- Oct 15, 2010
-
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
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
-