forked from OSchip/llvm-project
Scalar: Remove some implicit ilist iterator conversions, NFC
Remove some of the implicit ilist iterator conversions in LLVMScalarOpts. More to go. llvm-svn: 250197
This commit is contained in:
parent
4977f4261e
commit
3a9c9e3dcd
|
@ -365,9 +365,9 @@ void ConstantHoisting::collectConstantCandidates(ConstCandMapType &ConstCandMap,
|
|||
/// into an instruction itself.
|
||||
void ConstantHoisting::collectConstantCandidates(Function &Fn) {
|
||||
ConstCandMapType ConstCandMap;
|
||||
for (Function::iterator BB : Fn)
|
||||
for (BasicBlock::iterator Inst : *BB)
|
||||
collectConstantCandidates(ConstCandMap, Inst);
|
||||
for (BasicBlock &BB : Fn)
|
||||
for (Instruction &Inst : BB)
|
||||
collectConstantCandidates(ConstCandMap, &Inst);
|
||||
}
|
||||
|
||||
/// \brief Find the base constant within the given range and rebase all other
|
||||
|
|
|
@ -347,7 +347,7 @@ bool CorrelatedValuePropagation::runOnFunction(Function &F) {
|
|||
for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
|
||||
bool BBChanged = false;
|
||||
for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE; ) {
|
||||
Instruction *II = BI++;
|
||||
Instruction *II = &*BI++;
|
||||
switch (II->getOpcode()) {
|
||||
case Instruction::Select:
|
||||
BBChanged |= processSelect(cast<SelectInst>(II));
|
||||
|
|
|
@ -47,7 +47,7 @@ namespace {
|
|||
TargetLibraryInfo *TLI = TLIP ? &TLIP->getTLI() : nullptr;
|
||||
bool Changed = false;
|
||||
for (BasicBlock::iterator DI = BB.begin(); DI != BB.end(); ) {
|
||||
Instruction *Inst = DI++;
|
||||
Instruction *Inst = &*DI++;
|
||||
if (isInstructionTriviallyDead(Inst, TLI)) {
|
||||
Inst->eraseFromParent();
|
||||
Changed = true;
|
||||
|
|
|
@ -67,11 +67,11 @@ namespace {
|
|||
TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
|
||||
bool Changed = false;
|
||||
for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
|
||||
for (BasicBlock &I : F)
|
||||
// Only check non-dead blocks. Dead blocks may have strange pointer
|
||||
// cycles that will confuse alias analysis.
|
||||
if (DT->isReachableFromEntry(I))
|
||||
Changed |= runOnBasicBlock(*I);
|
||||
if (DT->isReachableFromEntry(&I))
|
||||
Changed |= runOnBasicBlock(I);
|
||||
|
||||
AA = nullptr; MD = nullptr; DT = nullptr;
|
||||
return Changed;
|
||||
|
@ -488,7 +488,7 @@ bool DSE::runOnBasicBlock(BasicBlock &BB) {
|
|||
|
||||
// Do a top-down walk on the BB.
|
||||
for (BasicBlock::iterator BBI = BB.begin(), BBE = BB.end(); BBI != BBE; ) {
|
||||
Instruction *Inst = BBI++;
|
||||
Instruction *Inst = &*BBI++;
|
||||
|
||||
// Handle 'free' calls specially.
|
||||
if (CallInst *F = isFreeCall(Inst, TLI)) {
|
||||
|
@ -507,7 +507,7 @@ bool DSE::runOnBasicBlock(BasicBlock &BB) {
|
|||
auto RemoveDeadInstAndUpdateBBI = [&](Instruction *DeadInst) {
|
||||
// DeleteDeadInstruction can delete the current instruction. Save BBI
|
||||
// in case we need it.
|
||||
WeakVH NextInst(BBI);
|
||||
WeakVH NextInst(&*BBI);
|
||||
|
||||
DeleteDeadInstruction(DeadInst, *MD, *TLI);
|
||||
|
||||
|
@ -599,7 +599,7 @@ bool DSE::runOnBasicBlock(BasicBlock &BB) {
|
|||
|
||||
// DeleteDeadInstruction can delete the current instruction in loop
|
||||
// cases, reset BBI.
|
||||
BBI = Inst;
|
||||
BBI = Inst->getIterator();
|
||||
if (BBI != BB.begin())
|
||||
--BBI;
|
||||
break;
|
||||
|
@ -645,7 +645,8 @@ bool DSE::runOnBasicBlock(BasicBlock &BB) {
|
|||
if (AA->getModRefInfo(DepWrite, Loc) & MRI_Ref)
|
||||
break;
|
||||
|
||||
InstDep = MD->getPointerDependencyFrom(Loc, false, DepWrite, &BB);
|
||||
InstDep = MD->getPointerDependencyFrom(Loc, false,
|
||||
DepWrite->getIterator(), &BB);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -695,7 +696,7 @@ bool DSE::MemoryIsNotModifiedBetween(Instruction *FirstI,
|
|||
EI = B->end();
|
||||
}
|
||||
for (; BI != EI; ++BI) {
|
||||
Instruction *I = BI;
|
||||
Instruction *I = &*BI;
|
||||
if (I->mayWriteToMemory() && I != SecondI) {
|
||||
auto Res = AA->getModRefInfo(I, MemLoc);
|
||||
if (Res != MRI_NoModRef)
|
||||
|
@ -746,7 +747,8 @@ bool DSE::HandleFree(CallInst *F) {
|
|||
Instruction *InstPt = BB->getTerminator();
|
||||
if (BB == F->getParent()) InstPt = F;
|
||||
|
||||
MemDepResult Dep = MD->getPointerDependencyFrom(Loc, false, InstPt, BB);
|
||||
MemDepResult Dep =
|
||||
MD->getPointerDependencyFrom(Loc, false, InstPt->getIterator(), BB);
|
||||
while (Dep.isDef() || Dep.isClobber()) {
|
||||
Instruction *Dependency = Dep.getInst();
|
||||
if (!hasMemoryWrite(Dependency, *TLI) || !isRemovable(Dependency))
|
||||
|
@ -759,7 +761,7 @@ bool DSE::HandleFree(CallInst *F) {
|
|||
if (!AA->isMustAlias(F->getArgOperand(0), DepPointer))
|
||||
break;
|
||||
|
||||
Instruction *Next = std::next(BasicBlock::iterator(Dependency));
|
||||
auto Next = ++Dependency->getIterator();
|
||||
|
||||
// DCE instructions only used to calculate that store
|
||||
DeleteDeadInstruction(Dependency, *MD, *TLI);
|
||||
|
@ -795,23 +797,22 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
|||
SmallSetVector<Value*, 16> DeadStackObjects;
|
||||
|
||||
// Find all of the alloca'd pointers in the entry block.
|
||||
BasicBlock *Entry = BB.getParent()->begin();
|
||||
for (BasicBlock::iterator I = Entry->begin(), E = Entry->end(); I != E; ++I) {
|
||||
if (isa<AllocaInst>(I))
|
||||
DeadStackObjects.insert(I);
|
||||
BasicBlock &Entry = BB.getParent()->front();
|
||||
for (Instruction &I : Entry) {
|
||||
if (isa<AllocaInst>(&I))
|
||||
DeadStackObjects.insert(&I);
|
||||
|
||||
// Okay, so these are dead heap objects, but if the pointer never escapes
|
||||
// then it's leaked by this function anyways.
|
||||
else if (isAllocLikeFn(I, TLI) && !PointerMayBeCaptured(I, true, true))
|
||||
DeadStackObjects.insert(I);
|
||||
else if (isAllocLikeFn(&I, TLI) && !PointerMayBeCaptured(&I, true, true))
|
||||
DeadStackObjects.insert(&I);
|
||||
}
|
||||
|
||||
// Treat byval or inalloca arguments the same, stores to them are dead at the
|
||||
// end of the function.
|
||||
for (Function::arg_iterator AI = BB.getParent()->arg_begin(),
|
||||
AE = BB.getParent()->arg_end(); AI != AE; ++AI)
|
||||
if (AI->hasByValOrInAllocaAttr())
|
||||
DeadStackObjects.insert(AI);
|
||||
for (Argument &AI : BB.getParent()->args())
|
||||
if (AI.hasByValOrInAllocaAttr())
|
||||
DeadStackObjects.insert(&AI);
|
||||
|
||||
const DataLayout &DL = BB.getModule()->getDataLayout();
|
||||
|
||||
|
@ -820,10 +821,10 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
|||
--BBI;
|
||||
|
||||
// If we find a store, check to see if it points into a dead stack value.
|
||||
if (hasMemoryWrite(BBI, *TLI) && isRemovable(BBI)) {
|
||||
if (hasMemoryWrite(&*BBI, *TLI) && isRemovable(&*BBI)) {
|
||||
// See through pointer-to-pointer bitcasts
|
||||
SmallVector<Value *, 4> Pointers;
|
||||
GetUnderlyingObjects(getStoredPointerOperand(BBI), Pointers, DL);
|
||||
GetUnderlyingObjects(getStoredPointerOperand(&*BBI), Pointers, DL);
|
||||
|
||||
// Stores to stack values are valid candidates for removal.
|
||||
bool AllDead = true;
|
||||
|
@ -835,7 +836,7 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
|||
}
|
||||
|
||||
if (AllDead) {
|
||||
Instruction *Dead = BBI++;
|
||||
Instruction *Dead = &*BBI++;
|
||||
|
||||
DEBUG(dbgs() << "DSE: Dead Store at End of Block:\n DEAD: "
|
||||
<< *Dead << "\n Objects: ";
|
||||
|
@ -856,8 +857,8 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
|||
}
|
||||
|
||||
// Remove any dead non-memory-mutating instructions.
|
||||
if (isInstructionTriviallyDead(BBI, TLI)) {
|
||||
Instruction *Inst = BBI++;
|
||||
if (isInstructionTriviallyDead(&*BBI, TLI)) {
|
||||
Instruction *Inst = &*BBI++;
|
||||
DeleteDeadInstruction(Inst, *MD, *TLI, &DeadStackObjects);
|
||||
++NumFastOther;
|
||||
MadeChange = true;
|
||||
|
@ -867,15 +868,15 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
|||
if (isa<AllocaInst>(BBI)) {
|
||||
// Remove allocas from the list of dead stack objects; there can't be
|
||||
// any references before the definition.
|
||||
DeadStackObjects.remove(BBI);
|
||||
DeadStackObjects.remove(&*BBI);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (auto CS = CallSite(BBI)) {
|
||||
if (auto CS = CallSite(&*BBI)) {
|
||||
// Remove allocation function calls from the list of dead stack objects;
|
||||
// there can't be any references before the definition.
|
||||
if (isAllocLikeFn(BBI, TLI))
|
||||
DeadStackObjects.remove(BBI);
|
||||
if (isAllocLikeFn(&*BBI, TLI))
|
||||
DeadStackObjects.remove(&*BBI);
|
||||
|
||||
// If this call does not access memory, it can't be loading any of our
|
||||
// pointers.
|
||||
|
|
|
@ -505,7 +505,7 @@ bool EarlyCSE::processNode(DomTreeNode *Node) {
|
|||
// See if any instructions in the block can be eliminated. If so, do it. If
|
||||
// not, add them to AvailableValues.
|
||||
for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E;) {
|
||||
Instruction *Inst = I++;
|
||||
Instruction *Inst = &*I++;
|
||||
|
||||
// Dead instructions should just be removed.
|
||||
if (isInstructionTriviallyDead(Inst, &TLI)) {
|
||||
|
|
|
@ -59,7 +59,7 @@ static bool iterativelyFlattenCFG(Function &F, AliasAnalysis *AA) {
|
|||
// Loop over all of the basic blocks and remove them if they are unneeded...
|
||||
//
|
||||
for (Function::iterator BBIt = F.begin(); BBIt != F.end();) {
|
||||
if (FlattenCFG(BBIt++, AA)) {
|
||||
if (FlattenCFG(&*BBIt++, AA)) {
|
||||
LocalChange = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2422,7 +2422,7 @@ bool GVN::runOnFunction(Function& F) {
|
|||
// Merge unconditional branches, allowing PRE to catch more
|
||||
// optimization opportunities.
|
||||
for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ) {
|
||||
BasicBlock *BB = FI++;
|
||||
BasicBlock *BB = &*FI++;
|
||||
|
||||
bool removedBlock =
|
||||
MergeBlockIntoPredecessor(BB, DT, /* LoopInfo */ nullptr, MD);
|
||||
|
@ -2478,8 +2478,8 @@ bool GVN::processBlock(BasicBlock *BB) {
|
|||
for (BasicBlock::iterator BI = BB->begin(), BE = BB->end();
|
||||
BI != BE;) {
|
||||
if (!ReplaceWithConstMap.empty())
|
||||
ChangedFunction |= replaceOperandsWithConsts(BI);
|
||||
ChangedFunction |= processInstruction(BI);
|
||||
ChangedFunction |= replaceOperandsWithConsts(&*BI);
|
||||
ChangedFunction |= processInstruction(&*BI);
|
||||
|
||||
if (InstrsToErase.empty()) {
|
||||
++BI;
|
||||
|
@ -2655,7 +2655,7 @@ bool GVN::performScalarPRE(Instruction *CurInst) {
|
|||
// Create a PHI to make the value available in this block.
|
||||
PHINode *Phi =
|
||||
PHINode::Create(CurInst->getType(), predMap.size(),
|
||||
CurInst->getName() + ".pre-phi", CurrentBlock->begin());
|
||||
CurInst->getName() + ".pre-phi", &CurrentBlock->front());
|
||||
for (unsigned i = 0, e = predMap.size(); i != e; ++i) {
|
||||
if (Value *V = predMap[i].first)
|
||||
Phi->addIncoming(V, predMap[i].second);
|
||||
|
@ -2698,7 +2698,7 @@ bool GVN::performPRE(Function &F) {
|
|||
for (BasicBlock::iterator BI = CurrentBlock->begin(),
|
||||
BE = CurrentBlock->end();
|
||||
BI != BE;) {
|
||||
Instruction *CurInst = BI++;
|
||||
Instruction *CurInst = &*BI++;
|
||||
Changed = performScalarPRE(CurInst);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -454,7 +454,7 @@ void IndVarSimplify::handleFloatingPointIV(Loop *L, PHINode *PN) {
|
|||
// platforms.
|
||||
if (WeakPH) {
|
||||
Value *Conv = new SIToFPInst(NewPHI, PN->getType(), "indvar.conv",
|
||||
PN->getParent()->getFirstInsertionPt());
|
||||
&*PN->getParent()->getFirstInsertionPt());
|
||||
PN->replaceAllUsesWith(Conv);
|
||||
RecursivelyDeleteTriviallyDeadInstructions(PN, TLI);
|
||||
}
|
||||
|
@ -1129,7 +1129,7 @@ Instruction *WidenIV::widenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter) {
|
|||
PHINode::Create(DU.WideDef->getType(), 1, UsePhi->getName() + ".wide",
|
||||
UsePhi);
|
||||
WidePhi->addIncoming(DU.WideDef, UsePhi->getIncomingBlock(0));
|
||||
IRBuilder<> Builder(WidePhi->getParent()->getFirstInsertionPt());
|
||||
IRBuilder<> Builder(&*WidePhi->getParent()->getFirstInsertionPt());
|
||||
Value *Trunc = Builder.CreateTrunc(WidePhi, DU.NarrowDef->getType());
|
||||
UsePhi->replaceAllUsesWith(Trunc);
|
||||
DeadInsts.emplace_back(UsePhi);
|
||||
|
@ -1284,7 +1284,7 @@ PHINode *WidenIV::createWideIV(SCEVExpander &Rewriter) {
|
|||
// either find an existing phi or materialize a new one. Either way, we
|
||||
// expect a well-formed cyclic phi-with-increments. i.e. any operand not part
|
||||
// of the phi-SCC dominates the loop entry.
|
||||
Instruction *InsertPt = L->getHeader()->begin();
|
||||
Instruction *InsertPt = &L->getHeader()->front();
|
||||
WidePhi = cast<PHINode>(Rewriter.expandCodeFor(AddRec, WideType, InsertPt));
|
||||
|
||||
// Remembering the WideIV increment generated by SCEVExpander allows
|
||||
|
@ -1880,8 +1880,8 @@ void IndVarSimplify::sinkUnusedInvariants(Loop *L) {
|
|||
BasicBlock *Preheader = L->getLoopPreheader();
|
||||
if (!Preheader) return;
|
||||
|
||||
Instruction *InsertPt = ExitBlock->getFirstInsertionPt();
|
||||
BasicBlock::iterator I = Preheader->getTerminator();
|
||||
Instruction *InsertPt = &*ExitBlock->getFirstInsertionPt();
|
||||
BasicBlock::iterator I(Preheader->getTerminator());
|
||||
while (I != Preheader->begin()) {
|
||||
--I;
|
||||
// New instructions were inserted at the end of the preheader.
|
||||
|
@ -1934,7 +1934,7 @@ void IndVarSimplify::sinkUnusedInvariants(Loop *L) {
|
|||
continue;
|
||||
|
||||
// Otherwise, sink it to the exit block.
|
||||
Instruction *ToMove = I;
|
||||
Instruction *ToMove = &*I;
|
||||
bool Done = false;
|
||||
|
||||
if (I != Preheader->begin()) {
|
||||
|
|
|
@ -1051,9 +1051,9 @@ LoopConstrainer::RewrittenRangeInfo LoopConstrainer::changeIterationSpaceEnd(
|
|||
|
||||
auto BBInsertLocation = std::next(Function::iterator(LS.Latch));
|
||||
RRI.ExitSelector = BasicBlock::Create(Ctx, Twine(LS.Tag) + ".exit.selector",
|
||||
&F, BBInsertLocation);
|
||||
&F, &*BBInsertLocation);
|
||||
RRI.PseudoExit = BasicBlock::Create(Ctx, Twine(LS.Tag) + ".pseudo.exit", &F,
|
||||
BBInsertLocation);
|
||||
&*BBInsertLocation);
|
||||
|
||||
BranchInst *PreheaderJump = cast<BranchInst>(&*Preheader->rbegin());
|
||||
bool Increasing = LS.IndVarIncreasing;
|
||||
|
|
|
@ -178,7 +178,7 @@ bool JumpThreading::runOnFunction(Function &F) {
|
|||
do {
|
||||
Changed = false;
|
||||
for (Function::iterator I = F.begin(), E = F.end(); I != E;) {
|
||||
BasicBlock *BB = I;
|
||||
BasicBlock *BB = &*I;
|
||||
// Thread all of the branches we can over this block.
|
||||
while (ProcessBlock(BB))
|
||||
Changed = true;
|
||||
|
@ -241,7 +241,7 @@ bool JumpThreading::runOnFunction(Function &F) {
|
|||
static unsigned getJumpThreadDuplicationCost(const BasicBlock *BB,
|
||||
unsigned Threshold) {
|
||||
/// Ignore PHI nodes, these will be flattened when duplication happens.
|
||||
BasicBlock::const_iterator I = BB->getFirstNonPHI();
|
||||
BasicBlock::const_iterator I(BB->getFirstNonPHI());
|
||||
|
||||
// FIXME: THREADING will delete values that are just used to compute the
|
||||
// branch, so they shouldn't count against the duplication cost.
|
||||
|
@ -874,7 +874,7 @@ bool JumpThreading::SimplifyPartiallyRedundantLoad(LoadInst *LI) {
|
|||
|
||||
// Scan a few instructions up from the load, to see if it is obviously live at
|
||||
// the entry to its block.
|
||||
BasicBlock::iterator BBIt = LI;
|
||||
BasicBlock::iterator BBIt(LI);
|
||||
|
||||
if (Value *AvailableVal =
|
||||
FindAvailableLoadedValue(LoadedPtr, LoadBB, BBIt, DefMaxInstsToScan)) {
|
||||
|
@ -1004,7 +1004,7 @@ bool JumpThreading::SimplifyPartiallyRedundantLoad(LoadInst *LI) {
|
|||
// Create a PHI node at the start of the block for the PRE'd load value.
|
||||
pred_iterator PB = pred_begin(LoadBB), PE = pred_end(LoadBB);
|
||||
PHINode *PN = PHINode::Create(LI->getType(), std::distance(PB, PE), "",
|
||||
LoadBB->begin());
|
||||
&LoadBB->front());
|
||||
PN->takeName(LI);
|
||||
PN->setDebugLoc(LI->getDebugLoc());
|
||||
|
||||
|
@ -1434,7 +1434,7 @@ bool JumpThreading::ThreadEdge(BasicBlock *BB,
|
|||
Instruction *New = BI->clone();
|
||||
New->setName(BI->getName());
|
||||
NewBB->getInstList().push_back(New);
|
||||
ValueMapping[BI] = New;
|
||||
ValueMapping[&*BI] = New;
|
||||
|
||||
// Remap operands to patch up intra-block references.
|
||||
for (unsigned i = 0, e = New->getNumOperands(); i != e; ++i)
|
||||
|
@ -1484,8 +1484,8 @@ bool JumpThreading::ThreadEdge(BasicBlock *BB,
|
|||
// its block to be uses of the appropriate PHI node etc. See ValuesInBlocks
|
||||
// with the two values we know.
|
||||
SSAUpdate.Initialize(I->getType(), I->getName());
|
||||
SSAUpdate.AddAvailableValue(BB, I);
|
||||
SSAUpdate.AddAvailableValue(NewBB, ValueMapping[I]);
|
||||
SSAUpdate.AddAvailableValue(BB, &*I);
|
||||
SSAUpdate.AddAvailableValue(NewBB, ValueMapping[&*I]);
|
||||
|
||||
while (!UsesToRename.empty())
|
||||
SSAUpdate.RewriteUse(*UsesToRename.pop_back_val());
|
||||
|
@ -1590,12 +1590,12 @@ bool JumpThreading::DuplicateCondBranchOnPHIIntoPred(BasicBlock *BB,
|
|||
if (Value *IV =
|
||||
SimplifyInstruction(New, BB->getModule()->getDataLayout())) {
|
||||
delete New;
|
||||
ValueMapping[BI] = IV;
|
||||
ValueMapping[&*BI] = IV;
|
||||
} else {
|
||||
// Otherwise, insert the new instruction into the block.
|
||||
New->setName(BI->getName());
|
||||
PredBB->getInstList().insert(OldPredBranch, New);
|
||||
ValueMapping[BI] = New;
|
||||
PredBB->getInstList().insert(OldPredBranch->getIterator(), New);
|
||||
ValueMapping[&*BI] = New;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1637,8 +1637,8 @@ bool JumpThreading::DuplicateCondBranchOnPHIIntoPred(BasicBlock *BB,
|
|||
// its block to be uses of the appropriate PHI node etc. See ValuesInBlocks
|
||||
// with the two values we know.
|
||||
SSAUpdate.Initialize(I->getType(), I->getName());
|
||||
SSAUpdate.AddAvailableValue(BB, I);
|
||||
SSAUpdate.AddAvailableValue(PredBB, ValueMapping[I]);
|
||||
SSAUpdate.AddAvailableValue(BB, &*I);
|
||||
SSAUpdate.AddAvailableValue(PredBB, ValueMapping[&*I]);
|
||||
|
||||
while (!UsesToRename.empty())
|
||||
SSAUpdate.RewriteUse(*UsesToRename.pop_back_val());
|
||||
|
|
Loading…
Reference in New Issue