aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Analysis
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-09-03 23:34:49 +0000
committerDan Gohman <gohman@apple.com>2009-09-03 23:34:49 +0000
commit1046e41998ac9178d87226cb0869612c22f5c6d1 (patch)
treed9a3addec2c194094cb027f2daa97815a2862048 /lib/Analysis
parentc527d7e5a814b834aaece6e67d2447b9d2d2be5e (diff)
downloadexternal_llvm-1046e41998ac9178d87226cb0869612c22f5c6d1.zip
external_llvm-1046e41998ac9178d87226cb0869612c22f5c6d1.tar.gz
external_llvm-1046e41998ac9178d87226cb0869612c22f5c6d1.tar.bz2
Revert 80959. It isn't sufficient to solve the full problem. And it
introduced regressions in the Ocaml bindings tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80969 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r--lib/Analysis/ConstantFolding.cpp18
1 files changed, 6 insertions, 12 deletions
diff --git a/lib/Analysis/ConstantFolding.cpp b/lib/Analysis/ConstantFolding.cpp
index 9bc0093..109eaad 100644
--- a/lib/Analysis/ConstantFolding.cpp
+++ b/lib/Analysis/ConstantFolding.cpp
@@ -203,21 +203,15 @@ static Constant *SymbolicallyEvaluateGEP(Constant* const* Ops, unsigned NumOps,
if (Offset != 0)
return 0;
- // Create the GEP constant expr.
- Constant *C = ConstantExpr::getGetElementPtr(Ptr,
- &NewIdxs[0], NewIdxs.size());
- assert(cast<PointerType>(C->getType())->getElementType() == Ty &&
- "Computed GetElementPtr has unexpected type!");
-
// If the base is the start of a GlobalVariable and all the array indices
// remain in their static bounds, the GEP is inbounds. We can check that
// all indices are in bounds by just checking the first index only
- // because we've just normalized all the indices. We can mutate the
- // Constant in place because we've proven that the indices are in bounds,
- // so they'll always be in bounds.
- if (isa<GlobalVariable>(Ptr) && NewIdxs[0]->isNullValue())
- if (GEPOperator *GEP = dyn_cast<GEPOperator>(C))
- GEP->setIsInBounds(true);
+ // because we've just normalized all the indices.
+ Constant *C = isa<GlobalVariable>(Ptr) && NewIdxs[0]->isNullValue() ?
+ ConstantExpr::getInBoundsGetElementPtr(Ptr, &NewIdxs[0], NewIdxs.size()) :
+ ConstantExpr::getGetElementPtr(Ptr, &NewIdxs[0], NewIdxs.size());
+ assert(cast<PointerType>(C->getType())->getElementType() == Ty &&
+ "Computed GetElementPtr has unexpected type!");
// If we ended up indexing a member with a type that doesn't match
// the type of what the original indices indexed, add a cast.