diff options
author | Jeremy Morse <jeremy.morse@sony.com> | 2023-09-11 19:56:15 +0100 |
---|---|---|
committer | Jeremy Morse <jeremy.morse@sony.com> | 2023-09-11 20:01:19 +0100 |
commit | e54277fa109081e0f98a8cd3e0110fb89a5b7d60 (patch) | |
tree | 354eedafb831b7f4fcd617ac9591e9310cc0fa79 /llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp | |
parent | d7acc6e23f69a22969a9139d6a91e022280c2c37 (diff) | |
download | llvm-e54277fa109081e0f98a8cd3e0110fb89a5b7d60.zip llvm-e54277fa109081e0f98a8cd3e0110fb89a5b7d60.tar.gz llvm-e54277fa109081e0f98a8cd3e0110fb89a5b7d60.tar.bz2 |
[NFC][RemoveDIs] Use iterators over inst-pointers when using IRBuilder
This patch adds a two-argument SetInsertPoint method to IRBuilder that
takes a block/iterator instead of an instruction, and updates many call
sites to use it. The motivating reason for doing this is given here [0],
we'd like to pass around more information about the position of debug-info
in the iterator object. That necessitates passing iterators around most of
the time.
[0] https://discourse.llvm.org/t/rfc-instruction-api-changes-needed-to-eliminate-debug-intrinsics-from-ir/68939
Differential Revision: https://reviews.llvm.org/D152468
Diffstat (limited to 'llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp index d861216..d0b023d 100644 --- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp +++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp @@ -1014,8 +1014,8 @@ SCEVExpander::getAddRecExprPHILiterally(const SCEVAddRecExpr *Normalized, if (useSubtract) Step = SE.getNegativeSCEV(Step); // Expand the step somewhere that dominates the loop header. - Value *StepV = expandCodeForImpl( - Step, IntTy, &*L->getHeader()->getFirstInsertionPt()); + Value *StepV = + expandCodeForImpl(Step, IntTy, L->getHeader()->getFirstInsertionPt()); // The no-wrap behavior proved by IsIncrement(NUW|NSW) is only applicable if // we actually do emit an addition. It does not apply if we emit a @@ -1173,8 +1173,8 @@ Value *SCEVExpander::expandAddRecExprLiterally(const SCEVAddRecExpr *S) { { // Expand the step somewhere that dominates the loop header. SCEVInsertPointGuard Guard(Builder, this); - StepV = expandCodeForImpl( - Step, IntTy, &*L->getHeader()->getFirstInsertionPt()); + StepV = expandCodeForImpl(Step, IntTy, + L->getHeader()->getFirstInsertionPt()); } Result = expandIVInc(PN, StepV, L, ExpandTy, IntTy, useSubtract); } @@ -1260,7 +1260,7 @@ Value *SCEVExpander::visitAddRecExpr(const SCEVAddRecExpr *S) { BasicBlock::iterator NewInsertPt = findInsertPointAfter(cast<Instruction>(V), &*Builder.GetInsertPoint()); V = expandCodeForImpl(SE.getTruncateExpr(SE.getUnknown(V), Ty), nullptr, - &*NewInsertPt); + NewInsertPt); return V; } @@ -1440,7 +1440,7 @@ Value *SCEVExpander::visitVScale(const SCEVVScale *S) { } Value *SCEVExpander::expandCodeForImpl(const SCEV *SH, Type *Ty, - Instruction *IP) { + BasicBlock::iterator IP) { setInsertPoint(IP); Value *V = expandCodeForImpl(SH, Ty); return V; @@ -1556,7 +1556,7 @@ Value *SCEVExpander::FindValueInExprValueMap( Value *SCEVExpander::expand(const SCEV *S) { // Compute an insertion point for this SCEV object. Hoist the instructions // as far out in the loop nest as possible. - Instruction *InsertPt = &*Builder.GetInsertPoint(); + BasicBlock::iterator InsertPt = Builder.GetInsertPoint(); // We can move insertion point only if there is no div or rem operations // otherwise we are risky to move it over the check for zero denominator. @@ -1580,24 +1580,25 @@ Value *SCEVExpander::expand(const SCEV *S) { L = L->getParentLoop()) { if (SE.isLoopInvariant(S, L)) { if (!L) break; - if (BasicBlock *Preheader = L->getLoopPreheader()) - InsertPt = Preheader->getTerminator(); - else + if (BasicBlock *Preheader = L->getLoopPreheader()) { + InsertPt = Preheader->getTerminator()->getIterator(); + } else { // LSR sets the insertion point for AddRec start/step values to the // block start to simplify value reuse, even though it's an invalid // position. SCEVExpander must correct for this in all cases. - InsertPt = &*L->getHeader()->getFirstInsertionPt(); + InsertPt = L->getHeader()->getFirstInsertionPt(); + } } else { // If the SCEV is computable at this level, insert it into the header // after the PHIs (and after any other instructions that we've inserted // there) so that it is guaranteed to dominate any user inside the loop. if (L && SE.hasComputableLoopEvolution(S, L) && !PostIncLoops.count(L)) - InsertPt = &*L->getHeader()->getFirstInsertionPt(); + InsertPt = L->getHeader()->getFirstInsertionPt(); - while (InsertPt->getIterator() != Builder.GetInsertPoint() && - (isInsertedInstruction(InsertPt) || - isa<DbgInfoIntrinsic>(InsertPt))) { - InsertPt = &*std::next(InsertPt->getIterator()); + while (InsertPt != Builder.GetInsertPoint() && + (isInsertedInstruction(&*InsertPt) || + isa<DbgInfoIntrinsic>(&*InsertPt))) { + InsertPt = std::next(InsertPt); } break; } @@ -1605,16 +1606,16 @@ Value *SCEVExpander::expand(const SCEV *S) { } // Check to see if we already expanded this here. - auto I = InsertedExpressions.find(std::make_pair(S, InsertPt)); + auto I = InsertedExpressions.find(std::make_pair(S, &*InsertPt)); if (I != InsertedExpressions.end()) return I->second; SCEVInsertPointGuard Guard(Builder, this); - Builder.SetInsertPoint(InsertPt); + Builder.SetInsertPoint(InsertPt->getParent(), InsertPt); // Expand the expression into instructions. SmallVector<Instruction *> DropPoisonGeneratingInsts; - Value *V = FindValueInExprValueMap(S, InsertPt, DropPoisonGeneratingInsts); + Value *V = FindValueInExprValueMap(S, &*InsertPt, DropPoisonGeneratingInsts); if (!V) { V = visit(S); V = fixupLCSSAFormFor(V); @@ -1628,7 +1629,7 @@ Value *SCEVExpander::expand(const SCEV *S) { // the expression at this insertion point. If the mapped value happened to be // a postinc expansion, it could be reused by a non-postinc user, but only if // its insertion point was already at the head of the loop. - InsertedExpressions[std::make_pair(S, InsertPt)] = V; + InsertedExpressions[std::make_pair(S, &*InsertPt)] = V; return V; } @@ -1765,13 +1766,13 @@ SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT, << *IsomorphicInc << '\n'); Value *NewInc = OrigInc; if (OrigInc->getType() != IsomorphicInc->getType()) { - Instruction *IP = nullptr; + BasicBlock::iterator IP; if (PHINode *PN = dyn_cast<PHINode>(OrigInc)) - IP = &*PN->getParent()->getFirstInsertionPt(); + IP = PN->getParent()->getFirstInsertionPt(); else - IP = OrigInc->getNextNode(); + IP = OrigInc->getNextNonDebugInstruction()->getIterator(); - IRBuilder<> Builder(IP); + IRBuilder<> Builder(IP->getParent(), IP); Builder.SetCurrentDebugLocation(IsomorphicInc->getDebugLoc()); NewInc = Builder.CreateTruncOrBitCast( OrigInc, IsomorphicInc->getType(), IVName); @@ -1789,7 +1790,8 @@ SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT, ++NumElim; Value *NewIV = OrigPhiRef; if (OrigPhiRef->getType() != Phi->getType()) { - IRBuilder<> Builder(&*L->getHeader()->getFirstInsertionPt()); + IRBuilder<> Builder(L->getHeader(), + L->getHeader()->getFirstInsertionPt()); Builder.SetCurrentDebugLocation(Phi->getDebugLoc()); NewIV = Builder.CreateTruncOrBitCast(OrigPhiRef, Phi->getType(), IVName); } |