Changes in directory llvm/include/llvm/Analysis:
ScalarEvolutionExpander.h updated: 1.9 -> 1.10 --- Log message: Change the interface to SCEVExpander::InsertCastOfTo to take a cast opcode so the decision of which opcode to use is pushed upward to the caller. Adjust the callers to pass the expected opcode. --- Diffs of the changes: (+17 -4) ScalarEvolutionExpander.h | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-) Index: llvm/include/llvm/Analysis/ScalarEvolutionExpander.h diff -u llvm/include/llvm/Analysis/ScalarEvolutionExpander.h:1.9 llvm/include/llvm/Analysis/ScalarEvolutionExpander.h:1.10 --- llvm/include/llvm/Analysis/ScalarEvolutionExpander.h:1.9 Mon Dec 4 14:18:26 2006 +++ llvm/include/llvm/Analysis/ScalarEvolutionExpander.h Wed Dec 13 02:06:42 2006 @@ -88,7 +88,8 @@ /// 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); + static Value *InsertCastOfTo(Instruction::CastOps opcode, Value *V, + const Type *Ty); protected: Value *expand(SCEV *S) { @@ -104,8 +105,20 @@ Value *expandInTy(SCEV *S, const Type *Ty) { Value *V = expand(S); - if (Ty && V->getType() != Ty) - return InsertCastOfTo(V, Ty); + if (Ty && V->getType() != Ty) { + if (isa<PointerType>(Ty) && V->getType()->isInteger()) + return InsertCastOfTo(Instruction::IntToPtr, V, Ty); + else if (Ty->isInteger() && isa<PointerType>(V->getType())) + return InsertCastOfTo(Instruction::PtrToInt, V, Ty); + else if (Ty->getPrimitiveSizeInBits() == + V->getType()->getPrimitiveSizeInBits()) + return InsertCastOfTo(Instruction::BitCast, V, Ty); + else if (Ty->getPrimitiveSizeInBits() > + V->getType()->getPrimitiveSizeInBits()) + return InsertCastOfTo(Instruction::ZExt, V, Ty); + else + return InsertCastOfTo(Instruction::Trunc, V, Ty); + } return V; } @@ -119,7 +132,7 @@ } Value *visitZeroExtendExpr(SCEVZeroExtendExpr *S) { - Value *V = expandInTy(S->getOperand(),S->getType()->getUnsignedVersion()); + Value *V = expandInTy(S->getOperand(), S->getType()); return CastInst::createZExtOrBitCast(V, S->getType(), "tmp.", InsertPt); } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits