diff options
author | Andrew Trick <atrick@apple.com> | 2012-01-14 02:17:12 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-01-14 02:17:12 +0000 |
commit | 5e920d7c83c20474fc3470209869978628ccf8da (patch) | |
tree | 338319ef98616a63d15a3b93c2109dd20190dd7c /lib/CodeGen | |
parent | e9ef4ed13ba84ef27da831afa27b7955c8f09530 (diff) |
misched: Added ScheduleDAGInstrs::IsPostRA
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148172 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/MachineScheduler.cpp | 4 | ||||
-rw-r--r-- | lib/CodeGen/PostRASchedulerList.cpp | 2 | ||||
-rw-r--r-- | lib/CodeGen/ScheduleDAGInstrs.cpp | 8 | ||||
-rw-r--r-- | lib/CodeGen/ScheduleDAGInstrs.h | 14 |
4 files changed, 17 insertions, 11 deletions
diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp index ea0153ecf9..e6ca0e847a 100644 --- a/lib/CodeGen/MachineScheduler.cpp +++ b/lib/CodeGen/MachineScheduler.cpp @@ -157,7 +157,7 @@ class MachineScheduler : public ScheduleDAGInstrs { MachineSchedulerPass *Pass; public: MachineScheduler(MachineSchedulerPass *P): - ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT), Pass(P) {} + ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT, /*IsPostRA=*/false), Pass(P) {} /// Schedule - This is called back from ScheduleDAGInstrs::Run() when it's /// time to do some work. @@ -252,7 +252,7 @@ class InstructionShuffler : public ScheduleDAGInstrs { MachineSchedulerPass *Pass; public: InstructionShuffler(MachineSchedulerPass *P): - ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT), Pass(P) {} + ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT, /*IsPostRA=*/false), Pass(P) {} /// Schedule - This is called back from ScheduleDAGInstrs::Run() when it's /// time to do some work. diff --git a/lib/CodeGen/PostRASchedulerList.cpp b/lib/CodeGen/PostRASchedulerList.cpp index fa832c867a..1e06ee9199 100644 --- a/lib/CodeGen/PostRASchedulerList.cpp +++ b/lib/CodeGen/PostRASchedulerList.cpp @@ -185,7 +185,7 @@ SchedulePostRATDList::SchedulePostRATDList( AliasAnalysis *AA, const RegisterClassInfo &RCI, TargetSubtargetInfo::AntiDepBreakMode AntiDepMode, SmallVectorImpl<TargetRegisterClass*> &CriticalPathRCs) - : ScheduleDAGInstrs(MF, MLI, MDT), Topo(SUnits), AA(AA), + : ScheduleDAGInstrs(MF, MLI, MDT, /*IsPostRA=*/true), Topo(SUnits), AA(AA), KillIndices(TRI->getNumRegs()) { const TargetMachine &TM = MF.getTarget(); diff --git a/lib/CodeGen/ScheduleDAGInstrs.cpp b/lib/CodeGen/ScheduleDAGInstrs.cpp index a6556a51c8..c9255b04da 100644 --- a/lib/CodeGen/ScheduleDAGInstrs.cpp +++ b/lib/CodeGen/ScheduleDAGInstrs.cpp @@ -33,9 +33,10 @@ using namespace llvm; ScheduleDAGInstrs::ScheduleDAGInstrs(MachineFunction &mf, const MachineLoopInfo &mli, - const MachineDominatorTree &mdt) + const MachineDominatorTree &mdt, + bool IsPostRAFlag) : ScheduleDAG(mf), MLI(mli), MDT(mdt), MFI(mf.getFrameInfo()), - InstrItins(mf.getTarget().getInstrItineraryData()), + InstrItins(mf.getTarget().getInstrItineraryData()), IsPostRA(IsPostRAFlag), Defs(TRI->getNumRegs()), Uses(TRI->getNumRegs()), LoopRegs(MLI, MDT), FirstDbgValue(0) { DbgValues.clear(); @@ -253,7 +254,8 @@ void ScheduleDAGInstrs::BuildSchedGraph(AliasAnalysis *AA) { unsigned Reg = MO.getReg(); if (Reg == 0) continue; - assert(TRI->isPhysicalRegister(Reg) && "Virtual register encountered!"); + assert(!IsPostRA || TRI->isPhysicalRegister(Reg) && + "Virtual register encountered!"); // Optionally add output and anti dependencies. For anti // dependencies we use a latency of 0 because for a multi-issue diff --git a/lib/CodeGen/ScheduleDAGInstrs.h b/lib/CodeGen/ScheduleDAGInstrs.h index a6233d3482..f393289256 100644 --- a/lib/CodeGen/ScheduleDAGInstrs.h +++ b/lib/CodeGen/ScheduleDAGInstrs.h @@ -104,10 +104,13 @@ namespace llvm { const MachineFrameInfo *MFI; const InstrItineraryData *InstrItins; - /// Defs, Uses - Remember where defs and uses of each physical register - /// are as we iterate upward through the instructions. This is allocated - /// here instead of inside BuildSchedGraph to avoid the need for it to be - /// initialized and destructed for each block. + /// isPostRA flag indicates vregs cannot be present. + bool IsPostRA; + + /// Defs, Uses - Remember where defs and uses of each register are as we + /// iterate upward through the instructions. This is allocated here instead + /// of inside BuildSchedGraph to avoid the need for it to be initialized and + /// destructed for each block. std::vector<std::vector<SUnit *> > Defs; std::vector<std::vector<SUnit *> > Uses; @@ -136,7 +139,8 @@ namespace llvm { explicit ScheduleDAGInstrs(MachineFunction &mf, const MachineLoopInfo &mli, - const MachineDominatorTree &mdt); + const MachineDominatorTree &mdt, + bool IsPostRAFlag); virtual ~ScheduleDAGInstrs() {} |