Don't try to sink 3-address instruction if convertToThreeAddress created more than...
authorEvan Cheng <evan.cheng@apple.com>
Thu, 13 Mar 2008 07:56:58 +0000 (07:56 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 13 Mar 2008 07:56:58 +0000 (07:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48336 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TwoAddressInstructionPass.cpp

index 73803279110730ff4e861ecb8cab449ed14f84bf..30727a6b7d0bb373cf7428415158977f66243b85 100644 (file)
@@ -291,7 +291,12 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
               if (MachineInstr *New=TII->convertToThreeAddress(mbbi, mi, *LV)) {
                 DOUT << "2addr: CONVERTING 2-ADDR: " << *mi;
                 DOUT << "2addr:         TO 3-ADDR: " << *New;
-                bool Sunk = Sink3AddrInstruction(mbbi, New, regB, mi);
+                bool Sunk = false;
+                if (New->findRegisterUseOperand(regB, New, TRI))
+                  // FIXME: Temporary workaround. If the new instruction doesn't
+                  // uses regB, convertToThreeAddress must have created more
+                  // then one instruction.
+                  Sunk = Sink3AddrInstruction(mbbi, New, regB, mi);
                 mbbi->erase(mi);                 // Nuke the old inst.
                 if (!Sunk) mi = New;
                 ++NumConvertedTo3Addr;