From c1c2ba7a724fbb93b386eceb04ccce4dba2c9830 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Thu, 16 Apr 2009 19:25:55 +0000 Subject: Fix a bug with inttoptr/ptrtoint casts where the pointer has a different size from the integer, requiring zero extension or truncation. Don't create ZExtInsts with pointer types. This fixes a regression in consumer-jpeg. llvm-svn: 69307 --- llvm/lib/Analysis/ScalarEvolutionExpander.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'llvm/lib/Analysis/ScalarEvolutionExpander.cpp') diff --git a/llvm/lib/Analysis/ScalarEvolutionExpander.cpp b/llvm/lib/Analysis/ScalarEvolutionExpander.cpp index 6300f1ff113..0e0eb55a058 100644 --- a/llvm/lib/Analysis/ScalarEvolutionExpander.cpp +++ b/llvm/lib/Analysis/ScalarEvolutionExpander.cpp @@ -281,17 +281,21 @@ Value *SCEVExpander::visitTruncateExpr(SCEVTruncateExpr *S) { } Value *SCEVExpander::visitZeroExtendExpr(SCEVZeroExtendExpr *S) { + const Type *Ty = S->getType(); + if (isa(Ty)) Ty = TD.getIntPtrType(); Value *V = expand(S->getOperand()); if (isa(V->getType())) V = InsertCastOfTo(Instruction::PtrToInt, V, TD.getIntPtrType()); - return CastInst::CreateZExtOrBitCast(V, S->getType(), "tmp.", InsertPt); + return CastInst::CreateZExtOrBitCast(V, Ty, "tmp.", InsertPt); } Value *SCEVExpander::visitSignExtendExpr(SCEVSignExtendExpr *S) { + const Type *Ty = S->getType(); + if (isa(Ty)) Ty = TD.getIntPtrType(); Value *V = expand(S->getOperand()); if (isa(V->getType())) V = InsertCastOfTo(Instruction::PtrToInt, V, TD.getIntPtrType()); - return CastInst::CreateSExtOrBitCast(V, S->getType(), "tmp.", InsertPt); + return CastInst::CreateSExtOrBitCast(V, Ty, "tmp.", InsertPt); } Value *SCEVExpander::visitSMaxExpr(SCEVSMaxExpr *S) { -- cgit v1.2.3