| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 127380
|
| |
|
|
| |
llvm-svn: 127376
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
register.
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
|
| |
|
|
|
|
| |
This helps cases like 2008-07-19-movups-spills.ll, but doesn't have an obvious impact on benchmarks
llvm-svn: 127347
|
| |
|
|
| |
llvm-svn: 127335
|
| |
|
|
| |
llvm-svn: 127331
|
| |
|
|
| |
llvm-svn: 127311
|
| |
|
|
|
|
|
| |
This will we used for keeping register allocator data structures up to date
while LiveRangeEdit is trimming live intervals.
llvm-svn: 127300
|
| |
|
|
| |
llvm-svn: 127295
|
| |
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
| |
the sorted array.
Patch by Olaf Krzikalla!
llvm-svn: 127264
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
| |
MSVC 9."
The "fix" was meaningless.
This reverts commit r127245.
llvm-svn: 127260
|
| |
|
|
| |
llvm-svn: 127254
|
| |
|
|
| |
llvm-svn: 127245
|
| |
|
|
|
|
|
| |
This change uses the MaxReorderWindow for both height and depth, which
tends to limit the negative effects of high register pressure.
llvm-svn: 127203
|
| |
|
|
| |
llvm-svn: 127192
|
| |
|
|
| |
llvm-svn: 127181
|
| |
|
|
| |
llvm-svn: 127175
|
| |
|
|
|
|
|
| |
In this case, the value need to be available at the load index instead of the
normal use index.
llvm-svn: 127167
|
| |
|
|
|
|
| |
type.
llvm-svn: 127163
|
| |
|
|
| |
llvm-svn: 127131
|
| |
|
|
| |
llvm-svn: 127114
|
| |
|
|
|
|
| |
current implementation of -pre-RA-sched=list-ilp.
llvm-svn: 127113
|
| |
|
|
|
|
| |
mode".
llvm-svn: 127099
|
| |
|
|
| |
llvm-svn: 127098
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 127075
|
| |
|
|
| |
llvm-svn: 127071
|
| |
|
|
| |
llvm-svn: 127068
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
The global cost is the sum of block frequencies for spill code that must be
inserted because preferences weren't met.
llvm-svn: 127062
|
| |
|
|
|
|
|
|
|
|
|
| |
pattern.
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
|
| |
|
|
|
|
| |
free register.
llvm-svn: 127049
|
| |
|
|
| |
llvm-svn: 127043
|
| |
|
|
| |
llvm-svn: 127040
|
| |
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
| |
instruction.
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
|
| |
|
|
| |
llvm-svn: 127007
|
| |
|
|
| |
llvm-svn: 127006
|
| |
|
|
|
|
|
|
|
|
|
| |
correct
type after type legalization has completed. Before then it may simply not be big
enough to hold the shift amount, particularly on x86 which uses a very small type
for shifts (this issue broke stuff in the past which is why LegalizeTypes carefully
uses a large type for shift amounts).
llvm-svn: 127000
|
| |
|
|
|
|
|
|
| |
Fix the PendingQueue, then disable it because it's not required for
the current schedulers' heuristics.
Fix the logic for the unused list-ilp scheduler.
llvm-svn: 126981
|
| |
|
|
| |
llvm-svn: 126975
|
| |
|
|
|
|
|
| |
This speeds up updateSSA() so it only accounts for 5% of the live range
splitting time.
llvm-svn: 126972
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
it. It's been assumed up til now that it would be in its immediate
successor. However, this isn't necessarily the case. It could be in one of its
successor's successors.
Modify the code to more thoroughly check for an 'eh.selector' call in
successors. It only looks at a successor if we get there as a result of an
unconditional branch.
Testcase ObjC/exceptions-4.m in r126968.
llvm-svn: 126969
|
| |
|
|
| |
llvm-svn: 126964
|
| |
|
|
| |
llvm-svn: 126962
|
| |
|
|
|
|
| |
Add comment.
llvm-svn: 126959
|