| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
It is too easy to accidentally violate the ordering requirements when
modifying the PressureDiff entries through iterators.
llvm-svn: 250590
|
|
|
|
| |
llvm-svn: 250579
|
|
|
|
|
|
|
| |
There are always more physical registers and register units so the
previous behaviour was correct but we can do with less memory.
llvm-svn: 248767
|
|
|
|
|
|
|
|
|
|
| |
LiveInRegs/LiveOutRegs from RegisterPressure to PressureTracker"
This reverts commit r247943.
Accidental commit, code review was not finished yet.
llvm-svn: 247945
|
|
|
|
|
|
|
|
| |
PressureTracker
Differential Revision: http://reviews.llvm.org/D12814
llvm-svn: 247943
|
|
|
|
|
|
|
|
|
|
|
| |
- There are no duplicate registers in LiveRegs list we are copying from
and so we do not need to sort the registers.
- Simply use SmallVector::apend instead of a loop between begin() and end()
with push_back().
Differential Revision: http://reviews.llvm.org/D12813
llvm-svn: 247588
|
|
|
|
| |
llvm-svn: 244402
|
|
|
|
|
|
|
| |
Also display the pressure diff in the case of a
getMaxUpwardPressureDelta() verify failure.
llvm-svn: 241759
|
|
|
|
| |
llvm-svn: 238371
|
|
|
|
| |
llvm-svn: 237544
|
|
|
|
|
|
| |
NFC.
llvm-svn: 232944
|
|
|
|
| |
llvm-svn: 219672
|
|
|
|
|
|
|
|
|
|
|
| |
shorter/easier and have the DAG use that to do the same lookup. This
can be used in the future for TargetMachine based caching lookups from
the MachineFunction easily.
Update the MIPS subtarget switching machinery to update this pointer
at the same time it runs.
llvm-svn: 214838
|
|
|
|
|
|
| |
information and update all callers. No functional change.
llvm-svn: 214781
|
|
|
|
|
|
|
|
|
| |
This macro is sometimes defined manually but isn't (and doesn't need to be) in
llvm-config.h so shouldn't appear in the headers, likewise NDEBUG.
Instead switch them over to LLVM_DUMP_METHOD on the definitions.
llvm-svn: 212130
|
|
|
|
|
|
| |
instead of comparing to nullptr.
llvm-svn: 206142
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
for use with C++11 range-based for-loops.
The gist of phase 1 is to remove the skipInstruction() and skipBundle()
methods from these iterators, instead splitting each iterator into a version
that walks operands, a version that walks instructions, and a version that
walks bundles. This has the result of making some "clever" loops in lib/CodeGen
more verbose, but also makes their iterator invalidation characteristics much
more obvious to the casual reader. (Making them concise again in the future is a
good motivating case for a pre-incrementing range adapter!)
Phase 2 of this undertaking with consist of removing the getOperand() method,
and changing operator*() of the operand-walker to return a MachineOperand&. At
that point, it should be possible to add range views for them that work as one
might expect.
llvm-svn: 203757
|
|
|
|
| |
llvm-svn: 201043
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This solves a problem where a def machine operand has no uses but has
not been marked dead. In this case, the initial RP analysis was being
extra precise and determining from LiveIntervals the the register was
actually dead. This caused us to omit the register from the RP
tracker's block live out. That's all good, but the per-instruction
summary still accounted for it as a valid def. This could cause an
assertion in the tracker later when we underflow pressure.
This is from a bug report on an out-of-tree target. It is not
reproducible on well-behaved targets. I'm just making an obvious fix
without unit test.
llvm-svn: 200941
|
|
|
|
|
|
| |
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
|