diff options
author | Jeremy Morse <jeremy.morse@sony.com> | 2024-02-29 15:27:32 +0000 |
---|---|---|
committer | Jeremy Morse <jeremy.morse@sony.com> | 2024-02-29 16:39:09 +0000 |
commit | 3fda50d3915b2163a54a37b602be7783a89dd808 (patch) | |
tree | db02ee8d9c1402e6023ce3ce8b7b771c0a6634ae /llvm/lib/Transforms/Utils/Local.cpp | |
parent | 9491aecd235da9674150fe56bd0f29c3a22472c4 (diff) | |
download | llvm-3fda50d3915b2163a54a37b602be7783a89dd808.zip llvm-3fda50d3915b2163a54a37b602be7783a89dd808.tar.gz llvm-3fda50d3915b2163a54a37b602be7783a89dd808.tar.bz2 |
[NFC][RemoveDIs] Bulk update utilities to insert with iterators
As part of the RemoveDIs project we need LLVM to insert instructions using
iterators wherever possible, so that the iterators can carry a bit of
debug-info. This commit implements some of that by updating the contents of
llvm/lib/Transforms/Utils to always use iterator-versions of instruction
constructors.
There are two general flavours of update:
* Almost all call-sites just call getIterator on an instruction
* Several make use of an existing iterator (scenarios where the code is
actually significant for debug-info)
The underlying logic is that any call to getFirstInsertionPt or similar
APIs that identify the start of a block need to have that iterator passed
directly to the insertion function, without being converted to a bare
Instruction pointer along the way.
I've also switched DemotePHIToStack to take an optional iterator: it needs
to take an iterator, and having a no-insert-location behaviour appears to
be important. The constructors for ICmpInst and FCmpInst have been updated
too. They're the only instructions that take block _references_ rather than
pointers for certain calls, and a future patch is going to make use of
default-null block insertion locations.
All of this should be NFC.
Diffstat (limited to 'llvm/lib/Transforms/Utils/Local.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 075eeb5..c4a8843 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -2811,7 +2811,7 @@ unsigned llvm::changeToUnreachable(Instruction *I, bool PreserveLCSSA, if (DTU) UniqueSuccessors.insert(Successor); } - auto *UI = new UnreachableInst(I->getContext(), I); + auto *UI = new UnreachableInst(I->getContext(), I->getIterator()); UI->setDebugLoc(I->getDebugLoc()); // All instructions after this are dead. @@ -2868,7 +2868,7 @@ CallInst *llvm::changeToCall(InvokeInst *II, DomTreeUpdater *DTU) { // Follow the call by a branch to the normal destination. BasicBlock *NormalDestBB = II->getNormalDest(); - BranchInst::Create(NormalDestBB, II); + BranchInst::Create(NormalDestBB, II->getIterator()); // Update PHI nodes in the unwind destination BasicBlock *BB = II->getParent(); @@ -3048,7 +3048,7 @@ static bool markAliveBlocks(Function &F, // jump to the normal destination branch. BasicBlock *NormalDestBB = II->getNormalDest(); BasicBlock *UnwindDestBB = II->getUnwindDest(); - BranchInst::Create(NormalDestBB, II); + BranchInst::Create(NormalDestBB, II->getIterator()); UnwindDestBB->removePredecessor(II->getParent()); II->eraseFromParent(); if (DTU) @@ -3131,12 +3131,12 @@ Instruction *llvm::removeUnwindEdge(BasicBlock *BB, DomTreeUpdater *DTU) { BasicBlock *UnwindDest; if (auto *CRI = dyn_cast<CleanupReturnInst>(TI)) { - NewTI = CleanupReturnInst::Create(CRI->getCleanupPad(), nullptr, CRI); + NewTI = CleanupReturnInst::Create(CRI->getCleanupPad(), nullptr, CRI->getIterator()); UnwindDest = CRI->getUnwindDest(); } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(TI)) { auto *NewCatchSwitch = CatchSwitchInst::Create( CatchSwitch->getParentPad(), nullptr, CatchSwitch->getNumHandlers(), - CatchSwitch->getName(), CatchSwitch); + CatchSwitch->getName(), CatchSwitch->getIterator()); for (BasicBlock *PadBB : CatchSwitch->handlers()) NewCatchSwitch->addHandler(PadBB); @@ -3972,23 +3972,23 @@ bool llvm::recognizeBSwapOrBitReverseIdiom( // We may need to truncate the provider. if (DemandedTy != Provider->getType()) { auto *Trunc = - CastInst::CreateIntegerCast(Provider, DemandedTy, false, "trunc", I); + CastInst::CreateIntegerCast(Provider, DemandedTy, false, "trunc", I->getIterator()); InsertedInsts.push_back(Trunc); Provider = Trunc; } - Instruction *Result = CallInst::Create(F, Provider, "rev", I); + Instruction *Result = CallInst::Create(F, Provider, "rev", I->getIterator()); InsertedInsts.push_back(Result); if (!DemandedMask.isAllOnes()) { auto *Mask = ConstantInt::get(DemandedTy, DemandedMask); - Result = BinaryOperator::Create(Instruction::And, Result, Mask, "mask", I); + Result = BinaryOperator::Create(Instruction::And, Result, Mask, "mask", I->getIterator()); InsertedInsts.push_back(Result); } // We may need to zeroextend back to the result type. if (ITy != Result->getType()) { - auto *ExtInst = CastInst::CreateIntegerCast(Result, ITy, false, "zext", I); + auto *ExtInst = CastInst::CreateIntegerCast(Result, ITy, false, "zext", I->getIterator()); InsertedInsts.push_back(ExtInst); } |