aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-09-07 22:40:13 +0000
committerDan Gohman <gohman@apple.com>2009-09-07 22:40:13 +0000
commitc62482d4edecd416e6529e31427fa6fd8a9b7ece (patch)
treec5bd56008e83372345f36ab29332a9f921f35a30 /lib/Transforms
parent4a7e6b7a15cea1f8ead4d1bb1cf2e3a39a339cb3 (diff)
downloadexternal_llvm-c62482d4edecd416e6529e31427fa6fd8a9b7ece.zip
external_llvm-c62482d4edecd416e6529e31427fa6fd8a9b7ece.tar.gz
external_llvm-c62482d4edecd416e6529e31427fa6fd8a9b7ece.tar.bz2
Fix GlobalOpt to avoid committing a store if the address getelementptr
is missing the inbounds flag. This is slightly conservative, but it avoids problems with two constants pointing to the same address but getting distinct entries in the Memory DenseMap. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81163 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/IPO/GlobalOpt.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index 293de6c..71eeb75 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2032,7 +2032,8 @@ static bool isSimpleEnoughPointerToCommit(Constant *C, LLVMContext &Context) {
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
// Handle a constantexpr gep.
if (CE->getOpcode() == Instruction::GetElementPtr &&
- isa<GlobalVariable>(CE->getOperand(0))) {
+ isa<GlobalVariable>(CE->getOperand(0)) &&
+ cast<GEPOperator>(CE)->isInBounds()) {
GlobalVariable *GV = cast<GlobalVariable>(CE->getOperand(0));
// Do not allow weak/linkonce/dllimport/dllexport linkage or
// external globals.