cache result of operator*
authorGabor Greif <ggreif@gmail.com>
Fri, 9 Jul 2010 16:39:02 +0000 (16:39 +0000)
committerGabor Greif <ggreif@gmail.com>
Fri, 9 Jul 2010 16:39:02 +0000 (16:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107988 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScalarEvolutionExpander.cpp

index 67b3f50e1427565e857fd30f89673871eec7ba3f..4a7b5f7ce5ee53852d575d72a265a31a67da885e 100644 (file)
@@ -30,9 +30,10 @@ Value *SCEVExpander::ReuseOrCreateCast(Value *V, const Type *Ty,
                                        BasicBlock::iterator IP) {
   // Check to see if there is already a cast!
   for (Value::use_iterator UI = V->use_begin(), E = V->use_end();
-       UI != E; ++UI)
-    if ((*UI)->getType() == Ty)
-      if (CastInst *CI = dyn_cast<CastInst>(cast<Instruction>(*UI)))
+       UI != E; ++UI) {
+    User *U = *UI;
+    if (U->getType() == Ty)
+      if (CastInst *CI = dyn_cast<CastInst>(cast<Instruction>(U)))
         if (CI->getOpcode() == Op) {
           // If the cast isn't where we want it, fix it.
           if (BasicBlock::iterator(CI) != IP) {
@@ -49,6 +50,7 @@ Value *SCEVExpander::ReuseOrCreateCast(Value *V, const Type *Ty,
           rememberInstruction(CI);
           return CI;
         }
+  }
 
   // Create a new cast.
   Instruction *I = CastInst::Create(Op, V, Ty, V->getName(), IP);