Correctly update def/use information for modified machine operands.
authorAlkis Evlogimenos <alkis@evlogimenos.com>
Mon, 2 Feb 2004 21:56:40 +0000 (21:56 +0000)
committerAlkis Evlogimenos <alkis@evlogimenos.com>
Mon, 2 Feb 2004 21:56:40 +0000 (21:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11087 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TwoAddressInstructionPass.cpp

index 991be42e5317956788860e028061c00d81d79b88..ecd22abe31129b1df37b98cba450f2a43c1d8327 100644 (file)
@@ -146,11 +146,17 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
                 LV.addVirtualRegisterDead(regB, &*mbbi, prevMi);
 
             // replace all occurences of regB with regA
+            // and mark all uses and defs of regA as def&use
             for (unsigned i = 1; i < mi->getNumOperands(); ++i) {
-                if (mi->getOperand(i).isRegister() &&
-                    mi->getOperand(i).getReg() == regB)
-                    mi->SetMachineOperandReg(i, regA);
+                MachineOperand& op = mi->getOperand(i);
+                if (op.isRegister()) {
+                    if (op.getReg() == regB)
+                        mi->SetMachineOperandReg(i, regA);
+                    if (op.getReg() == regA)
+                        op.setDef().setUse();
+                }
             }
+
             DEBUG(std::cerr << "\t\tmodified original to: ";
                   mi->print(std::cerr, TM));
             assert(mi->getOperand(0).getAllocatedRegNum() ==