From 59b06dc7758fb6087cdcf5d9f45a9ebb11e05504 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Tue, 24 Aug 2010 07:55:44 +0000 Subject: Don't assume that all constants with integer types are ConstantInts. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111906 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/LazyValueInfo.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'lib/Analysis') diff --git a/lib/Analysis/LazyValueInfo.cpp b/lib/Analysis/LazyValueInfo.cpp index 57b4dcb..e8cc69d 100644 --- a/lib/Analysis/LazyValueInfo.cpp +++ b/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(BBI->getType()); if (isa(BBI)) { - RHS = cast(BBI->getOperand(1)); + RHS = dyn_cast(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(C); + ConstantInt *CI = dyn_cast(C); + if (!CI) return Unknown; + ConstantRange CR = Result.getConstantRange(); if (Pred == ICmpInst::ICMP_EQ) { if (!CR.contains(CI->getValue())) -- cgit v1.1