aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineTraceMetrics.cpp
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-01 16:02:59 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-01 16:02:59 +0000
commit5e19d35e9a0673ed3d323a8228f1474893430c23 (patch)
tree23bae13bd736a9adf97c31a80d0db16a4032b856 /llvm/lib/CodeGen/MachineTraceMetrics.cpp
parentb1c473998dd7f262e673b7cbacdd5a9c215f6716 (diff)
downloadllvm-5e19d35e9a0673ed3d323a8228f1474893430c23.zip
llvm-5e19d35e9a0673ed3d323a8228f1474893430c23.tar.gz
llvm-5e19d35e9a0673ed3d323a8228f1474893430c23.tar.bz2
Add DataDep constructors. Explicitly check SSA form.
llvm-svn: 161115
Diffstat (limited to 'llvm/lib/CodeGen/MachineTraceMetrics.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineTraceMetrics.cpp38
1 files changed, 18 insertions, 20 deletions
diff --git a/llvm/lib/CodeGen/MachineTraceMetrics.cpp b/llvm/lib/CodeGen/MachineTraceMetrics.cpp
index 1baab9b..0711614 100644
--- a/llvm/lib/CodeGen/MachineTraceMetrics.cpp
+++ b/llvm/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<LiveRegUnit>::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;
}
}