diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-09-06 00:11:24 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-09-06 00:11:24 +0000 |
commit | 4f3451886cd728c60d38f8eec7b6608acc684cc6 (patch) | |
tree | 47fc373baf592033d473b376cc7a246697d5279b /lib/Transforms | |
parent | b7fb353614ccc2574e85f2f4d972e5b452c0e6ec (diff) | |
download | external_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.cpp | 76 |
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"); |