diff options
author | Chris Lattner <sabre@nondot.org> | 2008-01-01 20:36:19 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-01-01 20:36:19 +0000 |
commit | 0cb9dd7aa28f091ee8bd0c86a2c7f55f288ac2fb (patch) | |
tree | 91da0d66dc796a2e4da725cbb521fd9a18af2c06 /llvm/lib/CodeGen | |
parent | 097102c32af229f7cb286c4f29c15c11bb83b8a9 (diff) | |
download | bcm5719-llvm-0cb9dd7aa28f091ee8bd0c86a2c7f55f288ac2fb.tar.gz bcm5719-llvm-0cb9dd7aa28f091ee8bd0c86a2c7f55f288ac2fb.zip |
switch the register iterator to act more like hte LLVM value iterator: dereferencing
it now returns the machineinstr of the use. To get the operand, use I.getOperand().
Add a new MachineRegisterInfo::replaceRegWith, which is basically like
Value::replaceAllUsesWith.
llvm-svn: 45482
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 18 |
2 files changed, 17 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index 43cc66d2370..0de5501b78d 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -1,4 +1,4 @@ -//===-- MachineInstr.cpp --------------------------------------------------===// +//===-- lib/CodeGen/MachineInstr.cpp --------------------------------------===// // // The LLVM Compiler Infrastructure // diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index b41a1e748cc..dbb01c3e553 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -45,6 +45,20 @@ void MachineRegisterInfo::HandleVRegListReallocation() { } } +/// replaceRegWith - Replace all instances of FromReg with ToReg in the +/// machine function. This is like llvm-level X->replaceAllUsesWith(Y), +/// except that it also changes any definitions of the register as well. +void MachineRegisterInfo::replaceRegWith(unsigned FromReg, unsigned ToReg) { + assert(FromReg != ToReg && "Cannot replace a reg with itself"); + + // TODO: This could be more efficient by bulk changing the operands. + for (reg_iterator I = reg_begin(FromReg), E = reg_end(); I != E; ) { + MachineOperand &O = I.getOperand(); + ++I; + O.setReg(ToReg); + } +} + /// getVRegDef - Return the machine instr that defines the specified virtual /// register or null if none is found. This assumes that the code is in SSA @@ -54,8 +68,8 @@ MachineInstr *MachineRegisterInfo::getVRegDef(unsigned Reg) const { "Invalid vreg!"); for (reg_iterator I = reg_begin(Reg), E = reg_end(); I != E; ++I) { // Since we are in SSA form, we can stop at the first definition. - if (I->isDef()) - return I->getParent(); + if (I.getOperand().isDef()) + return &*I; } return 0; } |