[llvm] r270824 - [MergedLoadStoreMotion] Small cleanup
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Wed May 25 22:43:12 PDT 2016
Author: majnemer
Date: Thu May 26 00:43:12 2016
New Revision: 270824
URL: http://llvm.org/viewvc/llvm-project?rev=270824&view=rev
Log:
[MergedLoadStoreMotion] Small cleanup
No functional change is intended.
Modified:
llvm/trunk/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp?rev=270824&r1=270823&r2=270824&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/MergedLoadStoreMotion.cpp Thu May 26 00:43:12 2016
@@ -179,9 +179,9 @@ void MergedLoadStoreMotion::removeInstru
// Notify the memory dependence analysis.
if (MD) {
MD->removeInstruction(Inst);
- if (LoadInst *LI = dyn_cast<LoadInst>(Inst))
+ if (auto *LI = dyn_cast<LoadInst>(Inst))
MD->invalidateCachedPointerInfo(LI->getPointerOperand());
- if (Inst->getType()->getScalarType()->isPointerTy()) {
+ if (Inst->getType()->isPtrOrPtrVectorTy()) {
MD->invalidateCachedPointerInfo(Inst);
}
}
@@ -193,10 +193,7 @@ void MergedLoadStoreMotion::removeInstru
///
BasicBlock *MergedLoadStoreMotion::getDiamondTail(BasicBlock *BB) {
assert(isDiamondHead(BB) && "Basic block is not head of a diamond");
- BranchInst *BI = (BranchInst *)(BB->getTerminator());
- BasicBlock *Succ0 = BI->getSuccessor(0);
- BasicBlock *Tail = Succ0->getTerminator()->getSuccessor(0);
- return Tail;
+ return BB->getTerminator()->getSuccessor(0)->getSingleSuccessor();
}
///
@@ -205,25 +202,22 @@ BasicBlock *MergedLoadStoreMotion::getDi
bool MergedLoadStoreMotion::isDiamondHead(BasicBlock *BB) {
if (!BB)
return false;
- if (!isa<BranchInst>(BB->getTerminator()))
- return false;
- if (BB->getTerminator()->getNumSuccessors() != 2)
+ auto *BI = dyn_cast<BranchInst>(BB->getTerminator());
+ if (!BI || !BI->isConditional())
return false;
- BranchInst *BI = (BranchInst *)(BB->getTerminator());
BasicBlock *Succ0 = BI->getSuccessor(0);
BasicBlock *Succ1 = BI->getSuccessor(1);
- if (!Succ0->getSinglePredecessor() ||
- Succ0->getTerminator()->getNumSuccessors() != 1)
+ if (!Succ0->getSinglePredecessor())
return false;
- if (!Succ1->getSinglePredecessor() ||
- Succ1->getTerminator()->getNumSuccessors() != 1)
+ if (!Succ1->getSinglePredecessor())
return false;
- BasicBlock *Tail = Succ0->getTerminator()->getSuccessor(0);
+ BasicBlock *Succ0Succ = Succ0->getSingleSuccessor();
+ BasicBlock *Succ1Succ = Succ1->getSingleSuccessor();
// Ignore triangles.
- if (Succ1->getTerminator()->getSuccessor(0) != Tail)
+ if (!Succ0Succ || !Succ1Succ || Succ0Succ != Succ1Succ)
return false;
return true;
}
@@ -260,7 +254,7 @@ LoadInst *MergedLoadStoreMotion::canHois
if (!isa<LoadInst>(Inst) || Inst->isUsedOutsideOfBlock(BB1))
continue;
- LoadInst *Load1 = dyn_cast<LoadInst>(Inst);
+ auto *Load1 = cast<LoadInst>(Inst);
BasicBlock *BB0 = Load0->getParent();
MemoryLocation Loc0 = MemoryLocation::get(Load0);
@@ -314,11 +308,10 @@ void MergedLoadStoreMotion::hoistInstruc
///
bool MergedLoadStoreMotion::isSafeToHoist(Instruction *I) const {
BasicBlock *Parent = I->getParent();
- for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
- Instruction *Instr = dyn_cast<Instruction>(I->getOperand(i));
- if (Instr && Instr->getParent() == Parent)
- return false;
- }
+ for (Use &U : I->operands())
+ if (auto *Instr = dyn_cast<Instruction>(&U))
+ if (Instr->getParent() == Parent)
+ return false;
return true;
}
@@ -328,8 +321,8 @@ bool MergedLoadStoreMotion::isSafeToHois
bool MergedLoadStoreMotion::hoistLoad(BasicBlock *BB, LoadInst *L0,
LoadInst *L1) {
// Only one definition?
- Instruction *A0 = dyn_cast<Instruction>(L0->getPointerOperand());
- Instruction *A1 = dyn_cast<Instruction>(L1->getPointerOperand());
+ auto *A0 = dyn_cast<Instruction>(L0->getPointerOperand());
+ auto *A1 = dyn_cast<Instruction>(L1->getPointerOperand());
if (A0 && A1 && A0->isIdenticalTo(A1) && isSafeToHoist(A0) &&
A0->hasOneUse() && (A0->getParent() == L0->getParent()) &&
A1->hasOneUse() && (A1->getParent() == L1->getParent()) &&
@@ -340,8 +333,8 @@ bool MergedLoadStoreMotion::hoistLoad(Ba
hoistInstruction(BB, A0, A1);
hoistInstruction(BB, L0, L1);
return true;
- } else
- return false;
+ }
+ return false;
}
///
@@ -353,7 +346,7 @@ bool MergedLoadStoreMotion::hoistLoad(Ba
bool MergedLoadStoreMotion::mergeLoads(BasicBlock *BB) {
bool MergedLoads = false;
assert(isDiamondHead(BB));
- BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
+ BranchInst *BI = cast<BranchInst>(BB->getTerminator());
BasicBlock *Succ0 = BI->getSuccessor(0);
BasicBlock *Succ1 = BI->getSuccessor(1);
// #Instructions in Succ1 for Compile Time Control
@@ -364,8 +357,8 @@ bool MergedLoadStoreMotion::mergeLoads(B
Instruction *I = &*BBI;
++BBI;
- // Only move non-simple (atomic, volatile) loads.
- LoadInst *L0 = dyn_cast<LoadInst>(I);
+ // Don't move non-simple (atomic, volatile) loads.
+ auto *L0 = dyn_cast<LoadInst>(I);
if (!L0 || !L0->isSimple() || L0->isUsedOutsideOfBlock(Succ0))
continue;
@@ -418,10 +411,10 @@ StoreInst *MergedLoadStoreMotion::canSin
MemoryLocation Loc0 = MemoryLocation::get(Store0);
MemoryLocation Loc1 = MemoryLocation::get(Store1);
if (AA->isMustAlias(Loc0, Loc1) && Store0->isSameOperationAs(Store1) &&
- !isStoreSinkBarrierInRange(*(std::next(BasicBlock::iterator(Store1))),
- BB1->back(), Loc1) &&
- !isStoreSinkBarrierInRange(*(std::next(BasicBlock::iterator(Store0))),
- BB0->back(), Loc0)) {
+ !isStoreSinkBarrierInRange(*(std::next(BasicBlock::iterator(Store1))),
+ BB1->back(), Loc1) &&
+ !isStoreSinkBarrierInRange(*(std::next(BasicBlock::iterator(Store0))),
+ BB0->back(), Loc0)) {
return Store1;
}
}
@@ -434,17 +427,17 @@ StoreInst *MergedLoadStoreMotion::canSin
PHINode *MergedLoadStoreMotion::getPHIOperand(BasicBlock *BB, StoreInst *S0,
StoreInst *S1) {
// Create a phi if the values mismatch.
- PHINode *NewPN = nullptr;
Value *Opd1 = S0->getValueOperand();
Value *Opd2 = S1->getValueOperand();
- if (Opd1 != Opd2) {
- NewPN = PHINode::Create(Opd1->getType(), 2, Opd2->getName() + ".sink",
- &BB->front());
- NewPN->addIncoming(Opd1, S0->getParent());
- NewPN->addIncoming(Opd2, S1->getParent());
- if (MD && NewPN->getType()->getScalarType()->isPointerTy())
- MD->invalidateCachedPointerInfo(NewPN);
- }
+ if (Opd1 == Opd2)
+ return nullptr;
+
+ auto *NewPN = PHINode::Create(Opd1->getType(), 2, Opd2->getName() + ".sink",
+ &BB->front());
+ NewPN->addIncoming(Opd1, S0->getParent());
+ NewPN->addIncoming(Opd2, S1->getParent());
+ if (MD && NewPN->getType()->getScalarType()->isPointerTy())
+ MD->invalidateCachedPointerInfo(NewPN);
return NewPN;
}
@@ -456,8 +449,8 @@ PHINode *MergedLoadStoreMotion::getPHIOp
bool MergedLoadStoreMotion::sinkStore(BasicBlock *BB, StoreInst *S0,
StoreInst *S1) {
// Only one definition?
- Instruction *A0 = dyn_cast<Instruction>(S0->getPointerOperand());
- Instruction *A1 = dyn_cast<Instruction>(S1->getPointerOperand());
+ auto *A0 = dyn_cast<Instruction>(S0->getPointerOperand());
+ auto *A1 = dyn_cast<Instruction>(S1->getPointerOperand());
if (A0 && A1 && A0->isIdenticalTo(A1) && A0->hasOneUse() &&
(A0->getParent() == S0->getParent()) && A1->hasOneUse() &&
(A1->getParent() == S1->getParent()) && isa<GetElementPtrInst>(A0)) {
@@ -471,7 +464,7 @@ bool MergedLoadStoreMotion::sinkStore(Ba
S0->dropUnknownNonDebugMetadata();
// Create the new store to be inserted at the join point.
- StoreInst *SNew = (StoreInst *)(S0->clone());
+ StoreInst *SNew = cast<StoreInst>(S0->clone());
Instruction *ANew = A0->clone();
SNew->insertBefore(&*InsertPt);
ANew->insertBefore(SNew);
@@ -479,9 +472,8 @@ bool MergedLoadStoreMotion::sinkStore(Ba
assert(S0->getParent() == A0->getParent());
assert(S1->getParent() == A1->getParent());
- PHINode *NewPN = getPHIOperand(BB, S0, S1);
// New PHI operand? Use it.
- if (NewPN)
+ if (PHINode *NewPN = getPHIOperand(BB, S0, S1))
SNew->setOperand(0, NewPN);
removeInstruction(S0);
removeInstruction(S1);
@@ -527,11 +519,9 @@ bool MergedLoadStoreMotion::mergeStores(
Instruction *I = &*RBI;
++RBI;
- // Sink move non-simple (atomic, volatile) stores
- if (!isa<StoreInst>(I))
- continue;
- StoreInst *S0 = (StoreInst *)I;
- if (!S0->isSimple())
+ // Don't sink non-simple (atomic, volatile) stores.
+ auto *S0 = dyn_cast<StoreInst>(I);
+ if (!S0 || !S0->isSimple())
continue;
++NStores;
@@ -546,11 +536,9 @@ bool MergedLoadStoreMotion::mergeStores(
// is likely stale at this point.
if (!Res)
break;
- else {
- RBI = Pred0->rbegin();
- RBE = Pred0->rend();
- DEBUG(dbgs() << "Search again\n"; Instruction *I = &*RBI; I->dump());
- }
+ RBI = Pred0->rbegin();
+ RBE = Pred0->rend();
+ DEBUG(dbgs() << "Search again\n"; Instruction *I = &*RBI; I->dump());
}
}
return MergedStores;
More information about the llvm-commits
mailing list