summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp60
1 files changed, 0 insertions, 60 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp b/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp
index 248af5abc13..e0376b7582f 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp
@@ -1122,63 +1122,6 @@ Instruction *InstCombiner::SliceUpIllegalIntegerPHI(PHINode &FirstPhi) {
return replaceInstUsesWith(FirstPhi, Undef);
}
-Instruction *InstCombiner::FoldPHIWithEqualPointers(PHINode &PN) {
- auto *PhiTy = dyn_cast<PointerType>(PN.getType());
- if (!PhiTy)
- return nullptr;
-
- // Make sure all incoming pointers have the same base pointers and offsets.
- // Also, make sure no addrspacecasts involved.
- // Note: only inbounds GEPs are supported!
- const DataLayout &DL = PN.getModule()->getDataLayout();
- Value *FirstValue = PN.getIncomingValue(0);
- int64_t Offset;
- Value *Base = GetPointerBaseWithConstantOffset(
- FirstValue, Offset, DL, /* AllowNonInbounds */ false);
-
- auto *BaseTy = cast<PointerType>(Base->getType());
- if (BaseTy->getAddressSpace() != PhiTy->getAddressSpace())
- return nullptr;
-
- for (Use &Incoming : PN.incoming_values()) {
- if (!isa<Instruction>(Incoming))
- return nullptr;
- int64_t CurrentOffset;
- Value *CurrentBase = GetPointerBaseWithConstantOffset(
- Incoming, CurrentOffset, DL, /* AllowNonInbounds */ false);
- if (CurrentBase != Base || CurrentOffset != Offset)
- return nullptr;
- }
-
- Instruction *InsertPt = nullptr;
- if (auto *BaseInst = dyn_cast<Instruction>(Base)) {
- if (isa<PHINode>(BaseInst)) {
- BasicBlock *InsertBB = BaseInst->getParent();
- BasicBlock::iterator InsertPtIter = InsertBB->getFirstInsertionPt();
- // Make sure the insertion point exists. At the moment the only reason why
- // insertion point may not exist is EHPad being a terminator. This check
- // is a bit more future-proof than just `if (!TI->isEHPad())`.
- if (InsertPtIter != InsertBB->end())
- InsertPt = &*InsertPtIter;
- } else
- InsertPt = BaseInst->getNextNode();
- } else
- InsertPt = &*PN.getFunction()->getEntryBlock().getFirstInsertionPt();
-
- if (!InsertPt)
- return nullptr;
-
- Builder.SetInsertPoint(InsertPt);
- Type *I8PtrTy = Builder.getInt8PtrTy(PhiTy->getAddressSpace());
- Value *BaseI8Ptr = Builder.CreateBitCast(Base, I8PtrTy);
- Value *GEP = Builder.CreateConstInBoundsGEP1_64(BaseI8Ptr, Offset);
- Value *GEPTyped = Builder.CreateBitCast(GEP, PhiTy);
-
- for (Use &Incoming : PN.incoming_values())
- replaceInstUsesWith(*cast<Instruction>(Incoming), GEPTyped);
- return replaceInstUsesWith(PN, GEPTyped);
-}
-
// PHINode simplification
//
Instruction *InstCombiner::visitPHINode(PHINode &PN) {
@@ -1200,9 +1143,6 @@ Instruction *InstCombiner::visitPHINode(PHINode &PN) {
if (Instruction *Result = FoldPHIArgOpIntoPHI(PN))
return Result;
- if (Instruction *Result = FoldPHIWithEqualPointers(PN))
- return Result;
-
// If this is a trivial cycle in the PHI node graph, remove it. Basically, if
// this PHI only has a single use (a PHI), and if that PHI only has one use (a
// PHI)... break the cycle.
OpenPOWER on IntegriCloud