Make sure the instruction combiner doesn't lose track of instructions
authorChris Lattner <sabre@nondot.org>
Sat, 1 May 2004 23:19:52 +0000 (23:19 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 1 May 2004 23:19:52 +0000 (23:19 +0000)
when replacing them, missing the opportunity to do simplifications

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

lib/Transforms/Scalar/InstructionCombining.cpp

index 18de1269e9d5ab865c56c2fbd27f0b0ad6114530..03be9cd2393b14021d955cac5d659a55bcfe8c40 100644 (file)
@@ -2934,9 +2934,8 @@ bool InstCombiner::runOnFunction(Function &F) {
   bool Changed = false;
   TD = &getAnalysis<TargetData>();
 
-  for (inst_iterator i = inst_begin(F), e = inst_end(F); i != e; ++i) {
-      WorkList.push_back(&*i);
-  }
+  for (inst_iterator i = inst_begin(F), e = inst_end(F); i != e; ++i)
+    WorkList.push_back(&*i);
 
 
   while (!WorkList.empty()) {
@@ -2998,6 +2997,10 @@ bool InstCombiner::runOnFunction(Function &F) {
         BasicBlock *InstParent = I->getParent();
         InstParent->getInstList().insert(I, Result);
 
+        for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
+          if (Instruction *OpI = dyn_cast<Instruction>(I->getOperand(i)))
+            WorkList.push_back(OpI);
+
         // Everything uses the new instruction now...
         I->replaceAllUsesWith(Result);