From: Andrew Trick Date: Sat, 14 Jan 2012 02:17:12 +0000 (+0000) Subject: misched: Added ScheduleDAGInstrs::IsPostRA X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=5e920d7c83c20474fc3470209869978628ccf8da;p=oota-llvm.git misched: Added ScheduleDAGInstrs::IsPostRA git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148172 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp index ea0153ecf96..e6ca0e847a3 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 fa832c867a5..1e06ee91990 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 &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 a6556a51c83..c9255b04dad 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 a6233d34821..f3932892563 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 > Defs; std::vector > Uses; @@ -136,7 +139,8 @@ namespace llvm { explicit ScheduleDAGInstrs(MachineFunction &mf, const MachineLoopInfo &mli, - const MachineDominatorTree &mdt); + const MachineDominatorTree &mdt, + bool IsPostRAFlag); virtual ~ScheduleDAGInstrs() {}