- Sep 09, 2011
-
-
Jakob Stoklund Olesen authored
In some cases such as interpreters using indirectbr, the CFG can be very complicated, and live range splitting may be forced to insert a large number of phi-defs. When that happens, traceSiblingValue can spend a lot of time zipping around in the CFG looking for defs and reloads. This patch causes more information to be cached in SibValues, and the cached values are used to terminate searches early. This speeds up spilling by 20x in one interpreter test case. For more typical code, this is just a 10% speedup of spilling. The previous version had bugs that caused miscompilations. They have been fixed. llvm-svn: 139378
-
- Sep 07, 2011
-
-
Jakob Stoklund Olesen authored
It broke the self host and clang-x86_64-darwin10-RA. llvm-svn: 139259
-
Jakob Stoklund Olesen authored
In some cases such as interpreters using indirectbr, the CFG can be very complicated, and live range splitting may be forced to insert a large number of phi-defs. When that happens, traceSiblingValue can spend a lot of time zipping around in the CFG looking for defs and reloads. This patch causes more information to be cached in SibValues, and the cached values are used to terminate searches early. This speeds up spilling by 20x in one interpreter test case. For more typical code, this is just a 10% speedup of spilling. llvm-svn: 139247
-
- Sep 01, 2011
-
-
Jakob Stoklund Olesen authored
The problem is fixed for all register allocators by r138944, so this patch is no longer necessary. <rdar://problem/10032939> llvm-svn: 138945
-
- Aug 30, 2011
-
-
Bob Wilson authored
I don't currently have a good testcase for this; will try to get one tomorrow. <rdar://problem/10032939> llvm-svn: 138794
-
- Jul 18, 2011
-
-
Jakob Stoklund Olesen authored
When trying to rematerialize a value before an instruction that has an early-clobber redefine of the virtual register, make sure to look up the correct value number. Early-clobber defs are moved one slot back, so getBaseIndex is needed to find the used value number. Bugpoint was unable to reduce the test case for this, see PR10388. llvm-svn: 135378
-
- Jul 09, 2011
-
-
Jakob Stoklund Olesen authored
Spills should be hoisted out of loops, but we don't want to hoist them to dominating blocks at the same loop depth. That could cause the spills to be executed more often. llvm-svn: 134782
-
Jakob Stoklund Olesen authored
Try to move spills as early as possible in their basic block. This can help eliminate interferences by shortening the live range being spilled. This fixes PR10221. llvm-svn: 134776
-
- 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
-
- Jun 30, 2011
-
-
Rafael Espindola authored
llvm-svn: 134189
-
- May 11, 2011
-
-
Jakob Stoklund Olesen authored
about to be spilled. This can only happen when two extra snippet registers are included in the spill, and there is a copy between them. Hoisting the spill creates problems because the hoist will mark the copy for later dead code elimination, and spilling the second register will turn the copy into a spill. <rdar://problem/9420853> llvm-svn: 131192
-
- May 05, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 130931
-
- Apr 30, 2011
-
-
Jakob Stoklund Olesen authored
This could happen when trying to use a value that had been eliminated after dead code elimination and folding loads. llvm-svn: 130597
-
- Apr 21, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 129883
-
- Apr 18, 2011
-
-
Jakob Stoklund Olesen authored
the spilled register. This is quite common on ARM now that some stores have early-clobber defines. llvm-svn: 129714
-
- Mar 31, 2011
-
-
Jakob Stoklund Olesen authored
The rematerialized instruction may require a more constrained register class than the register being spilled. In the test case, the spilled register has been inflated to the DPR register class, but we are rematerializing a load of the ssub_0 sub-register which only exists for DPR_VFP2 registers. The register class is reinflated after spilling, so the conservative choice is only temporary. llvm-svn: 128610
-
- 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
This may eliminate some uses of the spilled registers, and we don't want to insert reloads for that. llvm-svn: 128468
-
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 26, 2011
-
-
Jakob Stoklund Olesen authored
The main register class may have been inflated by live range splitting, so that register class is not necessarily valid for the snippet instructions. Use the original register class for the stack slot interval. llvm-svn: 128351
-
- Mar 20, 2011
-
-
Jakob Stoklund Olesen authored
This can happen when multiple sibling registers are spilled after live range splitting. llvm-svn: 127965
-
Jakob Stoklund Olesen authored
llvm-svn: 127964
-
Jakob Stoklund Olesen authored
llvm-svn: 127959
-
- Mar 18, 2011
-
-
Jakob Stoklund Olesen authored
Stack slot real estate is virtually free compared to registers, so it is advantageous to spill earlier even though the same value is now kept in both a register and a stack slot. Also eliminate redundant spills by extending the stack slot live range underneath reloaded registers. This can trigger a dead code elimination, removing copies and even reloads that were only feeding spills. llvm-svn: 127868
-
- 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 15, 2011
-
-
Jakob Stoklund Olesen authored
After live range splitting, an original value may be available in multiple registers. Tracing back through the registers containing the same value, find the best place to insert a spill, determine if the value has already been spilled, or discover a reaching def that may be rematerialized. This is only the analysis part. The information is not used for anything yet. llvm-svn: 127698
-
- Mar 14, 2011
-
-
Jakob Stoklund Olesen authored
Remove the unused reserved_ bit vector, no functional change intended. This doesn't break 'svn blame', this file really is all my fault. llvm-svn: 127607
-
- 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 12, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 127530
-
Jakob Stoklund Olesen authored
Live range splitting can create a number of small live ranges containing only a single real use. Spill these small live ranges along with the large range they are connected to with copies. This enables memory operand folding and maximizes the spill to fill distance. Work in progress with known bugs. llvm-svn: 127529
-
- Mar 10, 2011
-
-
Jakob Stoklund Olesen authored
This makes it possible to register delegates and get callbacks when the spiller edits live ranges. llvm-svn: 127389
-
Jakob Stoklund Olesen authored
llvm-svn: 127388
-
- 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 07, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 127181
-
- Feb 24, 2011
-
-
Jakob Stoklund Olesen authored
register. This avoids some silly stack slot shuffling when both sides of a copy get spilled. llvm-svn: 126353
-
- Feb 23, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 126258
-
- Feb 09, 2011
-
-
Jakob Stoklund Olesen authored
This almost guarantees that the COPY will be coalesced. llvm-svn: 125140
-
- Feb 08, 2011
-
-
Jakob Stoklund Olesen authored
The target hook doesn't know how to do that. (Neither do I). llvm-svn: 125108
-
- Jan 09, 2011
-
-
Jakob Stoklund Olesen authored
physical register numbers. This makes the hack used in LiveInterval official, and lets LiveInterval be oblivious of stack slots. The isPhysicalRegister() and isVirtualRegister() predicates don't know about this, so when a variable may contain a stack slot, isStackSlot() should always be tested first. llvm-svn: 123128
-