diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-04-10 18:38:47 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-04-10 18:38:47 +0000 |
commit | 172b70c62a315de654a4d1683dbb5544e67afa90 (patch) | |
tree | b25239cb3d16fd33f3a70dde12b1211ce9cbffb1 /lib | |
parent | f0785153e51a60ede0a85bf98c1c1e6ada9054f6 (diff) |
A copy instruction may use a register multiple times on some targets. Change them all.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49491 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/SimpleRegisterCoalescing.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp index 2e13ff9241..61f9700d56 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -716,7 +716,6 @@ void SimpleRegisterCoalescing::RemoveCopiesFromValNo(LiveInterval &li, VNInfo *VNI) { for (MachineRegisterInfo::use_iterator UI = mri_->use_begin(li.reg), UE = mri_->use_end(); UI != UE;) { - MachineOperand &UseMO = UI.getOperand(); MachineInstr *UseMI = &*UI; ++UI; if (JoinedCopies.count(UseMI)) @@ -731,7 +730,12 @@ void SimpleRegisterCoalescing::RemoveCopiesFromValNo(LiveInterval &li, unsigned SrcReg, DstReg; if (!tii_->isMoveInstr(*UseMI, SrcReg, DstReg) || SrcReg != li.reg) assert(0 && "Unexpected use of implicit def!"); - UseMO.setReg(DstReg); + // Each UseMI may have multiple uses of this register. Change them all. + for (unsigned i = 0, e = UseMI->getNumOperands(); i != e; ++i) { + MachineOperand &MO = UseMI->getOperand(i); + if (MO.isReg() && MO.getReg() == li.reg) + MO.setReg(DstReg); + } JoinedCopies.insert(UseMI); } } |