[clang] [llvm] [polly] [NFC][DebugInfo] Use iterator moveBefore at many call-sites (PR #123583)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 20 02:51:33 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Jeremy Morse (jmorse)
<details>
<summary>Changes</summary>
As part of the "RemoveDIs" project, BasicBlock::iterator now carries a debug-info bit that's needed when getFirstNonPHI and similar feed into instruction insertion positions. Call-sites where that's necessary were updated a year ago; but to ensure some type safety however, we'd like to have all calls to moveBefore use iterators.
This patch adds a (guaranteed dereferenceable) iterator-taking moveBefore, and changes a bunch of call-sites where it's obviously safe to change to use it by just calling getIterator() on an instruction pointer. A follow-up patch will contain less-obviously-safe changes.
We'll eventually deprecate and remove the instruction-pointer insertBefore, but not before adding concise documentation of what considerations are needed (very few).
---
Patch is 99.86 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/123583.diff
89 Files Affected:
- (modified) clang/lib/CodeGen/CGCoroutine.cpp (+1-1)
- (modified) clang/lib/CodeGen/CGException.cpp (+1-1)
- (modified) clang/lib/CodeGen/CGOpenMPRuntime.cpp (+1-1)
- (modified) llvm/include/llvm/IR/BasicBlock.h (+1)
- (modified) llvm/include/llvm/IR/DebugProgramInstruction.h (+8)
- (modified) llvm/include/llvm/IR/Instruction.h (+20-3)
- (modified) llvm/lib/Analysis/LoopInfo.cpp (+1-1)
- (modified) llvm/lib/CodeGen/CodeGenPrepare.cpp (+16-16)
- (modified) llvm/lib/CodeGen/SelectOptimize.cpp (+4-4)
- (modified) llvm/lib/CodeGen/SjLjEHPrepare.cpp (+2-2)
- (modified) llvm/lib/CodeGen/StackColoring.cpp (+3-2)
- (modified) llvm/lib/CodeGen/TypePromotion.cpp (+7-7)
- (modified) llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp (+2-2)
- (modified) llvm/lib/FuzzMutate/IRMutator.cpp (+1-1)
- (modified) llvm/lib/IR/DIBuilder.cpp (+1-1)
- (modified) llvm/lib/IR/DebugProgramInstruction.cpp (+33-2)
- (modified) llvm/lib/IR/Instruction.cpp (+14)
- (modified) llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp (+3-3)
- (modified) llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp (+1-1)
- (modified) llvm/lib/Target/ARM/ARMParallelDSP.cpp (+1-1)
- (modified) llvm/lib/Target/BPF/BPFASpaceCastSimplifyPass.cpp (+1-1)
- (modified) llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp (+4-4)
- (modified) llvm/lib/Target/BPF/BPFAdjustOpt.cpp (+1-1)
- (modified) llvm/lib/Target/BPF/BPFCheckAndAdjustIR.cpp (+6-6)
- (modified) llvm/lib/Target/BPF/BPFPreserveStaticOffset.cpp (+2-2)
- (modified) llvm/lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp (+1-1)
- (modified) llvm/lib/Target/NVPTX/NVPTXAllocaHoisting.cpp (+1-1)
- (modified) llvm/lib/Target/NVPTX/NVPTXLowerAlloca.cpp (+2-2)
- (modified) llvm/lib/Target/X86/X86LowerAMXType.cpp (+2-2)
- (modified) llvm/lib/Transforms/Coroutines/CoroFrame.cpp (+2-2)
- (modified) llvm/lib/Transforms/Coroutines/SpillUtils.cpp (+1-1)
- (modified) llvm/lib/Transforms/IPO/AttributorAttributes.cpp (+3-3)
- (modified) llvm/lib/Transforms/IPO/OpenMPOpt.cpp (+2-2)
- (modified) llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp (+3-3)
- (modified) llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp (+1-1)
- (modified) llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp (+1-1)
- (modified) llvm/lib/Transforms/InstCombine/InstructionCombining.cpp (+2-2)
- (modified) llvm/lib/Transforms/Instrumentation/ControlHeightReduction.cpp (+1-1)
- (modified) llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp (+3-3)
- (modified) llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/ConstantHoisting.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/ConstraintElimination.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/DivRemPairs.cpp (+6-6)
- (modified) llvm/lib/Transforms/Scalar/GVN.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/GVNHoist.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp (+3-3)
- (modified) llvm/lib/Transforms/Scalar/LICM.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/LoopFuse.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/LoopInterchange.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/LoopSink.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp (+3-3)
- (modified) llvm/lib/Transforms/Scalar/NewGVN.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/Reassociate.cpp (+2-2)
- (modified) llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/Sink.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/SpeculativeExecution.cpp (+1-1)
- (modified) llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp (+3-3)
- (modified) llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/BasicBlockUtils.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/CallPromotionUtils.cpp (+7-7)
- (modified) llvm/lib/Transforms/Utils/CloneFunction.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/CodeExtractor.cpp (+4-4)
- (modified) llvm/lib/Transforms/Utils/CodeMoverUtils.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/GuardUtils.cpp (+2-2)
- (modified) llvm/lib/Transforms/Utils/Instrumentation.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/Local.cpp (+5-5)
- (modified) llvm/lib/Transforms/Utils/LoopRotationUtils.cpp (+2-2)
- (modified) llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp (+2-2)
- (modified) llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp (+1-1)
- (modified) llvm/lib/Transforms/Utils/SimplifyCFG.cpp (+3-3)
- (modified) llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp (+1-1)
- (modified) llvm/lib/Transforms/Vectorize/LoopVectorize.cpp (+5-3)
- (modified) llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp (+3-3)
- (modified) llvm/lib/Transforms/Vectorize/VPlan.cpp (+1-1)
- (modified) llvm/tools/llvm-stress/llvm-stress.cpp (+1-1)
- (modified) llvm/unittests/Analysis/AssumeBundleQueriesTest.cpp (+12-12)
- (modified) llvm/unittests/Analysis/CGSCCPassManagerTest.cpp (+1-1)
- (modified) llvm/unittests/Analysis/MemorySSATest.cpp (+6-6)
- (modified) llvm/unittests/IR/BasicBlockDbgInfoTest.cpp (+3-3)
- (modified) llvm/unittests/IR/BasicBlockTest.cpp (+1-1)
- (modified) llvm/unittests/IR/LegacyPassManagerTest.cpp (+1-1)
- (modified) llvm/unittests/IR/VerifierTest.cpp (+5-5)
- (modified) polly/lib/CodeGen/BlockGenerators.cpp (+2-2)
- (modified) polly/lib/Support/ScopHelper.cpp (+1-1)
``````````diff
diff --git a/clang/lib/CodeGen/CGCoroutine.cpp b/clang/lib/CodeGen/CGCoroutine.cpp
index 0c09ff96f9d6b3..9abf2e8c9190d9 100644
--- a/clang/lib/CodeGen/CGCoroutine.cpp
+++ b/clang/lib/CodeGen/CGCoroutine.cpp
@@ -626,7 +626,7 @@ struct CallCoroDelete final : public EHScopeStack::Cleanup {
// Get back to the block we were originally and move coro.free there.
auto *InsertPt = SaveInsertBlock->getTerminator();
- CoroFree->moveBefore(InsertPt);
+ CoroFree->moveBefore(InsertPt->getIterator());
CGF.Builder.SetInsertPoint(InsertPt);
// Add if (auto *mem = coro.free) Deallocate;
diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp
index e7dd5fb01ebede..5dc1686e7914c1 100644
--- a/clang/lib/CodeGen/CGException.cpp
+++ b/clang/lib/CodeGen/CGException.cpp
@@ -1858,7 +1858,7 @@ Address CodeGenFunction::recoverAddrOfEscapedLocal(CodeGenFunction &ParentCGF,
"expected alloca or localrecover in parent LocalDeclMap");
RecoverCall = cast<llvm::CallInst>(ParentRecover->clone());
RecoverCall->setArgOperand(1, ParentFP);
- RecoverCall->insertBefore(AllocaInsertPt);
+ RecoverCall->insertBefore(AllocaInsertPt->getIterator());
}
// Bitcast the variable, rename it, and insert it in the local decl map.
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index ddcb04d53661d0..0a089aaa1d3ce7 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -1332,7 +1332,7 @@ void CGOpenMPRuntime::setLocThreadIdInsertPt(CodeGenFunction &CGF,
CGF.Builder.GetInsertBlock());
} else {
Elem.ServiceInsertPt = new llvm::BitCastInst(Undef, CGF.Int32Ty, "svcpt");
- Elem.ServiceInsertPt->insertAfter(CGF.AllocaInsertPt);
+ Elem.ServiceInsertPt->insertAfter(CGF.AllocaInsertPt->getIterator());
}
}
diff --git a/llvm/include/llvm/IR/BasicBlock.h b/llvm/include/llvm/IR/BasicBlock.h
index c7913e60cea083..f85b221a211b91 100644
--- a/llvm/include/llvm/IR/BasicBlock.h
+++ b/llvm/include/llvm/IR/BasicBlock.h
@@ -194,6 +194,7 @@ class BasicBlock final : public Value, // Basic blocks are data objects also
// debug-info attachments.
friend void Instruction::insertBefore(BasicBlock::iterator InsertPos);
friend void Instruction::insertAfter(Instruction *InsertPos);
+ friend void Instruction::insertAfter(BasicBlock::iterator InsertPos);
friend void Instruction::insertBefore(BasicBlock &BB,
InstListType::iterator InsertPos);
friend void Instruction::moveBeforeImpl(BasicBlock &BB,
diff --git a/llvm/include/llvm/IR/DebugProgramInstruction.h b/llvm/include/llvm/IR/DebugProgramInstruction.h
index e979d8840cbaf8..37db7894d173dd 100644
--- a/llvm/include/llvm/IR/DebugProgramInstruction.h
+++ b/llvm/include/llvm/IR/DebugProgramInstruction.h
@@ -192,11 +192,19 @@ class DbgRecord : public ilist_node<DbgRecord> {
DbgRecord *getNextNode() { return &*std::next(getIterator()); }
DbgRecord *getPrevNode() { return &*std::prev(getIterator()); }
+
+ // Some generic lambdas supporting intrinsic-based debug-info mean we need
+ // to support both iterator and instruction position based insertion.
void insertBefore(DbgRecord *InsertBefore);
void insertAfter(DbgRecord *InsertAfter);
void moveBefore(DbgRecord *MoveBefore);
void moveAfter(DbgRecord *MoveAfter);
+ void insertBefore(self_iterator InsertBefore);
+ void insertAfter(self_iterator InsertAfter);
+ void moveBefore(self_iterator MoveBefore);
+ void moveAfter(self_iterator MoveAfter);
+
DebugLoc getDebugLoc() const { return DbgLoc; }
void setDebugLoc(DebugLoc Loc) { DbgLoc = std::move(Loc); }
diff --git a/llvm/include/llvm/IR/Instruction.h b/llvm/include/llvm/IR/Instruction.h
index aa480aa8d98636..6cdd79ce16005c 100644
--- a/llvm/include/llvm/IR/Instruction.h
+++ b/llvm/include/llvm/IR/Instruction.h
@@ -207,12 +207,19 @@ class Instruction : public User,
/// Insert an unlinked instruction into a basic block immediately before
/// the specified instruction.
void insertBefore(Instruction *InsertPos);
+
+ /// Insert an unlinked instruction into a basic block immediately before
+ /// the specified position.
void insertBefore(InstListType::iterator InsertPos);
/// Insert an unlinked instruction into a basic block immediately after the
/// specified instruction.
void insertAfter(Instruction *InsertPos);
+ /// Insert an unlinked instruction into a basic block immediately after the
+ /// specified position.
+ void insertAfter(InstListType::iterator InsertPos);
+
/// Inserts an unlinked instruction into \p ParentBB at position \p It and
/// returns the iterator of the inserted instruction.
InstListType::iterator insertInto(BasicBlock *ParentBB,
@@ -224,11 +231,15 @@ class Instruction : public User,
/// the basic block that MovePos lives in, right before MovePos.
void moveBefore(Instruction *MovePos);
+ /// Unlink this instruction from its current basic block and insert it into
+ /// the basic block that MovePos lives in, right before MovePos.
+ void moveBefore(InstListType::iterator InsertPos);
+
/// Perform a \ref moveBefore operation, while signalling that the caller
/// intends to preserve the original ordering of instructions. This implicitly
/// means that any adjacent debug-info should move with this instruction.
- /// This method is currently a no-op placeholder, but it will become meaningful
- /// when the "RemoveDIs" project is enabled.
+ /// This method is currently a no-op placeholder, but it will become
+ /// meaningful when the "RemoveDIs" project is enabled.
void moveBeforePreserving(Instruction *MovePos);
private:
@@ -242,13 +253,19 @@ class Instruction : public User,
/// \pre I is a valid iterator into BB.
void moveBefore(BasicBlock &BB, InstListType::iterator I);
- /// (See other overload for moveBeforePreserving).
void moveBeforePreserving(BasicBlock &BB, InstListType::iterator I);
+ /// Unlink this instruction from its current basic block and insert it into
+ /// the basic block that MovePos lives in, right before MovePos.
+ void moveBeforePreserving(InstListType::iterator I);
/// Unlink this instruction from its current basic block and insert it into
/// the basic block that MovePos lives in, right after MovePos.
void moveAfter(Instruction *MovePos);
+ /// Unlink this instruction from its current basic block and insert it into
+ /// the basic block that MovePos lives in, right after MovePos.
+ void moveAfter(InstListType::iterator MovePos);
+
/// See \ref moveBeforePreserving .
void moveAfterPreserving(Instruction *MovePos);
diff --git a/llvm/lib/Analysis/LoopInfo.cpp b/llvm/lib/Analysis/LoopInfo.cpp
index 7bd5e1e0cfac8f..0eaf1dca59675b 100644
--- a/llvm/lib/Analysis/LoopInfo.cpp
+++ b/llvm/lib/Analysis/LoopInfo.cpp
@@ -103,7 +103,7 @@ bool Loop::makeLoopInvariant(Instruction *I, bool &Changed,
return false;
// Hoist.
- I->moveBefore(InsertPt);
+ I->moveBefore(InsertPt->getIterator());
if (MSSAU)
if (auto *MUD = MSSAU->getMemorySSA()->getMemoryAccess(I))
MSSAU->moveToPlace(MUD, InsertPt->getParent(),
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index 7106e53bd5516f..7e9d705a7bef6c 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -1264,7 +1264,7 @@ simplifyRelocatesOffABase(GCRelocateInst *RelocatedBase,
if (auto *RI = dyn_cast<GCRelocateInst>(R))
if (RI->getStatepoint() == RelocatedBase->getStatepoint())
if (RI->getBasePtrIndex() == RelocatedBase->getBasePtrIndex()) {
- RelocatedBase->moveBefore(RI);
+ RelocatedBase->moveBefore(RI->getIterator());
MadeChange = true;
break;
}
@@ -2690,7 +2690,7 @@ bool CodeGenPrepare::optimizeCallInst(CallInst *CI, ModifyDT &ModifiedDT) {
ExtVal->getParent() == CI->getParent())
return false;
// Sink a zext feeding stlxr/stxr before it, so it can be folded into it.
- ExtVal->moveBefore(CI);
+ ExtVal->moveBefore(CI->getIterator());
// Mark this instruction as "inserted by CGP", so that other
// optimizations don't touch it.
InsertedInsts.insert(ExtVal);
@@ -3036,7 +3036,7 @@ bool CodeGenPrepare::dupRetToEnableTailCallOpts(BasicBlock *BB,
for (auto *CI : CallInsts) {
for (auto const *FakeUse : FakeUses) {
auto *ClonedInst = FakeUse->clone();
- ClonedInst->insertBefore(CI);
+ ClonedInst->insertBefore(CI->getIterator());
}
}
BB->eraseFromParent();
@@ -7552,9 +7552,9 @@ bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI) {
// Sink expensive instructions into the conditional blocks to avoid executing
// them speculatively.
for (Instruction *I : TrueInstrs)
- I->moveBefore(TrueBranch);
+ I->moveBefore(TrueBranch->getIterator());
for (Instruction *I : FalseInstrs)
- I->moveBefore(FalseBranch);
+ I->moveBefore(FalseBranch->getIterator());
// If we did not create a new block for one of the 'true' or 'false' paths
// of the condition, it means that side of the branch goes to the end block
@@ -7682,7 +7682,7 @@ bool CodeGenPrepare::tryToSinkFreeOperands(Instruction *I) {
NewInstructions[UI] = NI;
MaybeDead.insert(UI);
LLVM_DEBUG(dbgs() << "Sinking " << *UI << " to user " << *I << "\n");
- NI->insertBefore(InsertPoint);
+ NI->insertBefore(InsertPoint->getIterator());
InsertPoint = NI;
InsertedInsts.insert(NI);
@@ -7744,7 +7744,7 @@ bool CodeGenPrepare::optimizeSwitchType(SwitchInst *SI) {
}
auto *ExtInst = CastInst::Create(ExtType, Cond, NewType);
- ExtInst->insertBefore(SI);
+ ExtInst->insertBefore(SI->getIterator());
ExtInst->setDebugLoc(SI->getDebugLoc());
SI->setCondition(ExtInst);
for (auto Case : SI->cases()) {
@@ -8556,7 +8556,7 @@ static bool optimizeBranch(BranchInst *Branch, const TargetLowering &TLI,
match(UI, m_Shr(m_Specific(X), m_SpecificInt(CmpC.logBase2())))) {
IRBuilder<> Builder(Branch);
if (UI->getParent() != Branch->getParent())
- UI->moveBefore(Branch);
+ UI->moveBefore(Branch->getIterator());
UI->dropPoisonGeneratingFlags();
Value *NewCmp = Builder.CreateCmp(ICmpInst::ICMP_EQ, UI,
ConstantInt::get(UI->getType(), 0));
@@ -8570,7 +8570,7 @@ static bool optimizeBranch(BranchInst *Branch, const TargetLowering &TLI,
match(UI, m_Sub(m_Specific(X), m_SpecificInt(CmpC))))) {
IRBuilder<> Builder(Branch);
if (UI->getParent() != Branch->getParent())
- UI->moveBefore(Branch);
+ UI->moveBefore(Branch->getIterator());
UI->dropPoisonGeneratingFlags();
Value *NewCmp = Builder.CreateCmp(Cmp->getPredicate(), UI,
ConstantInt::get(UI->getType(), 0));
@@ -8890,21 +8890,21 @@ bool CodeGenPrepare::fixupDbgVariableRecord(DbgVariableRecord &DVR) {
return AnyChange;
}
-static void DbgInserterHelper(DbgValueInst *DVI, Instruction *VI) {
+static void DbgInserterHelper(DbgValueInst *DVI, BasicBlock::iterator VI) {
DVI->removeFromParent();
if (isa<PHINode>(VI))
- DVI->insertBefore(&*VI->getParent()->getFirstInsertionPt());
+ DVI->insertBefore(VI->getParent()->getFirstInsertionPt());
else
DVI->insertAfter(VI);
}
-static void DbgInserterHelper(DbgVariableRecord *DVR, Instruction *VI) {
+static void DbgInserterHelper(DbgVariableRecord *DVR, BasicBlock::iterator VI) {
DVR->removeFromParent();
BasicBlock *VIBB = VI->getParent();
if (isa<PHINode>(VI))
VIBB->insertDbgRecordBefore(DVR, VIBB->getFirstInsertionPt());
else
- VIBB->insertDbgRecordAfter(DVR, VI);
+ VIBB->insertDbgRecordAfter(DVR, &*VI);
}
// A llvm.dbg.value may be using a value before its definition, due to
@@ -8954,7 +8954,7 @@ bool CodeGenPrepare::placeDbgValues(Function &F) {
LLVM_DEBUG(dbgs() << "Moving Debug Value before :\n"
<< *DbgItem << ' ' << *VI);
- DbgInserterHelper(DbgItem, VI);
+ DbgInserterHelper(DbgItem, VI->getIterator());
MadeChange = true;
++NumDbgValueMoved;
}
@@ -8997,7 +8997,7 @@ bool CodeGenPrepare::placePseudoProbes(Function &F) {
I++;
while (I != Block.end()) {
if (auto *II = dyn_cast<PseudoProbeInst>(I++)) {
- II->moveBefore(&*FirstInst);
+ II->moveBefore(FirstInst);
MadeChange = true;
}
}
@@ -9105,7 +9105,7 @@ bool CodeGenPrepare::splitBranchCondition(Function &F, ModifyDT &ModifiedDT) {
auto *Br2 = IRBuilder<>(TmpBB).CreateCondBr(Cond2, TBB, FBB);
if (auto *I = dyn_cast<Instruction>(Cond2)) {
I->removeFromParent();
- I->insertBefore(Br2);
+ I->insertBefore(Br2->getIterator());
}
// Update PHI nodes in both successors. The original BB needs to be
diff --git a/llvm/lib/CodeGen/SelectOptimize.cpp b/llvm/lib/CodeGen/SelectOptimize.cpp
index bfc49dd354aa60..57488a90e7a4ab 100644
--- a/llvm/lib/CodeGen/SelectOptimize.cpp
+++ b/llvm/lib/CodeGen/SelectOptimize.cpp
@@ -512,7 +512,7 @@ static Value *getTrueOrFalseValue(
CBO->setOperand(OtherIdx,
isTrue ? OptSelects[IV].first : OptSelects[IV].second);
}
- CBO->insertBefore(B->getTerminator());
+ CBO->insertBefore(B->getTerminator()->getIterator());
return CBO;
}
@@ -637,7 +637,7 @@ void SelectOptimizeImpl::convertProfitableSIGroups(SelectGroups &ProfSIGroups) {
}
auto InsertionPoint = EndBlock->getFirstInsertionPt();
for (auto *DI : SinkInstrs)
- DI->moveBeforePreserving(&*InsertionPoint);
+ DI->moveBeforePreserving(InsertionPoint);
// Duplicate implementation for DbgRecords, the non-instruction debug-info
// format. Helper lambda for moving DbgRecords to the end block.
@@ -675,7 +675,7 @@ void SelectOptimizeImpl::convertProfitableSIGroups(SelectGroups &ProfSIGroups) {
TrueBranch = BranchInst::Create(EndBlock, TrueBlock);
TrueBranch->setDebugLoc(LastSI.getI()->getDebugLoc());
for (Instruction *TrueInst : TrueSlicesInterleaved)
- TrueInst->moveBefore(TrueBranch);
+ TrueInst->moveBefore(TrueBranch->getIterator());
}
if (!FalseSlicesInterleaved.empty() || HasSelectLike(ASI, false)) {
FalseBlock =
@@ -684,7 +684,7 @@ void SelectOptimizeImpl::convertProfitableSIGroups(SelectGroups &ProfSIGroups) {
FalseBranch = BranchInst::Create(EndBlock, FalseBlock);
FalseBranch->setDebugLoc(LastSI.getI()->getDebugLoc());
for (Instruction *FalseInst : FalseSlicesInterleaved)
- FalseInst->moveBefore(FalseBranch);
+ FalseInst->moveBefore(FalseBranch->getIterator());
}
// If there was nothing to sink, then arbitrarily choose the 'false' side
// for a new input value to the PHI.
diff --git a/llvm/lib/CodeGen/SjLjEHPrepare.cpp b/llvm/lib/CodeGen/SjLjEHPrepare.cpp
index 9630ba4307cd21..295475515e08ef 100644
--- a/llvm/lib/CodeGen/SjLjEHPrepare.cpp
+++ b/llvm/lib/CodeGen/SjLjEHPrepare.cpp
@@ -368,7 +368,7 @@ void SjLjEHPrepareImpl::lowerAcrossUnwindEdges(Function &F,
DemotePHIToStack(PN);
// Move the landingpad instruction back to the top of the landing pad block.
- LPI->moveBefore(&UnwindBlock->front());
+ LPI->moveBefore(UnwindBlock->begin());
}
}
@@ -478,7 +478,7 @@ bool SjLjEHPrepareImpl::setupEntryBlockAndCallSites(Function &F) {
continue;
}
Instruction *StackAddr = CallInst::Create(StackAddrFn, "sp");
- StackAddr->insertAfter(&I);
+ StackAddr->insertAfter(I.getIterator());
new StoreInst(StackAddr, StackPtr, true,
std::next(StackAddr->getIterator()));
}
diff --git a/llvm/lib/CodeGen/StackColoring.cpp b/llvm/lib/CodeGen/StackColoring.cpp
index 0305bdce26f731..b77b8dbdd6e595 100644
--- a/llvm/lib/CodeGen/StackColoring.cpp
+++ b/llvm/lib/CodeGen/StackColoring.cpp
@@ -937,7 +937,8 @@ void StackColoring::remapInstructions(DenseMap<int, int> &SlotRemap) {
// If From is before wo, its possible that there is a use of From between
// them.
if (From->comesBefore(To))
- const_cast<AllocaInst*>(To)->moveBefore(const_cast<AllocaInst*>(From));
+ const_cast<AllocaInst *>(To)->moveBefore(
+ const_cast<AllocaInst *>(From)->getIterator());
// AA might be used later for instruction scheduling, and we need it to be
// able to deduce the correct aliasing releationships between pointers
@@ -948,7 +949,7 @@ void StackColoring::remapInstructions(DenseMap<int, int> &SlotRemap) {
Instruction *Inst = const_cast<AllocaInst *>(To);
if (From->getType() != To->getType()) {
BitCastInst *Cast = new BitCastInst(Inst, From->getType());
- Cast->insertAfter(Inst);
+ Cast->insertAfter(Inst->getIterator());
Inst = Cast;
}
diff --git a/llvm/lib/CodeGen/TypePromotion.cpp b/llvm/lib/CodeGen/TypePromotion.cpp
index b29c46b0540cdc..b1f99094daa4a9 100644
--- a/llvm/lib/CodeGen/TypePromotion.cpp
+++ b/llvm/lib/CodeGen/TypePromotion.cpp
@@ -436,7 +436,7 @@ void IRPromoter::ReplaceAllUsersOfWith(Value *From, Value *To) {
void IRPromoter::ExtendSources() {
IRBuilder<> Builder{Ctx};
- auto InsertZExt = [&](Value *V, Instruction *InsertPt) {
+ auto InsertZExt = [&](Value *V, BasicBlock::iterator InsertPt) {
assert(V->getType() != ExtTy && "zext already extends to i32");
LLVM_DEBUG(dbgs() << "IR Promotion: Inserting ZExt for " << *V << "\n");
Builder.SetInsertPoint(InsertPt);
@@ -448,7 +448,7 @@ void IRPromoter::ExtendSources() {
if (isa<Argument>(V))
I->moveBefore(InsertPt);
else
- I->moveAfter(InsertPt);
+ I->moveAfter(&*InsertPt);
NewInsts.insert(I);
}
@@ -460,10 +460,10 @@ void IRPromoter::ExtendSources() {
for (auto *V : Sources) {
LLVM_DEBUG(dbgs() << " - " << *V << "\n");
if (auto *I = dyn_cast<Instruction>(V))
- InsertZExt(I, I);
+ InsertZExt(I, I->getIterator());
else if (auto *Arg = dyn_cast<Argument>(V)) {
BasicBlock &BB = Arg->getParent()->front();
- InsertZExt(Arg, &*BB.getFirstInsertionPt());
+ InsertZExt(Arg, BB.getFirstInsertionPt());
} else {
llvm_unreachable("unhandled source that needs extending");
}
@@ -552,7 +552,7 @@ void IRPromoter::TruncateSinks() {
Value *Arg = Call->getArgOperand(i);
Type *Ty = TruncTysMap[Call][i];
if (Instruction *Trunc = InsertTrunc(Arg, Ty)) {
- Trunc->moveBefore(Call);
+ Trunc->moveBefore(Call->getIterator());
Call->setArgOperand(i, Trunc);
}
}
@@ -563,7 +563,7 @@ void IRPromoter::TruncateSinks() {
if (auto *Switch = dyn_cast<SwitchInst>(I)) {
Type *Ty = TruncTysMap[Switch][0];
if (Instruction *Trunc = InsertTrunc(Switch->getCondition(), Ty)) {
- Trunc->moveBefore(Switch);
+ Trunc->moveBefore(Switch->getIterator());
Switch->setCondition(Trunc);
}
continue;
@@ -583,7 +583,7 @@ void IRPromoter::TruncateSinks() {
for (unsigned i = 0; i < I->getNumOperands(); ++i) {
Type *Ty = TruncTysMap[I][i];
if (Instruction *Trunc = InsertTrunc(I->getOperand(i), Ty)) {
- Trunc->moveBefore(I);
+ Trunc->moveBefore(I->getIterator());
I->setOperand(i, Trunc);
}
}
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 7dbf65fbf055bd..c4dc81e11d8abb 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -1488,12 +1488,12 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createParallel(
// Add additional casts to enforce pointers in zero address space
TIDAddr = new AddrSpaceCastInst(
TIDAddrAlloca, PointerType ::get(M.getContext(), 0), "tid.addr.ascast");
- TIDAddr->insertAfter(TIDAddrAlloca);
+ TIDAddr->insertAfter(TIDAddrAlloca->getIterator());
ToBeDeleted.push_back(TIDAddr);
ZeroAddr = new AddrSpaceCastInst(ZeroAddrAlloca,
PointerType ::get(M.getContext(), 0),
"zero.addr.ascast");
- ZeroAddr->insertAfter(ZeroAddrAlloca);
+ ZeroAddr->...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/123583
More information about the llvm-commits
mailing list