Iterate over phys regs instead
[oota-llvm.git] / lib / Target / WebAssembly / WebAssemblyStoreResults.cpp
index b67453bee708dffe523612f6c9e76b7ee25ceb0b..4e08b2b079eb0e6bb3085a5696165be87f4b327c 100644 (file)
@@ -71,6 +71,9 @@ bool WebAssemblyStoreResults::runOnMachineFunction(MachineFunction &MF) {
 
   const MachineRegisterInfo &MRI = MF.getRegInfo();
   MachineDominatorTree &MDT = getAnalysis<MachineDominatorTree>();
+  bool Changed = false;
+
+  assert(MRI.isSSA() && "StoreResults depends on SSA form");
 
   for (auto &MBB : MF) {
     DEBUG(dbgs() << "Basic Block: " << MBB.getName() << '\n');
@@ -106,12 +109,16 @@ bool WebAssemblyStoreResults::runOnMachineFunction(MachineFunction &MF) {
             if (&MI == Where || !MDT.dominates(&MI, Where))
               continue;
           }
+          Changed = true;
           DEBUG(dbgs() << "Setting operand " << O << " in " << *Where
                        << " from " << MI << "\n");
           O.setReg(ToReg);
+          // If the store's def was previously dead, it is no longer. But the
+          // dead flag shouldn't be set yet.
+          assert(!MI.getOperand(0).isDead() && "Dead flag set on store result");
         }
       }
   }
 
-  return true;
+  return Changed;
 }