Simplify this code: if the unfolded load can't be hoisted, just delete
authorDan Gohman <gohman@apple.com>
Wed, 28 Oct 2009 15:23:36 +0000 (15:23 +0000)
committerDan Gohman <gohman@apple.com>
Wed, 28 Oct 2009 15:23:36 +0000 (15:23 +0000)
the new instructions and leave the old one in place.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85393 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineLICM.cpp

index d63cd0e82f66567b81b9db1f62aef3da6f8da2cc..cf958f5a86c44a8bdc8f9bd1bf2b8e7643580dd1 100644 (file)
@@ -401,7 +401,7 @@ void MachineLICM::Hoist(MachineInstr *MI) {
     const TargetRegisterClass *RC = TID.OpInfo[0].getRegClass(TRI);
     // Ok, we're unfolding. Create a temporary register and do the unfold.
     unsigned Reg = RegInfo->createVirtualRegister(RC);
-    SmallVector<MachineInstr *, 1> NewMIs;
+    SmallVector<MachineInstr *, 2> NewMIs;
     bool Success =
       TII->unfoldMemoryOperand(MF, MI, Reg,
                                /*UnfoldLoad=*/true, /*UnfoldStore=*/false,
@@ -415,28 +415,15 @@ void MachineLICM::Hoist(MachineInstr *MI) {
     MachineBasicBlock *MBB = MI->getParent();
     MBB->insert(MI, NewMIs[0]);
     MBB->insert(MI, NewMIs[1]);
-    MI->eraseFromParent();
     // If unfolding produced a load that wasn't loop-invariant or profitable to
-    // hoist, re-fold it to undo the damage.
+    // hoist, discard the new instructions and bail.
     if (!IsLoopInvariantInst(*NewMIs[0]) || !IsProfitableToHoist(*NewMIs[0])) {
-      SmallVector<unsigned, 1> Ops;
-      for (unsigned i = 0, e = NewMIs[1]->getNumOperands(); i != e; ++i) {
-        MachineOperand &MO = NewMIs[1]->getOperand(i);
-        if (MO.isReg() && MO.getReg() == Reg) {
-          assert(MO.isUse() &&
-                 "Register defined by unfolded load is redefined "
-                 "instead of just used!");
-          Ops.push_back(i);
-        }
-      }
-      MI = TII->foldMemoryOperand(MF, NewMIs[1], Ops, NewMIs[0]);
-      assert(MI && "Re-fold failed!");
-      MBB->insert(NewMIs[1], MI);
       NewMIs[0]->eraseFromParent();
       NewMIs[1]->eraseFromParent();
       return;
     }
     // Otherwise we successfully unfolded a load that we can hoist.
+    MI->eraseFromParent();
     MI = NewMIs[0];
   }