aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-09-06 00:11:24 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-09-06 00:11:24 +0000
commit4f3451886cd728c60d38f8eec7b6608acc684cc6 (patch)
tree47fc373baf592033d473b376cc7a246697d5279b /lib/Transforms
parentb7fb353614ccc2574e85f2f4d972e5b452c0e6ec (diff)
downloadexternal_llvm-4f3451886cd728c60d38f8eec7b6608acc684cc6.zip
external_llvm-4f3451886cd728c60d38f8eec7b6608acc684cc6.tar.gz
external_llvm-4f3451886cd728c60d38f8eec7b6608acc684cc6.tar.bz2
Revert "Include optional subclass flags, such as inbounds, nsw, etc., ...", this
breaks MiniSAT on x86_64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Scalar/InstructionCombining.cpp76
1 files changed, 43 insertions, 33 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index 432b88f..ce2f452 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -8086,11 +8086,11 @@ Instruction *InstCombiner::commonPointerCastTransforms(CastInst &CI) {
// If we were able to index down into an element, create the GEP
// and bitcast the result. This eliminates one bitcast, potentially
// two.
- Value *NGEP = cast<GEPOperator>(GEP)->isInBounds() ?
- Builder->CreateInBoundsGEP(OrigBase,
- NewIndices.begin(), NewIndices.end()) :
- Builder->CreateGEP(OrigBase, NewIndices.begin(), NewIndices.end());
+ Value *NGEP = Builder->CreateGEP(OrigBase, NewIndices.begin(),
+ NewIndices.end());
NGEP->takeName(GEP);
+ if (isa<Instruction>(NGEP) && cast<GEPOperator>(GEP)->isInBounds())
+ cast<GEPOperator>(NGEP)->setIsInBounds(true);
if (isa<BitCastInst>(CI))
return new BitCastInst(NGEP, CI.getType());
@@ -8805,8 +8805,11 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
// If we found a path from the src to dest, create the getelementptr now.
if (SrcElTy == DstElTy) {
SmallVector<Value*, 8> Idxs(NumZeros+1, ZeroUInt);
- return GetElementPtrInst::CreateInBounds(Src, Idxs.begin(), Idxs.end(), "",
- ((Instruction*) NULL));
+ Instruction *GEP = GetElementPtrInst::Create(Src,
+ Idxs.begin(), Idxs.end(), "",
+ ((Instruction*) NULL));
+ cast<GEPOperator>(GEP)->setIsInBounds(true);
+ return GEP;
}
}
@@ -10478,11 +10481,12 @@ Instruction *InstCombiner::FoldPHIArgGEPIntoPHI(PHINode &PN) {
}
Value *Base = FixedOperands[0];
- return cast<GEPOperator>(FirstInst)->isInBounds() ?
- GetElementPtrInst::CreateInBounds(Base, FixedOperands.begin()+1,
- FixedOperands.end()) :
+ GetElementPtrInst *GEP =
GetElementPtrInst::Create(Base, FixedOperands.begin()+1,
FixedOperands.end());
+ if (cast<GEPOperator>(FirstInst)->isInBounds())
+ cast<GEPOperator>(GEP)->setIsInBounds(true);
+ return GEP;
}
@@ -10885,13 +10889,14 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
Indices.append(GEP.idx_begin()+1, GEP.idx_end());
}
- if (!Indices.empty())
- return (cast<GEPOperator>(&GEP)->isInBounds() &&
- Src->isInBounds()) ?
- GetElementPtrInst::CreateInBounds(Src->getOperand(0), Indices.begin(),
- Indices.end(), GEP.getName()) :
+ if (!Indices.empty()) {
+ GetElementPtrInst *NewGEP =
GetElementPtrInst::Create(Src->getOperand(0), Indices.begin(),
Indices.end(), GEP.getName());
+ if (cast<GEPOperator>(&GEP)->isInBounds() && Src->isInBounds())
+ cast<GEPOperator>(NewGEP)->setIsInBounds(true);
+ return NewGEP;
+ }
}
// Handle gep(bitcast x) and gep(gep x, 0, 0, 0).
@@ -10921,11 +10926,12 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
if (CATy->getElementType() == XTy->getElementType()) {
// -> GEP i8* X, ...
SmallVector<Value*, 8> Indices(GEP.idx_begin()+1, GEP.idx_end());
- return cast<GEPOperator>(&GEP)->isInBounds() ?
- GetElementPtrInst::CreateInBounds(X, Indices.begin(), Indices.end(),
- GEP.getName()) :
+ GetElementPtrInst *NewGEP =
GetElementPtrInst::Create(X, Indices.begin(), Indices.end(),
GEP.getName());
+ if (cast<GEPOperator>(&GEP)->isInBounds())
+ cast<GEPOperator>(NewGEP)->setIsInBounds(true);
+ return NewGEP;
}
if (const ArrayType *XATy = dyn_cast<ArrayType>(XTy->getElementType())){
@@ -10953,9 +10959,10 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
Value *Idx[2];
Idx[0] = Constant::getNullValue(Type::getInt32Ty(*Context));
Idx[1] = GEP.getOperand(1);
- Value *NewGEP = cast<GEPOperator>(&GEP)->isInBounds() ?
- Builder->CreateInBoundsGEP(X, Idx, Idx + 2, GEP.getName()) :
+ Value *NewGEP =
Builder->CreateGEP(X, Idx, Idx + 2, GEP.getName());
+ if (cast<GEPOperator>(&GEP)->isInBounds())
+ cast<GEPOperator>(NewGEP)->setIsInBounds(true);
// V and GEP are both pointer types --> BitCast
return new BitCastInst(NewGEP, GEP.getType());
}
@@ -11012,9 +11019,9 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
Value *Idx[2];
Idx[0] = Constant::getNullValue(Type::getInt32Ty(*Context));
Idx[1] = NewIdx;
- Value *NewGEP = cast<GEPOperator>(&GEP)->isInBounds() ?
- Builder->CreateInBoundsGEP(X, Idx, Idx + 2, GEP.getName()) :
- Builder->CreateGEP(X, Idx, Idx + 2, GEP.getName());
+ Value *NewGEP = Builder->CreateGEP(X, Idx, Idx + 2, GEP.getName());
+ if (cast<GEPOperator>(&GEP)->isInBounds())
+ cast<GEPOperator>(NewGEP)->setIsInBounds(true);
// The NewGEP must be pointer typed, so must the old one -> BitCast
return new BitCastInst(NewGEP, GEP.getType());
}
@@ -11062,11 +11069,10 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
const Type *InTy =
cast<PointerType>(BCI->getOperand(0)->getType())->getElementType();
if (FindElementAtOffset(InTy, Offset, NewIndices, TD, Context)) {
- Value *NGEP = cast<GEPOperator>(&GEP)->isInBounds() ?
- Builder->CreateInBoundsGEP(BCI->getOperand(0), NewIndices.begin(),
- NewIndices.end()) :
- Builder->CreateGEP(BCI->getOperand(0), NewIndices.begin(),
- NewIndices.end());
+ Value *NGEP = Builder->CreateGEP(BCI->getOperand(0), NewIndices.begin(),
+ NewIndices.end());
+ if (cast<GEPOperator>(&GEP)->isInBounds())
+ cast<GEPOperator>(NGEP)->setIsInBounds(true);
if (NGEP->getType() == GEP.getType())
return ReplaceInstUsesWith(GEP, NGEP);
@@ -11109,8 +11115,9 @@ Instruction *InstCombiner::visitAllocationInst(AllocationInst &AI) {
Value *Idx[2];
Idx[0] = NullIdx;
Idx[1] = NullIdx;
- Value *V = GetElementPtrInst::CreateInBounds(New, Idx, Idx + 2,
- New->getName()+".sub", It);
+ Value *V = GetElementPtrInst::Create(New, Idx, Idx + 2,
+ New->getName()+".sub", It);
+ cast<GEPOperator>(V)->setIsInBounds(true);
// Now make everything use the getelementptr instead of the original
// allocation.
@@ -11479,9 +11486,11 @@ static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
// SIOp0 is a pointer to aggregate and this is a store to the first field,
// emit a GEP to index into its first field.
- if (!NewGEPIndices.empty())
- CastOp = IC.Builder->CreateInBoundsGEP(CastOp, NewGEPIndices.begin(),
- NewGEPIndices.end());
+ if (!NewGEPIndices.empty()) {
+ CastOp = IC.Builder->CreateGEP(CastOp, NewGEPIndices.begin(),
+ NewGEPIndices.end());
+ cast<GEPOperator>(CastOp)->setIsInBounds(true);
+ }
NewCast = IC.Builder->CreateCast(opcode, SIOp0, CastDstTy,
SIOp0->getName()+".c");
@@ -12151,7 +12160,8 @@ Instruction *InstCombiner::visitExtractElementInst(ExtractElementInst &EI) {
PointerType::get(EI.getType(), AS),
I->getOperand(0)->getName());
Value *GEP =
- Builder->CreateInBoundsGEP(Ptr, EI.getOperand(1), I->getName()+".gep");
+ Builder->CreateGEP(Ptr, EI.getOperand(1), I->getName()+".gep");
+ cast<GEPOperator>(GEP)->setIsInBounds(true);
LoadInst *Load = Builder->CreateLoad(GEP, "tmp");