mi-sched: update PressureDiffs on-the-fly for liveness.

This removes all expensive pressure tracking logic from the scheduling
critical path of node comparison.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189643 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Trick
2013-08-30 04:36:57 +00:00
parent 1362dcb589
commit 663bd99227
6 changed files with 97 additions and 31 deletions

View File

@ -296,6 +296,12 @@ namespace llvm {
return r != end() && r->end.getBaseIndex() == BaseIdx;
}
/// Return true if a live range starts at the instruction at this index.
bool isDefinedByInstr(SlotIndex index) const {
const_iterator r = find(index.getDeadSlot());
return r != end() && r->end.getBaseIndex() == index.getBaseIndex();
}
/// getLiveRangeContaining - Return the live range that contains the
/// specified index, or null if there is none.
const LiveRange *getLiveRangeContaining(SlotIndex Idx) const {

View File

@ -221,7 +221,9 @@ protected:
MachineBasicBlock::iterator LiveRegionEnd;
// Map each SU to its summary of pressure changes.
// Map each SU to its summary of pressure changes. This array is updated for
// liveness during bottom-up scheduling. Top-down scheduling may proceed but
// has no affect on the pressure diffs.
PressureDiffs SUPressureDiffs;
/// Register pressure in this region computed by initRegPressure.
@ -376,6 +378,8 @@ protected:
void initRegPressure();
void updatePressureDiffs(ArrayRef<unsigned> LiveUses);
void updateScheduledPressure(const std::vector<unsigned> &NewMaxPressure);
bool checkSchedLimit();

View File

@ -311,7 +311,7 @@ public:
SlotIndex getCurrSlot() const;
/// Recede across the previous instruction.
bool recede(PressureDiff *PDiff = 0);
bool recede(SmallVectorImpl<unsigned> *LiveUses = 0, PressureDiff *PDiff = 0);
/// Advance across the current instruction.
bool advance();