diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-10-21 23:49:52 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-10-21 23:49:52 +0000 |
commit | 0b39fc0d16013404f86c9a026ff5535aac18c057 (patch) | |
tree | bec050763f788c8f8d96065dedace070a1e4cca5 /llvm/lib | |
parent | 9133f8c76d27c350bfc625319558f2f9cd2f8c03 (diff) | |
download | bcm5719-llvm-0b39fc0d16013404f86c9a026ff5535aac18c057.tar.gz bcm5719-llvm-0b39fc0d16013404f86c9a026ff5535aac18c057.zip |
Revert "Teach the load analysis to allow finding available values which require" (r220277)
This seems to have caused PR21330.
llvm-svn: 220349
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Analysis/Loads.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/IR/Instructions.cpp | 23 | ||||
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Transforms/Scalar/JumpThreading.cpp | 8 |
4 files changed, 9 insertions, 39 deletions
diff --git a/llvm/lib/Analysis/Loads.cpp b/llvm/lib/Analysis/Loads.cpp index 5042eb9777a..bb0d60e263e 100644 --- a/llvm/lib/Analysis/Loads.cpp +++ b/llvm/lib/Analysis/Loads.cpp @@ -176,13 +176,8 @@ Value *llvm::FindAvailableLoadedValue(Value *Ptr, BasicBlock *ScanBB, Type *AccessTy = cast<PointerType>(Ptr->getType())->getElementType(); - // Try to get the DataLayout for this module. This may be null, in which case - // the optimizations will be limited. - const DataLayout *DL = ScanBB->getDataLayout(); - - // Try to get the store size for the type. - uint64_t AccessSize = DL ? DL->getTypeStoreSize(AccessTy) - : AA ? AA->getTypeStoreSize(AccessTy) : 0; + // If we're using alias analysis to disambiguate get the size of *Ptr. + uint64_t AccessSize = AA ? AA->getTypeStoreSize(AccessTy) : 0; Value *StrippedPtr = Ptr->stripPointerCasts(); @@ -207,7 +202,7 @@ Value *llvm::FindAvailableLoadedValue(Value *Ptr, BasicBlock *ScanBB, if (LoadInst *LI = dyn_cast<LoadInst>(Inst)) if (AreEquivalentAddressValues( LI->getPointerOperand()->stripPointerCasts(), StrippedPtr) && - CastInst::isBitOrNoopPointerCastable(LI->getType(), AccessTy, DL)) { + CastInst::isBitCastable(LI->getType(), AccessTy)) { if (AATags) LI->getAAMetadata(*AATags); return LI; @@ -219,8 +214,7 @@ Value *llvm::FindAvailableLoadedValue(Value *Ptr, BasicBlock *ScanBB, // (This is true even if the store is volatile or atomic, although // those cases are unlikely.) if (AreEquivalentAddressValues(StorePtr, StrippedPtr) && - CastInst::isBitOrNoopPointerCastable(SI->getValueOperand()->getType(), - AccessTy, DL)) { + CastInst::isBitCastable(SI->getValueOperand()->getType(), AccessTy)) { if (AATags) SI->getAAMetadata(*AATags); return SI->getOperand(0); diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index 9da0eb4a0d6..1497aa885c5 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -2559,17 +2559,6 @@ CastInst *CastInst::CreatePointerBitCastOrAddrSpaceCast( return Create(Instruction::BitCast, S, Ty, Name, InsertBefore); } -CastInst *CastInst::CreateBitOrPointerCast(Value *S, Type *Ty, - const Twine &Name, - Instruction *InsertBefore) { - if (S->getType()->isPointerTy() && Ty->isIntegerTy()) - return Create(Instruction::PtrToInt, S, Ty, Name, InsertBefore); - if (S->getType()->isIntegerTy() && Ty->isPointerTy()) - return Create(Instruction::IntToPtr, S, Ty, Name, InsertBefore); - - return Create(Instruction::BitCast, S, Ty, Name, InsertBefore); -} - CastInst *CastInst::CreateIntegerCast(Value *C, Type *Ty, bool isSigned, const Twine &Name, Instruction *InsertBefore) { @@ -2727,18 +2716,6 @@ bool CastInst::isBitCastable(Type *SrcTy, Type *DestTy) { return true; } -bool CastInst::isBitOrNoopPointerCastable(Type *SrcTy, Type *DestTy, - const DataLayout *DL) { - if (auto *PtrTy = dyn_cast<PointerType>(SrcTy)) - if (auto *IntTy = dyn_cast<IntegerType>(DestTy)) - return DL && IntTy->getBitWidth() >= DL->getPointerTypeSizeInBits(PtrTy); - if (auto *PtrTy = dyn_cast<PointerType>(DestTy)) - if (auto *IntTy = dyn_cast<IntegerType>(SrcTy)) - return DL && IntTy->getBitWidth() >= DL->getPointerTypeSizeInBits(PtrTy); - - return isBitCastable(SrcTy, DestTy); -} - // Provide a way to get a "cast" where the cast opcode is inferred from the // types and size of the operand. This, basically, is a parallel of the // logic in the castIsValid function below. This axiom should hold: diff --git a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp index c0df914cb66..f3ac44cbd6b 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp @@ -418,8 +418,7 @@ Instruction *InstCombiner::visitLoadInst(LoadInst &LI) { BasicBlock::iterator BBI = &LI; if (Value *AvailableVal = FindAvailableLoadedValue(Op, LI.getParent(), BBI,6)) return ReplaceInstUsesWith( - LI, Builder->CreateBitOrPointerCast(AvailableVal, LI.getType(), - LI.getName() + ".cast")); + LI, Builder->CreateBitCast(AvailableVal, LI.getType())); // load(gep null, ...) -> unreachable if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(Op)) { diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index c37a4c91c66..25a8b0cdbd3 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -902,8 +902,8 @@ bool JumpThreading::SimplifyPartiallyRedundantLoad(LoadInst *LI) { // only happen in dead loops. if (AvailableVal == LI) AvailableVal = UndefValue::get(LI->getType()); if (AvailableVal->getType() != LI->getType()) - AvailableVal = - CastInst::CreateBitOrPointerCast(AvailableVal, LI->getType(), "", LI); + AvailableVal = CastInst::Create(CastInst::BitCast, AvailableVal, + LI->getType(), "", LI); LI->replaceAllUsesWith(AvailableVal); LI->eraseFromParent(); return true; @@ -1040,8 +1040,8 @@ bool JumpThreading::SimplifyPartiallyRedundantLoad(LoadInst *LI) { // predecessor use the same bitcast. Value *&PredV = I->second; if (PredV->getType() != LI->getType()) - PredV = CastInst::CreateBitOrPointerCast(PredV, LI->getType(), "", - P->getTerminator()); + PredV = CastInst::Create(CastInst::BitCast, PredV, LI->getType(), "", + P->getTerminator()); PN->addIncoming(PredV, I->first); } |