aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/ConstantFold.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2013-11-07 22:29:42 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2013-11-07 22:29:42 +0000
commitd3d140da3679d1b673b7edd2e4a27431fda98a89 (patch)
tree8385bdf10ce6ce3d13fcafe27594e120c1e80044 /llvm/lib/IR/ConstantFold.cpp
parentbd4fef4a8939db18f39b108e19097b25e2c7c47a (diff)
downloadllvm-d3d140da3679d1b673b7edd2e4a27431fda98a89.zip
llvm-d3d140da3679d1b673b7edd2e4a27431fda98a89.tar.gz
llvm-d3d140da3679d1b673b7edd2e4a27431fda98a89.tar.bz2
IR: Properly canonicalize PointerType in ConstantExpr GEPs
No additional test was needed, Other/constant-fold-gep.ll detects this just fine. llvm-svn: 194221
Diffstat (limited to 'llvm/lib/IR/ConstantFold.cpp')
-rw-r--r--llvm/lib/IR/ConstantFold.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp
index 46e391a..3219be11 100644
--- a/llvm/lib/IR/ConstantFold.cpp
+++ b/llvm/lib/IR/ConstantFold.cpp
@@ -1966,11 +1966,12 @@ static Constant *ConstantFoldGetElementPtrImpl(Constant *C,
else if (VectorType *VTy = dyn_cast<VectorType>(LastTy))
NumElements = VTy->getNumElements();
- if (ConstantInt *CI = dyn_cast<ConstantInt>(Idx0)) {
- int64_t Idx0Val = CI->getSExtValue();
- if (NumElements > 0 && Idx0Val >= 0 &&
- (uint64_t)Idx0Val < NumElements)
- IsSequentialAccessInRange = true;
+ if (NumElements > 0) {
+ if (ConstantInt *CI = dyn_cast<ConstantInt>(Idx0)) {
+ int64_t Idx0Val = CI->getSExtValue();
+ if (Idx0Val >= 0 && (uint64_t)Idx0Val < NumElements)
+ IsSequentialAccessInRange = true;
+ }
} else if (PointerType *PTy = dyn_cast<PointerType>(LastTy))
// Only handle pointers to sized types, not pointers to functions.
if (PTy->getElementType()->isSized())