aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/RegisterPressure.cpp
AgeCommit message (Collapse)AuthorFilesLines
2014-10-14Remove unnecessary TargetMachine.h includes.Eric Christopher1-1/+0
llvm-svn: 219672
2014-08-05Have MachineFunction cache a pointer to the subtarget to make lookupsEric Christopher1-1/+1
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
2014-08-04Remove the TargetMachine forwards for TargetSubtargetInfo basedEric Christopher1-1/+1
information and update all callers. No functional change. llvm-svn: 214781
2014-07-01Move remaining LLVM_ENABLE_DUMP conditionals out of the headersAlp Toker1-2/+3
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
2014-04-14[C++11] More 'nullptr' conversion. In some cases just using a boolean check ↵Craig Topper1-2/+2
instead of comparing to nullptr. llvm-svn: 206142
2014-03-13Phase 1 of refactoring the MachineRegisterInfo iterators to make them suitableOwen Anderson1-3/+3
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
2014-02-09Fix formatting introduced in r200941David Blaikie1-2/+1
llvm-svn: 201043
2014-02-06Track register pressure a bit more carefully (weird corner case).Andrew Trick1-1/+8
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
2013-11-08increase the accuracy of register pressure computation in the presence of ↵Pedro Artigas1-6/+27
dead definitions by using live intervals, if available, to identify dead definitions and proceed accordingly. llvm-svn: 194286
2013-10-10Represent RegUnit liveness with LiveRange instanceMatthias Braun1-11/+11
Previously LiveInterval has been used, but having a spill weight and register number is unnecessary for a register unit. llvm-svn: 192397
2013-10-10Pass LiveQueryResult by valueMatthias Braun1-3/+3
This makes the API a bit more natural to use and makes it easier to make LiveRanges implementation details private. llvm-svn: 192394
2013-09-04Added -misched-regpressure option.Andrew Trick1-8/+20
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
2013-08-30Use LiveRangeQuery for instruction-level liveness queries.Andrew Trick1-6/+8
Remove redundant or bug-prone LiveInterval APIs. llvm-svn: 189685
2013-08-30mi-sched: update PressureDiffs on-the-fly for liveness.Andrew Trick1-22/+18
This removes all expensive pressure tracking logic from the scheduling critical path of node comparison. llvm-svn: 189643
2013-08-30Replace LiveInterval::killedAt with isKilledAtInstr.Andrew Trick1-3/+3
Return true for LRGs that end at EarlyClobber or Register slots. llvm-svn: 189642
2013-08-30mi-sched: Precompute a PressureDiff for each instruction, adjust for ↵Andrew Trick1-34/+203
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
2013-08-23Rename to RegPressure API parameters RegUnits.Andrew Trick1-13/+14
llvm-svn: 189123
2013-08-23Simplify RegPressure helpers.Andrew Trick1-15/+12
llvm-svn: 189122
2013-08-23Add a convenient PSetIterator for visiting pressure sets affected by a register.Andrew Trick1-68/+21
llvm-svn: 189121
2013-07-30MI Sched: Track live-thru registers.Andrew Trick1-10/+57
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
2013-07-25MI Sched: track register pressure by importance of the set, not weight of ↵Andrew Trick1-14/+20
the units. llvm-svn: 187109
2013-06-21MI-Sched: Adjust regpressure limits for reserved regs.Andrew Trick1-4/+4
llvm-svn: 184564
2013-06-17MI Sched: fix a typo in RegPressure heuristics.Andrew Trick1-1/+1
llvm-svn: 184131
2013-02-16Replace erase loop with std::remove_if.Benjamin Kramer1-6/+5
This avoids unnecessary copies. No functionality change. llvm-svn: 175367
2012-12-05RegPressureTracker::dump(): Remove unnecessary argument.Andrew Trick1-1/+1
llvm-svn: 169443
2012-12-05RegisterPressureTracker: fix findUseBetween to handle DebugValueAndrew Trick1-0/+2
llvm-svn: 169427
2012-12-05RegisterPressureTracker: unify virtual registers and physical regunits.Andrew Trick1-241/+179
Now that live register units are tracked individually, the code can be simplified. llvm-svn: 169426
2012-12-05RegisterPresssureTracker: Track live physical register by unit.Andrew Trick1-94/+87
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
2012-12-05Added RegisterPressureTracker::dump() for debugging.Andrew Trick1-5/+16
llvm-svn: 169359
2012-12-03Use the new script to sort the includes of every file under lib.Chandler Carruth1-2/+2
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
2012-12-01misched: Fix RegisterPressureTracker handling of DebugVals.Andrew Trick1-12/+14
Assertion failed: (TopRPTracker.getPos() == RegionBegin && "bad initial Top tracker"). rdar://12790302. llvm-svn: 169072
2012-11-07misched: handle on-the-fly regpressure queries better for 2-addrAndrew Trick1-8/+13
instructions without relying on liveintervals. llvm-svn: 167526
2012-10-15Remove RegisterClassInfo::isReserved() and isAllocatable().Jakob Stoklund Olesen1-6/+6
Clients can use the equivalent functions in MRI. llvm-svn: 165990
2012-09-11Release build: guard dump functions withManman Ren1-1/+1
"#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)" No functional change. Update r163339. llvm-svn: 163653
2012-09-06Release build: guard dump functions with "ifndef NDEBUG"Manman Ren1-0/+2
No functional change. llvm-svn: 163339
2012-06-11misched: When querying RegisterPressureTracker, always save current and max ↵Andrew Trick1-2/+8
pressure. llvm-svn: 158340
2012-06-11misched: regpressure getMaxPressureDelta, revert accidental checkin.Andrew Trick1-8/+2
llvm-svn: 158339
2012-06-09Register pressure: added getPressureAfterInstr.Andrew Trick1-33/+80
llvm-svn: 158256
2012-06-06Move RegisterClassInfo.h.Andrew Trick1-1/+1
Allow targets to access this API. It's required for RegisterPressure. llvm-svn: 158102
2012-06-06Move RegisterPressure.h.Andrew Trick1-1/+1
Make it a general utility for use by Targets. llvm-svn: 158097
2012-06-01Switch all register list clients to the new MC*Iterator interface.Jakob Stoklund Olesen1-5/+4
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
2012-05-24regpressure: Added RegisterPressure::dumpAndrew Trick1-0/+18
llvm-svn: 157423
2012-05-24regpressure: physreg livein/out fixAndrew Trick1-2/+2
llvm-svn: 157422
2012-05-17misched: Added 3-level regpressure back-off.Andrew Trick1-21/+68
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
2012-05-17commentAndrew Trick1-1/+1
llvm-svn: 157005
2012-05-17regpressure: Fix getMaxUpwardPressureDelta.Andrew Trick1-2/+6
llvm-svn: 157004
2012-05-17whitespaceAndrew Trick1-2/+2
llvm-svn: 157002
2012-05-10misched: Introducing Top and Bottom register pressure trackers during ↵Andrew Trick1-16/+18
scheduling. llvm-svn: 156571
2012-05-10RegPressure: API for speculatively checking instruction pressure.Andrew Trick1-1/+180
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
2012-05-10RegPressure: fix array index iteration style.Andrew Trick1-8/+8
llvm-svn: 156560