[llvm-commits] CVS: llvm/lib/Transforms/Scalar/IndVarSimplify.cpp

Chris Lattner lattner at cs.uiuc.edu
Wed Apr 21 18:36:01 PDT 2004


Changes in directory llvm/lib/Transforms/Scalar:

IndVarSimplify.cpp updated: 1.60 -> 1.61

---
Log message:

Implement a todo, rewriting all possible scev expressions inside of the
loop.  This eliminates the extra add from the previous case, but it's
not clear that this will be a performance win overall.  Tommorows test 
results will tell. :)


---
Diffs of the changes:  (+18 -8)

Index: llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
diff -u llvm/lib/Transforms/Scalar/IndVarSimplify.cpp:1.60 llvm/lib/Transforms/Scalar/IndVarSimplify.cpp:1.61
--- llvm/lib/Transforms/Scalar/IndVarSimplify.cpp:1.60	Wed Apr 21 17:22:01 2004
+++ llvm/lib/Transforms/Scalar/IndVarSimplify.cpp	Wed Apr 21 18:36:08 2004
@@ -444,21 +444,31 @@
     Changed = true;
   }
 
-  DeleteTriviallyDeadInstructions(DeadInsts);
-
-  // TODO: In the future we could replace all instructions in the loop body with
-  // simpler expressions.  It's not clear how useful this would be though or if
-  // the code expansion cost would be worth it!  We probably shouldn't do this
-  // until we have a way to reuse expressions already in the code.
-#if 0
+  // Now replace all derived expressions in the loop body with simpler
+  // expressions.
   for (unsigned i = 0, e = L->getBlocks().size(); i != e; ++i)
     if (LI->getLoopFor(L->getBlocks()[i]) == L) {  // Not in a subloop...
       BasicBlock *BB = L->getBlocks()[i];
       for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
         if (I->getType()->isInteger() &&      // Is an integer instruction
+            !I->use_empty() &&
             !Rewriter.isInsertedInstruction(I)) {
           SCEVHandle SH = SE->getSCEV(I);
+          Value *V = Rewriter.ExpandCodeFor(SH, I, I->getType());
+          if (V != I) {
+            if (isa<Instruction>(V)) {
+              std::string Name = I->getName();
+              I->setName("");
+              V->setName(Name);
+            }
+            I->replaceAllUsesWith(V);
+            DeadInsts.insert(I);
+            ++NumRemoved;
+            Changed = true;
+          }          
         }
     }
-#endif
+
+
+  DeleteTriviallyDeadInstructions(DeadInsts);
 }





More information about the llvm-commits mailing list