- Mar 10, 2011
-
-
Evan Cheng authored
llvm-svn: 127380
-
Evan Cheng authored
llvm-svn: 127376
-
- Mar 09, 2011
-
-
Evan Cheng authored
flexible. If it returns a register class that's different from the input, then that's the register class used for cross-register class copies. If it returns a register class that's the same as the input, then no cross- register class copies are needed (normal copies would do). If it returns null, then it's not at all possible to copy registers of the specified register class. llvm-svn: 127368
-
Jakob Stoklund Olesen authored
The damage done by physreg coalescing only depends on the number of instructions the extended physreg live range covers. This fixes PR9438. The heuristic is still luck-based, and physreg coalescing really should be disabled completely. We need a register allocator with better hinting support before that is possible. Convert a test to FileCheck and force spilling by inserting an extra call. The previous spilling behavior was dependent on misguided physreg coalescing decisions. llvm-svn: 127351
-
Andrew Trick authored
This helps cases like 2008-07-19-movups-spills.ll, but doesn't have an obvious impact on benchmarks llvm-svn: 127347
-
Benjamin Kramer authored
llvm-svn: 127335
-
Benjamin Kramer authored
llvm-svn: 127331
-
Matt Beaumont-Gay authored
llvm-svn: 127311
-
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
-
Jakob Stoklund Olesen authored
llvm-svn: 127295
-
- 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
-
Jakob Stoklund Olesen authored
Patch by Olaf Krzikalla! llvm-svn: 127264
-
Eric Christopher authored
with this before since none of the register tracking or nightly tests had unschedulable nodes. This should probably be refixed with a special default Node that just returns some "don't touch me" values. Fixes PR9427 llvm-svn: 127263
-
Oscar Fuentes authored
MSVC 9." The "fix" was meaningless. This reverts commit r127245. llvm-svn: 127260
-
Benjamin Kramer authored
llvm-svn: 127254
-
Oscar Fuentes authored
llvm-svn: 127245
-
Andrew Trick authored
This change uses the MaxReorderWindow for both height and depth, which tends to limit the negative effects of high register pressure. llvm-svn: 127203
-
Jakob Stoklund Olesen authored
llvm-svn: 127192
-
- Mar 07, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 127181
-
Cameron Zwarich authored
llvm-svn: 127175
-
Jakob Stoklund Olesen authored
In this case, the value need to be available at the load index instead of the normal use index. llvm-svn: 127167
-
Owen Anderson authored
llvm-svn: 127163
-
- Mar 06, 2011
-
-
Eric Christopher authored
llvm-svn: 127131
-
NAKAMURA Takumi authored
llvm-svn: 127114
-
Andrew Trick authored
Disable a couple of experimental heuristics to get the best results from the current implementation of -pre-RA-sched=list-ilp. llvm-svn: 127113
-
- Mar 05, 2011
-
-
Anton Korobeynikov authored
llvm-svn: 127099
-
Anton Korobeynikov authored
llvm-svn: 127098
-
Jakob Stoklund Olesen authored
The coalescer can in very rare cases leave too large live intervals around after rematerializing cheap-as-a-move instructions. Linear scan doesn't really care, but live range splitting gets very confused when a live range is killed by a ghost instruction. I will fix this properly in the coalescer after 2.9 branches. llvm-svn: 127096
-
Andrew Trick authored
llvm-svn: 127075
-
Andrew Trick authored
llvm-svn: 127071
-
Andrew Trick authored
llvm-svn: 127068
-
Andrew Trick authored
regs. This is the only change in this checkin that may affects the default scheduler. With better register tracking and heuristics, it doesn't make sense to artificially lower the register limit so much. Added -sched-high-latency-cycles and X86InstrInfo::isHighLatencyDef to give the scheduler a way to account for div and sqrt on targets that don't have an itinerary. It is currently defaults to 10 (the actual number doesn't matter much), but only takes effect on non-default schedulers: list-hybrid and list-ilp. Added several heuristics that can be individually disabled for the non-default sched=list-ilp mode. This helps us determine how much better we can do on a given benchmark than the default scheduler. Certain compute intensive loops run much faster in this mode with the right set of heuristics, and it doesn't seem to have much negative impact elsewhere. Not all of the heuristics are needed, but we still need to experiment to decide which should be disabled by default for sched=list-ilp. llvm-svn: 127067
-
Jakob Stoklund Olesen authored
The global cost is the sum of block frequencies for spill code that must be inserted because preferences weren't met. llvm-svn: 127062
-
Jakob Stoklund Olesen authored
This simplifies the code and makes it faster too. The interference patterns are saved for each candidate register. It will be reused for actually executing the split. Work in progress. llvm-svn: 127054
-
Jim Grosbach authored
llvm-svn: 127049
-
- Mar 04, 2011
-
-
Eric Christopher authored
llvm-svn: 127043
-
Jakob Stoklund Olesen authored
llvm-svn: 127040
-
Jakob Stoklund Olesen authored
It gives better results. Sometimes, a live range can be large and still have high spill weight. Such a range should not be spilled. llvm-svn: 127036
-
Jakob Stoklund Olesen authored
Initially, slot indexes are quad-spaced. There is room for inserting up to 3 new instructions between the original instructions. When we run out of indexes between two instructions, renumber locally using double-spaced indexes. The original quad-spacing means that we catch up quickly, and we only have to renumber a handful of instructions to get a monotonic sequence. This is much faster than renumbering the whole function as we did before. llvm-svn: 127023
-
Jakob Stoklund Olesen authored
You can't really predict how many indexes will be needed from the number of defs, so let's keep it simple. Also remove an extra empty index that was inserted after each basic block. It was intended for live-out ranges, but it was never used that way. llvm-svn: 127014
-