Changes in directory llvm/include/llvm/Analysis:
ScalarEvolutionExpander.h updated: 1.3 -> 1.4 --- Log message: Refactor a bunch of code into a non-inlined method --- Diffs of the changes: (+6 -33) ScalarEvolutionExpander.h | 39 ++++++--------------------------------- 1 files changed, 6 insertions(+), 33 deletions(-) Index: llvm/include/llvm/Analysis/ScalarEvolutionExpander.h diff -u llvm/include/llvm/Analysis/ScalarEvolutionExpander.h:1.3 llvm/include/llvm/Analysis/ScalarEvolutionExpander.h:1.4 --- llvm/include/llvm/Analysis/ScalarEvolutionExpander.h:1.3 Fri Feb 3 23:49:01 2006 +++ llvm/include/llvm/Analysis/ScalarEvolutionExpander.h Sat Feb 4 03:51:33 2006 @@ -86,6 +86,10 @@ return expandInTy(SH, Ty); } + /// InsertCastOfTo - Insert a cast of V to the specified type, doing what + /// we can to share the casts. + static Value *InsertCastOfTo(Value *V, const Type *Ty); + protected: Value *expand(SCEV *S) { // Check to see if we already expanded this. @@ -100,39 +104,8 @@ Value *expandInTy(SCEV *S, const Type *Ty) { Value *V = expand(S); - if (Ty && V->getType() != Ty) { - // FIXME: keep track of the cast instruction. - if (Constant *C = dyn_cast<Constant>(V)) - return ConstantExpr::getCast(C, Ty); - else if (Instruction *I = dyn_cast<Instruction>(V)) { - // Check to see if there is already a cast. If there is, use it. - for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); - UI != E; ++UI) { - if ((*UI)->getType() == Ty) - if (CastInst *CI = dyn_cast<CastInst>(cast<Instruction>(*UI))) { - BasicBlock::iterator It = I; ++It; - if (isa<InvokeInst>(I)) - It = cast<InvokeInst>(I)->getNormalDest()->begin(); - while (isa<PHINode>(It)) ++It; - if (It != BasicBlock::iterator(CI)) { - // Splice the cast immediately after the operand in question. - BasicBlock::InstListType &InstList = - It->getParent()->getInstList(); - InstList.splice(It, CI->getParent()->getInstList(), CI); - } - return CI; - } - } - BasicBlock::iterator IP = I; ++IP; - if (InvokeInst *II = dyn_cast<InvokeInst>(I)) - IP = II->getNormalDest()->begin(); - while (isa<PHINode>(IP)) ++IP; - return new CastInst(V, Ty, V->getName(), IP); - } else { - // FIXME: check to see if there is already a cast! - return new CastInst(V, Ty, V->getName(), InsertPt); - } - } + if (Ty && V->getType() != Ty) + return InsertCastOfTo(V, Ty); return V; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits