aboutsummaryrefslogtreecommitdiffstats
path: root/lib/VMCore
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-09-12 22:02:17 +0000
committerDan Gohman <gohman@apple.com>2009-09-12 22:02:17 +0000
commitf2e096380d8ea7bd7cb5a47b66a9fa17ef34e365 (patch)
treedf3219bdc95488f86b255968649a8d6b1a7bf8d2 /lib/VMCore
parent07f468d98bf62faf754bc2c72cca515e8b6c9079 (diff)
downloadexternal_llvm-f2e096380d8ea7bd7cb5a47b66a9fa17ef34e365.zip
external_llvm-f2e096380d8ea7bd7cb5a47b66a9fa17ef34e365.tar.gz
external_llvm-f2e096380d8ea7bd7cb5a47b66a9fa17ef34e365.tar.bz2
Preserve the inbounds flag, so that the constant folder doesn't
recompute it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81634 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r--lib/VMCore/ConstantsContext.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/VMCore/ConstantsContext.h b/lib/VMCore/ConstantsContext.h
index 9785d37..4f55502 100644
--- a/lib/VMCore/ConstantsContext.h
+++ b/lib/VMCore/ConstantsContext.h
@@ -437,8 +437,11 @@ struct ConvertConstantType<ConstantExpr, Type> {
case Instruction::GetElementPtr:
// Make everyone now use a constant of the new type...
std::vector<Value*> Idx(OldC->op_begin()+1, OldC->op_end());
- New = ConstantExpr::getGetElementPtrTy(NewTy, OldC->getOperand(0),
- &Idx[0], Idx.size());
+ New = cast<GEPOperator>(OldC)->isInBounds() ?
+ ConstantExpr::getInBoundsGetElementPtrTy(NewTy, OldC->getOperand(0),
+ &Idx[0], Idx.size()) :
+ ConstantExpr::getGetElementPtrTy(NewTy, OldC->getOperand(0),
+ &Idx[0], Idx.size());
break;
}