From 9dae457e2b9a9919c3f7d48b229035d2b956a2d4 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Wed, 1 Aug 2012 16:02:59 +0000 Subject: [PATCH] Add DataDep constructors. Explicitly check SSA form. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161115 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MachineTraceMetrics.cpp | 38 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/lib/CodeGen/MachineTraceMetrics.cpp b/lib/CodeGen/MachineTraceMetrics.cpp index 1baab9b1eda..0711614966b 100644 --- a/lib/CodeGen/MachineTraceMetrics.cpp +++ b/lib/CodeGen/MachineTraceMetrics.cpp @@ -515,6 +515,20 @@ struct DataDep { const MachineInstr *DefMI; unsigned DefOp; unsigned UseOp; + + DataDep(const MachineInstr *DefMI, unsigned DefOp, unsigned UseOp) + : DefMI(DefMI), DefOp(DefOp), UseOp(UseOp) {} + + /// Create a DataDep from an SSA form virtual register. + DataDep(const MachineRegisterInfo *MRI, unsigned VirtReg, unsigned UseOp) + : UseOp(UseOp) { + assert(TargetRegisterInfo::isVirtualRegister(VirtReg)); + MachineRegisterInfo::def_iterator DefI = MRI->def_begin(VirtReg); + assert(!DefI.atEnd() && "Register has no defs"); + DefMI = &*DefI; + DefOp = DefI.getOperandNo(); + assert((++DefI).atEnd() && "Register has multiple defs"); + } }; } @@ -535,14 +549,8 @@ static bool getDataDeps(const MachineInstr *UseMI, continue; } // Collect virtual register reads. - if (!MO->readsReg()) - continue; - MachineRegisterInfo::def_iterator DefI = MRI->def_begin(Reg); - DataDep Dep; - Dep.DefMI = &*DefI; - Dep.DefOp = DefI.getOperandNo(); - Dep.UseOp = MO.getOperandNo(); - Deps.push_back(Dep); + if (MO->readsReg()) + Deps.push_back(DataDep(MRI, Reg, MO.getOperandNo())); } return HasPhysRegs; } @@ -561,13 +569,7 @@ static void getPHIDeps(const MachineInstr *UseMI, for (unsigned i = 1; i != UseMI->getNumOperands(); i += 2) { if (UseMI->getOperand(i + 1).getMBB() == Pred) { unsigned Reg = UseMI->getOperand(i).getReg(); - assert(TargetRegisterInfo::isVirtualRegister(Reg) && "Bad PHI op"); - MachineRegisterInfo::def_iterator DefI = MRI->def_begin(Reg); - DataDep Dep; - Dep.DefMI = &*DefI; - Dep.DefOp = DefI.getOperandNo(); - Dep.UseOp = i; - Deps.push_back(Dep); + Deps.push_back(DataDep(MRI, Reg, i)); return; } } @@ -617,11 +619,7 @@ static void updatePhysDepsDownwards(const MachineInstr *UseMI, SparseSet::iterator I = RegUnits.find(*Units); if (I == RegUnits.end()) continue; - DataDep Dep; - Dep.DefMI = I->DefMI; - Dep.DefOp = I->DefOp; - Dep.UseOp = MO.getOperandNo(); - Deps.push_back(Dep); + Deps.push_back(DataDep(I->DefMI, I->DefOp, MO.getOperandNo())); break; } } -- 2.34.1