mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 16:09: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
|
void
|
||||||
MachineInstr::dump() const
|
MachineInstr::dump() const
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user