diff options
-rw-r--r-- | include/llvm/Analysis/ScalarEvolutionExpander.h | 21 | ||||
-rw-r--r-- | lib/Analysis/ScalarEvolutionExpander.cpp | 21 |
2 files changed, 25 insertions, 17 deletions
diff --git a/include/llvm/Analysis/ScalarEvolutionExpander.h b/include/llvm/Analysis/ScalarEvolutionExpander.h index 7f990d6..bd9596c 100644 --- a/include/llvm/Analysis/ScalarEvolutionExpander.h +++ b/include/llvm/Analysis/ScalarEvolutionExpander.h @@ -75,11 +75,7 @@ namespace llvm { /// expandCodeFor - Insert code to directly compute the specified SCEV /// expression into the program. The inserted code is inserted into the /// specified block. - Value *expandCodeFor(SCEVHandle SH, Instruction *IP) { - // Expand the code for this SCEV. - this->InsertPt = IP; - return expand(SH); - } + Value *expandCodeFor(SCEVHandle SH, Instruction *IP); /// InsertCastOfTo - Insert a cast of V to the specified type, doing what /// we can to share the casts. @@ -96,20 +92,11 @@ namespace llvm { return S->getValue(); } - Value *visitTruncateExpr(SCEVTruncateExpr *S) { - Value *V = expand(S->getOperand()); - return CastInst::CreateTruncOrBitCast(V, S->getType(), "tmp.", InsertPt); - } + Value *visitTruncateExpr(SCEVTruncateExpr *S); - Value *visitZeroExtendExpr(SCEVZeroExtendExpr *S) { - Value *V = expand(S->getOperand()); - return CastInst::CreateZExtOrBitCast(V, S->getType(), "tmp.", InsertPt); - } + Value *visitZeroExtendExpr(SCEVZeroExtendExpr *S); - Value *visitSignExtendExpr(SCEVSignExtendExpr *S) { - Value *V = expand(S->getOperand()); - return CastInst::CreateSExtOrBitCast(V, S->getType(), "tmp.", InsertPt); - } + Value *visitSignExtendExpr(SCEVSignExtendExpr *S); Value *visitAddExpr(SCEVAddExpr *S); diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp index e32b21e..07850f7 100644 --- a/lib/Analysis/ScalarEvolutionExpander.cpp +++ b/lib/Analysis/ScalarEvolutionExpander.cpp @@ -226,6 +226,21 @@ Value *SCEVExpander::visitAddRecExpr(SCEVAddRecExpr *S) { return expand(V); } +Value *SCEVExpander::visitTruncateExpr(SCEVTruncateExpr *S) { + Value *V = expand(S->getOperand()); + return CastInst::createTruncOrBitCast(V, S->getType(), "tmp.", InsertPt); +} + +Value *SCEVExpander::visitZeroExtendExpr(SCEVZeroExtendExpr *S) { + Value *V = expand(S->getOperand()); + return CastInst::createZExtOrBitCast(V, S->getType(), "tmp.", InsertPt); +} + +Value *SCEVExpander::visitSignExtendExpr(SCEVSignExtendExpr *S) { + Value *V = expand(S->getOperand()); + return CastInst::createSExtOrBitCast(V, S->getType(), "tmp.", InsertPt); +} + Value *SCEVExpander::visitSMaxExpr(SCEVSMaxExpr *S) { Value *LHS = expand(S->getOperand(0)); for (unsigned i = 1; i < S->getNumOperands(); ++i) { @@ -246,6 +261,12 @@ Value *SCEVExpander::visitUMaxExpr(SCEVUMaxExpr *S) { return LHS; } +Value *SCEVExpander::expandCodeFor(SCEVHandle SH, Instruction *IP) { + // Expand the code for this SCEV. + this->InsertPt = IP; + return expand(SH); +} + Value *SCEVExpander::expand(SCEV *S) { // Check to see if we already expanded this. std::map<SCEVHandle, Value*>::iterator I = InsertedExpressions.find(S); |