diff options
author | Owen Anderson <resistor@mac.com> | 2010-08-24 07:55:44 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-08-24 07:55:44 +0000 |
commit | c62f704576f733e69065056f7418125f85355f92 (patch) | |
tree | 5b74a702d18777264b77e5ba9e014cf23ddb8536 /llvm/lib/Analysis/LazyValueInfo.cpp | |
parent | bfd822ce647b728296a2a89259ec556cb024ce7a (diff) | |
download | bcm5719-llvm-c62f704576f733e69065056f7418125f85355f92.tar.gz bcm5719-llvm-c62f704576f733e69065056f7418125f85355f92.zip |
Don't assume that all constants with integer types are ConstantInts.
llvm-svn: 111906
Diffstat (limited to 'llvm/lib/Analysis/LazyValueInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/LazyValueInfo.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp index 57b4dcb8d7c..e8cc69de551 100644 --- a/llvm/lib/Analysis/LazyValueInfo.cpp +++ b/llvm/lib/Analysis/LazyValueInfo.cpp @@ -216,6 +216,8 @@ public: return markOverdefined(); else return markConstantRange(NewR); + } else if (!isUndefined()) { + return markOverdefined(); } assert(isUndefined() && "Unexpected lattice"); @@ -541,7 +543,12 @@ LVILatticeVal LVIQuery::getBlockValue(BasicBlock *BB) { ConstantRange RHSRange(1); const IntegerType *ResultTy = cast<IntegerType>(BBI->getType()); if (isa<BinaryOperator>(BBI)) { - RHS = cast<ConstantInt>(BBI->getOperand(1)); + RHS = dyn_cast<ConstantInt>(BBI->getOperand(1)); + if (!RHS) { + Result.markOverdefined(); + return Result; + } + RHSRange = ConstantRange(RHS->getValue(), RHS->getValue()+1); } @@ -842,7 +849,9 @@ LazyValueInfo::getPredicateOnEdge(unsigned Pred, Value *V, Constant *C, } if (Result.isConstantRange()) { - ConstantInt *CI = cast<ConstantInt>(C); + ConstantInt *CI = dyn_cast<ConstantInt>(C); + if (!CI) return Unknown; + ConstantRange CR = Result.getConstantRange(); if (Pred == ICmpInst::ICMP_EQ) { if (!CR.contains(CI->getValue())) |