diff options
author | David Majnemer <david.majnemer@gmail.com> | 2013-11-07 22:29:42 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2013-11-07 22:29:42 +0000 |
commit | d3d140da3679d1b673b7edd2e4a27431fda98a89 (patch) | |
tree | 8385bdf10ce6ce3d13fcafe27594e120c1e80044 /llvm/lib/IR/ConstantFold.cpp | |
parent | bd4fef4a8939db18f39b108e19097b25e2c7c47a (diff) | |
download | llvm-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.cpp | 11 |
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()) |