| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
dead definitions by using live intervals, if available, to identify dead definitions and proceed accordingly.
llvm-svn: 194286
|
|
|
|
|
|
|
| |
Previously LiveInterval has been used, but having a spill weight and
register number is unnecessary for a register unit.
llvm-svn: 192397
|
|
|
|
|
|
|
| |
This makes the API a bit more natural to use and makes it easier to make
LiveRanges implementation details private.
llvm-svn: 192394
|
|
|
|
|
|
|
|
| |
Register pressure tracking is half the complexity of the
scheduler. It's useful to be able to turn it off for compile time and
performance comparisons.
llvm-svn: 189987
|
|
|
|
|
|
| |
Remove redundant or bug-prone LiveInterval APIs.
llvm-svn: 189685
|
|
|
|
|
|
|
| |
This removes all expensive pressure tracking logic from the scheduling
critical path of node comparison.
llvm-svn: 189643
|
|
|
|
|
|
| |
Return true for LRGs that end at EarlyClobber or Register slots.
llvm-svn: 189642
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
liveness later.
Created SUPressureDiffs array to hold the per node PDiff computed during DAG building.
Added a getUpwardPressureDelta API that will soon replace the old
one. Compute PressureDelta here from the precomputed PressureDiffs.
Updating for liveness will come next.
llvm-svn: 189640
|
|
|
|
| |
llvm-svn: 189123
|
|
|
|
| |
llvm-svn: 189122
|
|
|
|
| |
llvm-svn: 189121
|
|
|
|
|
|
|
|
|
|
|
| |
When registers must be live throughout the scheduling region, increase
the limit for the register class. Once we exceed the original limit,
they will be spilled, and there's no point further reducing pressure.
This isn't a perfect heuristics but avoids a situation where the
scheduler could become trapped by trying to achieve the impossible.
llvm-svn: 187436
|
|
|
|
|
|
| |
the units.
llvm-svn: 187109
|
|
|
|
| |
llvm-svn: 184564
|
|
|
|
| |
llvm-svn: 184131
|
|
|
|
|
|
| |
This avoids unnecessary copies. No functionality change.
llvm-svn: 175367
|
|
|
|
| |
llvm-svn: 169443
|
|
|
|
| |
llvm-svn: 169427
|
|
|
|
|
|
| |
Now that live register units are tracked individually, the code can be simplified.
llvm-svn: 169426
|
|
|
|
|
|
|
|
| |
This is much simpler to reason about, more efficient, and
fixes some corner cases involving implicit super-register defs.
Fixed rdar://12797931.
llvm-svn: 169425
|
|
|
|
| |
llvm-svn: 169359
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sooooo many of these had incorrect or strange main module includes.
I have manually inspected all of these, and fixed the main module
include to be the nearest plausible thing I could find. If you own or
care about any of these source files, I encourage you to take some time
and check that these edits were sensible. I can't have broken anything
(I strictly added headers, and reordered them, never removed), but they
may not be the headers you'd really like to identify as containing the
API being implemented.
Many forward declarations and missing includes were added to a header
files to allow them to parse cleanly when included first. The main
module rule does in fact have its merits. =]
llvm-svn: 169131
|
|
|
|
|
|
|
| |
Assertion failed: (TopRPTracker.getPos() == RegionBegin && "bad initial Top tracker").
rdar://12790302.
llvm-svn: 169072
|
|
|
|
|
|
| |
instructions without relying on liveintervals.
llvm-svn: 167526
|
|
|
|
|
|
| |
Clients can use the equivalent functions in MRI.
llvm-svn: 165990
|
|
|
|
|
|
|
|
| |
"#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)"
No functional change. Update r163339.
llvm-svn: 163653
|
|
|
|
|
|
| |
No functional change.
llvm-svn: 163339
|
|
|
|
|
|
| |
pressure.
llvm-svn: 158340
|
|
|
|
| |
llvm-svn: 158339
|
|
|
|
| |
llvm-svn: 158256
|
|
|
|
|
|
| |
Allow targets to access this API. It's required for RegisterPressure.
llvm-svn: 158102
|
|
|
|
|
|
| |
Make it a general utility for use by Targets.
llvm-svn: 158097
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
No functional change intended.
Sorry for the churn. The iterator classes are supposed to help avoid
giant commits like this one in the future. The TableGen-produced
register lists are getting quite large, and it may be necessary to
change the table representation.
This makes it possible to do so without changing all clients (again).
llvm-svn: 157854
|
|
|
|
| |
llvm-svn: 157423
|
|
|
|
| |
llvm-svn: 157422
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Introduce the basic strategy for register pressure scheduling.
1) Respect target limits at all times.
2) Indentify critical register classes (pressure sets).
Track pressure within the scheduled region.
Avoid increasing scheduled pressure for critical registers.
3) Avoid exceeding the max pressure of the region prior to scheduling.
Added logic for picking between the top and bottom ready Q's based on
regpressure heuristics.
Status: functional but needs to be asjusted to achieve good results.
llvm-svn: 157006
|
|
|
|
| |
llvm-svn: 157005
|
|
|
|
| |
llvm-svn: 157004
|
|
|
|
| |
llvm-svn: 157002
|
|
|
|
|
|
| |
scheduling.
llvm-svn: 156571
|
|
|
|
|
|
|
|
|
| |
Added getMaxExcessUpward/DownwardPressure. They somewhat abuse the
tracker by speculatively handling an instruction out of order. But it
is convenient for now. In the future, we will cache each instruction's
pressure contribution to make this efficient.
llvm-svn: 156561
|
|
|
|
| |
llvm-svn: 156560
|
|
|
|
|
|
| |
functionality change.
llvm-svn: 155795
|
|
MachineInstr sequence.
This uses the new target interface for tracking register pressure
using pressure sets to model overlapping register classes and
subregisters.
RegisterPressure results can be tracked incrementally or stored at
region boundaries. Global register pressure can be deduced from local
RegisterPressure results if desired.
This is an early, somewhat untested implementation. I'm working on
testing it within the context of a register pressure reducing
MachineScheduler.
llvm-svn: 155454
|