mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 07:59:57 +00:00
Add method MachineInstr::substituteValue() which substitutes
one Value with another one in all operands and implicit references of the machine instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3306 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cefbd32637
commit
e2a78e3186
@ -77,6 +77,35 @@ MachineInstr::SetRegForOperand(unsigned i, int regNum)
|
||||
}
|
||||
|
||||
|
||||
// Subsitute all occurrences of Value* oldVal with newVal in all operands
|
||||
// and all implicit refs. If defsOnly == true, substitute defs only.
|
||||
unsigned
|
||||
MachineInstr::substituteValue(const Value* oldVal, Value* newVal, bool defsOnly)
|
||||
{
|
||||
unsigned numSubst = 0;
|
||||
|
||||
// Subsitute operands
|
||||
for (MachineInstr::val_op_iterator O = begin(), E = end(); O != E; ++O)
|
||||
if (*O == oldVal)
|
||||
if (!defsOnly || O.isDef())
|
||||
{
|
||||
O.getMachineOperand().value = newVal;
|
||||
++numSubst;
|
||||
}
|
||||
|
||||
// Subsitute implicit refs
|
||||
for (unsigned i=0, N=implicitRefs.size(); i < N; ++i)
|
||||
if (implicitRefs[i] == oldVal)
|
||||
if (!defsOnly || implicitRefIsDefined(i))
|
||||
{
|
||||
implicitRefs[i] = newVal;
|
||||
++numSubst;
|
||||
}
|
||||
|
||||
return numSubst;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MachineInstr::dump() const
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user