diff options
| author | Dan Gohman <gohman@apple.com> | 2009-04-16 19:25:55 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2009-04-16 19:25:55 +0000 |
| commit | c1c2ba7a724fbb93b386eceb04ccce4dba2c9830 (patch) | |
| tree | 57f9df8008f6cdc23b8d90a03607699ea15c602b /llvm/lib/Analysis/ScalarEvolution.cpp | |
| parent | a0c32704e26c554c5a41c13f1bd7671c76660f3a (diff) | |
| download | bcm5719-llvm-c1c2ba7a724fbb93b386eceb04ccce4dba2c9830.tar.gz bcm5719-llvm-c1c2ba7a724fbb93b386eceb04ccce4dba2c9830.zip | |
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
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 972e4e984c6..a3a6ff33332 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -225,8 +225,6 @@ SCEVZeroExtendExpr::SCEVZeroExtendExpr(const SCEVHandle &op, const Type *ty) assert((Op->getType()->isInteger() || isa<PointerType>(Op->getType())) && (Ty->isInteger() || isa<PointerType>(Ty)) && "Cannot zero extend non-integer value!"); - assert(Op->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits() - && "This is not an extending conversion!"); } SCEVZeroExtendExpr::~SCEVZeroExtendExpr() { @@ -674,7 +672,12 @@ SCEVHandle ScalarEvolution::getTruncateExpr(const SCEVHandle &Op, const Type *Ty return Result; } -SCEVHandle ScalarEvolution::getZeroExtendExpr(const SCEVHandle &Op, const Type *Ty) { +SCEVHandle ScalarEvolution::getZeroExtendExpr(const SCEVHandle &Op, + const Type *Ty) { + assert(getTargetData().getTypeSizeInBits(Op->getType()) < + getTargetData().getTypeSizeInBits(Ty) && + "This is not an extending conversion!"); + if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Op)) { const Type *IntTy = Ty; if (isa<PointerType>(IntTy)) IntTy = getTargetData().getIntPtrType(); |

