aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2010-07-22 06:01:28 +0000
committerOwen Anderson <resistor@mac.com>2010-07-22 06:01:28 +0000
commit8b9177aee2671568182e1688e1c53f2459038e46 (patch)
treee8d1601a7dbf507f645a0433c91e408848ac4ae4 /lib/CodeGen
parent214e46eac77bcea2b57d0d454a2dda1d97e979fb (diff)
downloadexternal_llvm-8b9177aee2671568182e1688e1c53f2459038e46.zip
external_llvm-8b9177aee2671568182e1688e1c53f2459038e46.tar.gz
external_llvm-8b9177aee2671568182e1688e1c53f2459038e46.tar.bz2
Revert r109079, which broke a lot of CodeGen tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109082 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp52
1 files changed, 27 insertions, 25 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
index 412980e..6e82249 100644
--- a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
+++ b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
@@ -1036,7 +1036,7 @@ namespace {
std::vector<SUnit*> Queue;
SF Picker;
unsigned CurQueueId;
- bool TracksRegPressure;
+ bool isBottomUp;
protected:
// SUnits - The SUnits for the current graph.
@@ -1061,22 +1061,20 @@ namespace {
public:
RegReductionPriorityQueue(MachineFunction &mf,
- bool tracksrp,
+ bool isbottomup,
const TargetInstrInfo *tii,
const TargetRegisterInfo *tri,
const TargetLowering *tli)
- : Picker(this), CurQueueId(0), TracksRegPressure(tracksrp),
+ : Picker(this), CurQueueId(0), isBottomUp(isbottomup),
MF(mf), TII(tii), TRI(tri), TLI(tli), scheduleDAG(NULL) {
- if (TracksRegPressure) {
- unsigned NumRC = TRI->getNumRegClasses();
- RegLimit.resize(NumRC);
- RegPressure.resize(NumRC);
- std::fill(RegLimit.begin(), RegLimit.end(), 0);
- std::fill(RegPressure.begin(), RegPressure.end(), 0);
- for (TargetRegisterInfo::regclass_iterator I = TRI->regclass_begin(),
- E = TRI->regclass_end(); I != E; ++I)
- RegLimit[(*I)->getID()] = tri->getAllocatableSet(MF, *I).count() - 1;
- }
+ unsigned NumRC = TRI->getNumRegClasses();
+ RegLimit.resize(NumRC);
+ RegPressure.resize(NumRC);
+ std::fill(RegLimit.begin(), RegLimit.end(), 0);
+ std::fill(RegPressure.begin(), RegPressure.end(), 0);
+ for (TargetRegisterInfo::regclass_iterator I = TRI->regclass_begin(),
+ E = TRI->regclass_end(); I != E; ++I)
+ RegLimit[(*I)->getID()] = tri->getAllocatableSet(MF, *I).count() - 1;
}
void initNodes(std::vector<SUnit> &sunits) {
@@ -1209,10 +1207,7 @@ namespace {
return false;
}
- void ScheduledNode(SUnit *SU) {
- if (!TracksRegPressure)
- return;
-
+ void OpenPredLives(SUnit *SU) {
const SDNode *N = SU->getNode();
if (!N->isMachineOpcode())
return;
@@ -1265,14 +1260,9 @@ namespace {
else
RegPressure[RCId] -= TLI->getRepRegClassCostFor(VT);
}
-
- dumpRegPressure();
}
- void UnscheduledNode(SUnit *SU) {
- if (!TracksRegPressure)
- return;
-
+ void ClosePredLives(SUnit *SU) {
const SDNode *N = SU->getNode();
if (!N->isMachineOpcode())
return;
@@ -1327,7 +1317,19 @@ namespace {
unsigned RCId = TLI->getRepRegClassFor(VT)->getID();
RegPressure[RCId] += TLI->getRepRegClassCostFor(VT);
}
+ }
+ void ScheduledNode(SUnit *SU) {
+ if (!TLI || !isBottomUp)
+ return;
+ OpenPredLives(SU);
+ dumpRegPressure();
+ }
+
+ void UnscheduledNode(SUnit *SU) {
+ if (!TLI || !isBottomUp)
+ return;
+ ClosePredLives(SU);
dumpRegPressure();
}
@@ -1849,7 +1851,7 @@ llvm::createBURRListDAGScheduler(SelectionDAGISel *IS, CodeGenOpt::Level) {
const TargetRegisterInfo *TRI = TM.getRegisterInfo();
BURegReductionPriorityQueue *PQ =
- new BURegReductionPriorityQueue(*IS->MF, false, TII, TRI, 0);
+ new BURegReductionPriorityQueue(*IS->MF, true, TII, TRI, 0);
ScheduleDAGRRList *SD = new ScheduleDAGRRList(*IS->MF, true, false, PQ);
PQ->setScheduleDAG(SD);
return SD;
@@ -1875,7 +1877,7 @@ llvm::createSourceListDAGScheduler(SelectionDAGISel *IS, CodeGenOpt::Level) {
const TargetRegisterInfo *TRI = TM.getRegisterInfo();
SrcRegReductionPriorityQueue *PQ =
- new SrcRegReductionPriorityQueue(*IS->MF, false, TII, TRI, 0);
+ new SrcRegReductionPriorityQueue(*IS->MF, true, TII, TRI, 0);
ScheduleDAGRRList *SD = new ScheduleDAGRRList(*IS->MF, true, false, PQ);
PQ->setScheduleDAG(SD);
return SD;