1 //===- BasicBlockUtils.cpp - BasicBlock Utilities --------------------------==//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This family of functions perform manipulations on basic blocks, and
10 // instructions contained within basic blocks.
12 //===----------------------------------------------------------------------===//
14 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
15 #include "llvm/ADT/ArrayRef.h"
16 #include "llvm/ADT/SmallPtrSet.h"
17 #include "llvm/ADT/SmallVector.h"
18 #include "llvm/ADT/Twine.h"
19 #include "llvm/Analysis/CFG.h"
20 #include "llvm/Analysis/DomTreeUpdater.h"
21 #include "llvm/Analysis/LoopInfo.h"
22 #include "llvm/Analysis/MemoryDependenceAnalysis.h"
23 #include "llvm/Analysis/MemorySSAUpdater.h"
24 #include "llvm/Analysis/PostDominators.h"
25 #include "llvm/IR/BasicBlock.h"
26 #include "llvm/IR/CFG.h"
27 #include "llvm/IR/Constants.h"
28 #include "llvm/IR/DebugInfoMetadata.h"
29 #include "llvm/IR/Dominators.h"
30 #include "llvm/IR/Function.h"
31 #include "llvm/IR/InstrTypes.h"
32 #include "llvm/IR/Instruction.h"
33 #include "llvm/IR/Instructions.h"
34 #include "llvm/IR/IntrinsicInst.h"
35 #include "llvm/IR/LLVMContext.h"
36 #include "llvm/IR/Type.h"
37 #include "llvm/IR/User.h"
38 #include "llvm/IR/Value.h"
39 #include "llvm/IR/ValueHandle.h"
40 #include "llvm/Support/Casting.h"
41 #include "llvm/Support/Debug.h"
42 #include "llvm/Support/raw_ostream.h"
43 #include "llvm/Transforms/Utils/Local.h"
52 #define DEBUG_TYPE "basicblock-utils"
54 void llvm::DetatchDeadBlocks(
55 ArrayRef
<BasicBlock
*> BBs
,
56 SmallVectorImpl
<DominatorTree::UpdateType
> *Updates
,
57 bool KeepOneInputPHIs
) {
58 for (auto *BB
: BBs
) {
59 // Loop through all of our successors and make sure they know that one
60 // of their predecessors is going away.
61 SmallPtrSet
<BasicBlock
*, 4> UniqueSuccessors
;
62 for (BasicBlock
*Succ
: successors(BB
)) {
63 Succ
->removePredecessor(BB
, KeepOneInputPHIs
);
64 if (Updates
&& UniqueSuccessors
.insert(Succ
).second
)
65 Updates
->push_back({DominatorTree::Delete
, BB
, Succ
});
68 // Zap all the instructions in the block.
69 while (!BB
->empty()) {
70 Instruction
&I
= BB
->back();
71 // If this instruction is used, replace uses with an arbitrary value.
72 // Because control flow can't get here, we don't care what we replace the
73 // value with. Note that since this block is unreachable, and all values
74 // contained within it must dominate their uses, that all uses will
75 // eventually be removed (they are themselves dead).
77 I
.replaceAllUsesWith(UndefValue::get(I
.getType()));
78 BB
->getInstList().pop_back();
80 new UnreachableInst(BB
->getContext(), BB
);
81 assert(BB
->getInstList().size() == 1 &&
82 isa
<UnreachableInst
>(BB
->getTerminator()) &&
83 "The successor list of BB isn't empty before "
84 "applying corresponding DTU updates.");
88 void llvm::DeleteDeadBlock(BasicBlock
*BB
, DomTreeUpdater
*DTU
,
89 bool KeepOneInputPHIs
) {
90 DeleteDeadBlocks({BB
}, DTU
, KeepOneInputPHIs
);
93 void llvm::DeleteDeadBlocks(ArrayRef
<BasicBlock
*> BBs
, DomTreeUpdater
*DTU
,
94 bool KeepOneInputPHIs
) {
96 // Make sure that all predecessors of each dead block is also dead.
97 SmallPtrSet
<BasicBlock
*, 4> Dead(BBs
.begin(), BBs
.end());
98 assert(Dead
.size() == BBs
.size() && "Duplicating blocks?");
100 for (BasicBlock
*Pred
: predecessors(BB
))
101 assert(Dead
.count(Pred
) && "All predecessors must be dead!");
104 SmallVector
<DominatorTree::UpdateType
, 4> Updates
;
105 DetatchDeadBlocks(BBs
, DTU
? &Updates
: nullptr, KeepOneInputPHIs
);
108 DTU
->applyUpdatesPermissive(Updates
);
110 for (BasicBlock
*BB
: BBs
)
114 BB
->eraseFromParent();
117 bool llvm::EliminateUnreachableBlocks(Function
&F
, DomTreeUpdater
*DTU
,
118 bool KeepOneInputPHIs
) {
119 df_iterator_default_set
<BasicBlock
*> Reachable
;
121 // Mark all reachable blocks.
122 for (BasicBlock
*BB
: depth_first_ext(&F
, Reachable
))
123 (void)BB
/* Mark all reachable blocks */;
125 // Collect all dead blocks.
126 std::vector
<BasicBlock
*> DeadBlocks
;
127 for (Function::iterator I
= F
.begin(), E
= F
.end(); I
!= E
; ++I
)
128 if (!Reachable
.count(&*I
)) {
129 BasicBlock
*BB
= &*I
;
130 DeadBlocks
.push_back(BB
);
133 // Delete the dead blocks.
134 DeleteDeadBlocks(DeadBlocks
, DTU
, KeepOneInputPHIs
);
136 return !DeadBlocks
.empty();
139 void llvm::FoldSingleEntryPHINodes(BasicBlock
*BB
,
140 MemoryDependenceResults
*MemDep
) {
141 if (!isa
<PHINode
>(BB
->begin())) return;
143 while (PHINode
*PN
= dyn_cast
<PHINode
>(BB
->begin())) {
144 if (PN
->getIncomingValue(0) != PN
)
145 PN
->replaceAllUsesWith(PN
->getIncomingValue(0));
147 PN
->replaceAllUsesWith(UndefValue::get(PN
->getType()));
150 MemDep
->removeInstruction(PN
); // Memdep updates AA itself.
152 PN
->eraseFromParent();
156 bool llvm::DeleteDeadPHIs(BasicBlock
*BB
, const TargetLibraryInfo
*TLI
) {
157 // Recursively deleting a PHI may cause multiple PHIs to be deleted
158 // or RAUW'd undef, so use an array of WeakTrackingVH for the PHIs to delete.
159 SmallVector
<WeakTrackingVH
, 8> PHIs
;
160 for (PHINode
&PN
: BB
->phis())
163 bool Changed
= false;
164 for (unsigned i
= 0, e
= PHIs
.size(); i
!= e
; ++i
)
165 if (PHINode
*PN
= dyn_cast_or_null
<PHINode
>(PHIs
[i
].operator Value
*()))
166 Changed
|= RecursivelyDeleteDeadPHINode(PN
, TLI
);
171 bool llvm::MergeBlockIntoPredecessor(BasicBlock
*BB
, DomTreeUpdater
*DTU
,
172 LoopInfo
*LI
, MemorySSAUpdater
*MSSAU
,
173 MemoryDependenceResults
*MemDep
) {
174 if (BB
->hasAddressTaken())
177 // Can't merge if there are multiple predecessors, or no predecessors.
178 BasicBlock
*PredBB
= BB
->getUniquePredecessor();
179 if (!PredBB
) return false;
181 // Don't break self-loops.
182 if (PredBB
== BB
) return false;
183 // Don't break unwinding instructions.
184 if (PredBB
->getTerminator()->isExceptionalTerminator())
187 // Can't merge if there are multiple distinct successors.
188 if (PredBB
->getUniqueSuccessor() != BB
)
191 // Can't merge if there is PHI loop.
192 for (PHINode
&PN
: BB
->phis())
193 for (Value
*IncValue
: PN
.incoming_values())
197 LLVM_DEBUG(dbgs() << "Merging: " << BB
->getName() << " into "
198 << PredBB
->getName() << "\n");
200 // Begin by getting rid of unneeded PHIs.
201 SmallVector
<AssertingVH
<Value
>, 4> IncomingValues
;
202 if (isa
<PHINode
>(BB
->front())) {
203 for (PHINode
&PN
: BB
->phis())
204 if (!isa
<PHINode
>(PN
.getIncomingValue(0)) ||
205 cast
<PHINode
>(PN
.getIncomingValue(0))->getParent() != BB
)
206 IncomingValues
.push_back(PN
.getIncomingValue(0));
207 FoldSingleEntryPHINodes(BB
, MemDep
);
210 // DTU update: Collect all the edges that exit BB.
211 // These dominator edges will be redirected from Pred.
212 std::vector
<DominatorTree::UpdateType
> Updates
;
214 Updates
.reserve(1 + (2 * succ_size(BB
)));
215 // Add insert edges first. Experimentally, for the particular case of two
216 // blocks that can be merged, with a single successor and single predecessor
217 // respectively, it is beneficial to have all insert updates first. Deleting
218 // edges first may lead to unreachable blocks, followed by inserting edges
219 // making the blocks reachable again. Such DT updates lead to high compile
220 // times. We add inserts before deletes here to reduce compile time.
221 for (auto I
= succ_begin(BB
), E
= succ_end(BB
); I
!= E
; ++I
)
222 // This successor of BB may already have PredBB as a predecessor.
223 if (llvm::find(successors(PredBB
), *I
) == succ_end(PredBB
))
224 Updates
.push_back({DominatorTree::Insert
, PredBB
, *I
});
225 for (auto I
= succ_begin(BB
), E
= succ_end(BB
); I
!= E
; ++I
)
226 Updates
.push_back({DominatorTree::Delete
, BB
, *I
});
227 Updates
.push_back({DominatorTree::Delete
, PredBB
, BB
});
231 MSSAU
->moveAllAfterMergeBlocks(BB
, PredBB
, &*(BB
->begin()));
233 // Delete the unconditional branch from the predecessor...
234 PredBB
->getInstList().pop_back();
236 // Make all PHI nodes that referred to BB now refer to Pred as their
238 BB
->replaceAllUsesWith(PredBB
);
240 // Move all definitions in the successor to the predecessor...
241 PredBB
->getInstList().splice(PredBB
->end(), BB
->getInstList());
242 new UnreachableInst(BB
->getContext(), BB
);
244 // Eliminate duplicate dbg.values describing the entry PHI node post-splice.
245 for (auto Incoming
: IncomingValues
) {
246 if (isa
<Instruction
>(*Incoming
)) {
247 SmallVector
<DbgValueInst
*, 2> DbgValues
;
248 SmallDenseSet
<std::pair
<DILocalVariable
*, DIExpression
*>, 2>
250 llvm::findDbgValues(DbgValues
, Incoming
);
251 for (auto &DVI
: DbgValues
) {
252 auto R
= DbgValueSet
.insert({DVI
->getVariable(), DVI
->getExpression()});
254 DVI
->eraseFromParent();
259 // Inherit predecessors name if it exists.
260 if (!PredBB
->hasName())
261 PredBB
->takeName(BB
);
267 MemDep
->invalidateCachedPredecessors();
269 // Finally, erase the old block and update dominator info.
271 assert(BB
->getInstList().size() == 1 &&
272 isa
<UnreachableInst
>(BB
->getTerminator()) &&
273 "The successor list of BB isn't empty before "
274 "applying corresponding DTU updates.");
275 DTU
->applyUpdatesPermissive(Updates
);
280 BB
->eraseFromParent(); // Nuke BB if DTU is nullptr.
285 void llvm::ReplaceInstWithValue(BasicBlock::InstListType
&BIL
,
286 BasicBlock::iterator
&BI
, Value
*V
) {
287 Instruction
&I
= *BI
;
288 // Replaces all of the uses of the instruction with uses of the value
289 I
.replaceAllUsesWith(V
);
291 // Make sure to propagate a name if there is one already.
292 if (I
.hasName() && !V
->hasName())
295 // Delete the unnecessary instruction now...
299 void llvm::ReplaceInstWithInst(BasicBlock::InstListType
&BIL
,
300 BasicBlock::iterator
&BI
, Instruction
*I
) {
301 assert(I
->getParent() == nullptr &&
302 "ReplaceInstWithInst: Instruction already inserted into basic block!");
304 // Copy debug location to newly added instruction, if it wasn't already set
306 if (!I
->getDebugLoc())
307 I
->setDebugLoc(BI
->getDebugLoc());
309 // Insert the new instruction into the basic block...
310 BasicBlock::iterator New
= BIL
.insert(BI
, I
);
312 // Replace all uses of the old instruction, and delete it.
313 ReplaceInstWithValue(BIL
, BI
, I
);
315 // Move BI back to point to the newly inserted instruction
319 void llvm::ReplaceInstWithInst(Instruction
*From
, Instruction
*To
) {
320 BasicBlock::iterator
BI(From
);
321 ReplaceInstWithInst(From
->getParent()->getInstList(), BI
, To
);
324 BasicBlock
*llvm::SplitEdge(BasicBlock
*BB
, BasicBlock
*Succ
, DominatorTree
*DT
,
325 LoopInfo
*LI
, MemorySSAUpdater
*MSSAU
) {
326 unsigned SuccNum
= GetSuccessorNumber(BB
, Succ
);
328 // If this is a critical edge, let SplitCriticalEdge do it.
329 Instruction
*LatchTerm
= BB
->getTerminator();
330 if (SplitCriticalEdge(
332 CriticalEdgeSplittingOptions(DT
, LI
, MSSAU
).setPreserveLCSSA()))
333 return LatchTerm
->getSuccessor(SuccNum
);
335 // If the edge isn't critical, then BB has a single successor or Succ has a
336 // single pred. Split the block.
337 if (BasicBlock
*SP
= Succ
->getSinglePredecessor()) {
338 // If the successor only has a single pred, split the top of the successor
340 assert(SP
== BB
&& "CFG broken");
342 return SplitBlock(Succ
, &Succ
->front(), DT
, LI
, MSSAU
);
345 // Otherwise, if BB has a single successor, split it at the bottom of the
347 assert(BB
->getTerminator()->getNumSuccessors() == 1 &&
348 "Should have a single succ!");
349 return SplitBlock(BB
, BB
->getTerminator(), DT
, LI
, MSSAU
);
353 llvm::SplitAllCriticalEdges(Function
&F
,
354 const CriticalEdgeSplittingOptions
&Options
) {
355 unsigned NumBroken
= 0;
356 for (BasicBlock
&BB
: F
) {
357 Instruction
*TI
= BB
.getTerminator();
358 if (TI
->getNumSuccessors() > 1 && !isa
<IndirectBrInst
>(TI
))
359 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
)
360 if (SplitCriticalEdge(TI
, i
, Options
))
366 BasicBlock
*llvm::SplitBlock(BasicBlock
*Old
, Instruction
*SplitPt
,
367 DominatorTree
*DT
, LoopInfo
*LI
,
368 MemorySSAUpdater
*MSSAU
, const Twine
&BBName
) {
369 BasicBlock::iterator SplitIt
= SplitPt
->getIterator();
370 while (isa
<PHINode
>(SplitIt
) || SplitIt
->isEHPad())
372 std::string Name
= BBName
.str();
373 BasicBlock
*New
= Old
->splitBasicBlock(
374 SplitIt
, Name
.empty() ? Old
->getName() + ".split" : Name
);
376 // The new block lives in whichever loop the old one did. This preserves
377 // LCSSA as well, because we force the split point to be after any PHI nodes.
379 if (Loop
*L
= LI
->getLoopFor(Old
))
380 L
->addBasicBlockToLoop(New
, *LI
);
383 // Old dominates New. New node dominates all other nodes dominated by Old.
384 if (DomTreeNode
*OldNode
= DT
->getNode(Old
)) {
385 std::vector
<DomTreeNode
*> Children(OldNode
->begin(), OldNode
->end());
387 DomTreeNode
*NewNode
= DT
->addNewBlock(New
, Old
);
388 for (DomTreeNode
*I
: Children
)
389 DT
->changeImmediateDominator(I
, NewNode
);
392 // Move MemoryAccesses still tracked in Old, but part of New now.
393 // Update accesses in successor blocks accordingly.
395 MSSAU
->moveAllAfterSpliceBlocks(Old
, New
, &*(New
->begin()));
400 /// Update DominatorTree, LoopInfo, and LCCSA analysis information.
401 static void UpdateAnalysisInformation(BasicBlock
*OldBB
, BasicBlock
*NewBB
,
402 ArrayRef
<BasicBlock
*> Preds
,
403 DominatorTree
*DT
, LoopInfo
*LI
,
404 MemorySSAUpdater
*MSSAU
,
405 bool PreserveLCSSA
, bool &HasLoopExit
) {
406 // Update dominator tree if available.
408 if (OldBB
== DT
->getRootNode()->getBlock()) {
409 assert(NewBB
== &NewBB
->getParent()->getEntryBlock());
410 DT
->setNewRoot(NewBB
);
412 // Split block expects NewBB to have a non-empty set of predecessors.
413 DT
->splitBlock(NewBB
);
417 // Update MemoryPhis after split if MemorySSA is available
419 MSSAU
->wireOldPredecessorsToNewImmediatePredecessor(OldBB
, NewBB
, Preds
);
421 // The rest of the logic is only relevant for updating the loop structures.
425 assert(DT
&& "DT should be available to update LoopInfo!");
426 Loop
*L
= LI
->getLoopFor(OldBB
);
428 // If we need to preserve loop analyses, collect some information about how
429 // this split will affect loops.
430 bool IsLoopEntry
= !!L
;
431 bool SplitMakesNewLoopHeader
= false;
432 for (BasicBlock
*Pred
: Preds
) {
433 // Preds that are not reachable from entry should not be used to identify if
434 // OldBB is a loop entry or if SplitMakesNewLoopHeader. Unreachable blocks
435 // are not within any loops, so we incorrectly mark SplitMakesNewLoopHeader
436 // as true and make the NewBB the header of some loop. This breaks LI.
437 if (!DT
->isReachableFromEntry(Pred
))
439 // If we need to preserve LCSSA, determine if any of the preds is a loop
442 if (Loop
*PL
= LI
->getLoopFor(Pred
))
443 if (!PL
->contains(OldBB
))
446 // If we need to preserve LoopInfo, note whether any of the preds crosses
447 // an interesting loop boundary.
450 if (L
->contains(Pred
))
453 SplitMakesNewLoopHeader
= true;
456 // Unless we have a loop for OldBB, nothing else to do here.
461 // Add the new block to the nearest enclosing loop (and not an adjacent
462 // loop). To find this, examine each of the predecessors and determine which
463 // loops enclose them, and select the most-nested loop which contains the
464 // loop containing the block being split.
465 Loop
*InnermostPredLoop
= nullptr;
466 for (BasicBlock
*Pred
: Preds
) {
467 if (Loop
*PredLoop
= LI
->getLoopFor(Pred
)) {
468 // Seek a loop which actually contains the block being split (to avoid
470 while (PredLoop
&& !PredLoop
->contains(OldBB
))
471 PredLoop
= PredLoop
->getParentLoop();
473 // Select the most-nested of these loops which contains the block.
474 if (PredLoop
&& PredLoop
->contains(OldBB
) &&
475 (!InnermostPredLoop
||
476 InnermostPredLoop
->getLoopDepth() < PredLoop
->getLoopDepth()))
477 InnermostPredLoop
= PredLoop
;
481 if (InnermostPredLoop
)
482 InnermostPredLoop
->addBasicBlockToLoop(NewBB
, *LI
);
484 L
->addBasicBlockToLoop(NewBB
, *LI
);
485 if (SplitMakesNewLoopHeader
)
486 L
->moveToHeader(NewBB
);
490 /// Update the PHI nodes in OrigBB to include the values coming from NewBB.
491 /// This also updates AliasAnalysis, if available.
492 static void UpdatePHINodes(BasicBlock
*OrigBB
, BasicBlock
*NewBB
,
493 ArrayRef
<BasicBlock
*> Preds
, BranchInst
*BI
,
495 // Otherwise, create a new PHI node in NewBB for each PHI node in OrigBB.
496 SmallPtrSet
<BasicBlock
*, 16> PredSet(Preds
.begin(), Preds
.end());
497 for (BasicBlock::iterator I
= OrigBB
->begin(); isa
<PHINode
>(I
); ) {
498 PHINode
*PN
= cast
<PHINode
>(I
++);
500 // Check to see if all of the values coming in are the same. If so, we
501 // don't need to create a new PHI node, unless it's needed for LCSSA.
502 Value
*InVal
= nullptr;
504 InVal
= PN
->getIncomingValueForBlock(Preds
[0]);
505 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
) {
506 if (!PredSet
.count(PN
->getIncomingBlock(i
)))
509 InVal
= PN
->getIncomingValue(i
);
510 else if (InVal
!= PN
->getIncomingValue(i
)) {
518 // If all incoming values for the new PHI would be the same, just don't
519 // make a new PHI. Instead, just remove the incoming values from the old
522 // NOTE! This loop walks backwards for a reason! First off, this minimizes
523 // the cost of removal if we end up removing a large number of values, and
524 // second off, this ensures that the indices for the incoming values
525 // aren't invalidated when we remove one.
526 for (int64_t i
= PN
->getNumIncomingValues() - 1; i
>= 0; --i
)
527 if (PredSet
.count(PN
->getIncomingBlock(i
)))
528 PN
->removeIncomingValue(i
, false);
530 // Add an incoming value to the PHI node in the loop for the preheader
532 PN
->addIncoming(InVal
, NewBB
);
536 // If the values coming into the block are not the same, we need a new
538 // Create the new PHI node, insert it into NewBB at the end of the block
540 PHINode::Create(PN
->getType(), Preds
.size(), PN
->getName() + ".ph", BI
);
542 // NOTE! This loop walks backwards for a reason! First off, this minimizes
543 // the cost of removal if we end up removing a large number of values, and
544 // second off, this ensures that the indices for the incoming values aren't
545 // invalidated when we remove one.
546 for (int64_t i
= PN
->getNumIncomingValues() - 1; i
>= 0; --i
) {
547 BasicBlock
*IncomingBB
= PN
->getIncomingBlock(i
);
548 if (PredSet
.count(IncomingBB
)) {
549 Value
*V
= PN
->removeIncomingValue(i
, false);
550 NewPHI
->addIncoming(V
, IncomingBB
);
554 PN
->addIncoming(NewPHI
, NewBB
);
558 BasicBlock
*llvm::SplitBlockPredecessors(BasicBlock
*BB
,
559 ArrayRef
<BasicBlock
*> Preds
,
560 const char *Suffix
, DominatorTree
*DT
,
561 LoopInfo
*LI
, MemorySSAUpdater
*MSSAU
,
562 bool PreserveLCSSA
) {
563 // Do not attempt to split that which cannot be split.
564 if (!BB
->canSplitPredecessors())
567 // For the landingpads we need to act a bit differently.
568 // Delegate this work to the SplitLandingPadPredecessors.
569 if (BB
->isLandingPad()) {
570 SmallVector
<BasicBlock
*, 2> NewBBs
;
571 std::string NewName
= std::string(Suffix
) + ".split-lp";
573 SplitLandingPadPredecessors(BB
, Preds
, Suffix
, NewName
.c_str(), NewBBs
, DT
,
574 LI
, MSSAU
, PreserveLCSSA
);
578 // Create new basic block, insert right before the original block.
579 BasicBlock
*NewBB
= BasicBlock::Create(
580 BB
->getContext(), BB
->getName() + Suffix
, BB
->getParent(), BB
);
582 // The new block unconditionally branches to the old block.
583 BranchInst
*BI
= BranchInst::Create(BB
, NewBB
);
584 // Splitting the predecessors of a loop header creates a preheader block.
585 if (LI
&& LI
->isLoopHeader(BB
))
586 // Using the loop start line number prevents debuggers stepping into the
587 // loop body for this instruction.
588 BI
->setDebugLoc(LI
->getLoopFor(BB
)->getStartLoc());
590 BI
->setDebugLoc(BB
->getFirstNonPHIOrDbg()->getDebugLoc());
592 // Move the edges from Preds to point to NewBB instead of BB.
593 for (unsigned i
= 0, e
= Preds
.size(); i
!= e
; ++i
) {
594 // This is slightly more strict than necessary; the minimum requirement
595 // is that there be no more than one indirectbr branching to BB. And
596 // all BlockAddress uses would need to be updated.
597 assert(!isa
<IndirectBrInst
>(Preds
[i
]->getTerminator()) &&
598 "Cannot split an edge from an IndirectBrInst");
599 assert(!isa
<CallBrInst
>(Preds
[i
]->getTerminator()) &&
600 "Cannot split an edge from a CallBrInst");
601 Preds
[i
]->getTerminator()->replaceUsesOfWith(BB
, NewBB
);
604 // Insert a new PHI node into NewBB for every PHI node in BB and that new PHI
605 // node becomes an incoming value for BB's phi node. However, if the Preds
606 // list is empty, we need to insert dummy entries into the PHI nodes in BB to
607 // account for the newly created predecessor.
609 // Insert dummy values as the incoming value.
610 for (BasicBlock::iterator I
= BB
->begin(); isa
<PHINode
>(I
); ++I
)
611 cast
<PHINode
>(I
)->addIncoming(UndefValue::get(I
->getType()), NewBB
);
614 // Update DominatorTree, LoopInfo, and LCCSA analysis information.
615 bool HasLoopExit
= false;
616 UpdateAnalysisInformation(BB
, NewBB
, Preds
, DT
, LI
, MSSAU
, PreserveLCSSA
,
619 if (!Preds
.empty()) {
620 // Update the PHI nodes in BB with the values coming from NewBB.
621 UpdatePHINodes(BB
, NewBB
, Preds
, BI
, HasLoopExit
);
627 void llvm::SplitLandingPadPredecessors(BasicBlock
*OrigBB
,
628 ArrayRef
<BasicBlock
*> Preds
,
629 const char *Suffix1
, const char *Suffix2
,
630 SmallVectorImpl
<BasicBlock
*> &NewBBs
,
631 DominatorTree
*DT
, LoopInfo
*LI
,
632 MemorySSAUpdater
*MSSAU
,
633 bool PreserveLCSSA
) {
634 assert(OrigBB
->isLandingPad() && "Trying to split a non-landing pad!");
636 // Create a new basic block for OrigBB's predecessors listed in Preds. Insert
637 // it right before the original block.
638 BasicBlock
*NewBB1
= BasicBlock::Create(OrigBB
->getContext(),
639 OrigBB
->getName() + Suffix1
,
640 OrigBB
->getParent(), OrigBB
);
641 NewBBs
.push_back(NewBB1
);
643 // The new block unconditionally branches to the old block.
644 BranchInst
*BI1
= BranchInst::Create(OrigBB
, NewBB1
);
645 BI1
->setDebugLoc(OrigBB
->getFirstNonPHI()->getDebugLoc());
647 // Move the edges from Preds to point to NewBB1 instead of OrigBB.
648 for (unsigned i
= 0, e
= Preds
.size(); i
!= e
; ++i
) {
649 // This is slightly more strict than necessary; the minimum requirement
650 // is that there be no more than one indirectbr branching to BB. And
651 // all BlockAddress uses would need to be updated.
652 assert(!isa
<IndirectBrInst
>(Preds
[i
]->getTerminator()) &&
653 "Cannot split an edge from an IndirectBrInst");
654 Preds
[i
]->getTerminator()->replaceUsesOfWith(OrigBB
, NewBB1
);
657 bool HasLoopExit
= false;
658 UpdateAnalysisInformation(OrigBB
, NewBB1
, Preds
, DT
, LI
, MSSAU
, PreserveLCSSA
,
661 // Update the PHI nodes in OrigBB with the values coming from NewBB1.
662 UpdatePHINodes(OrigBB
, NewBB1
, Preds
, BI1
, HasLoopExit
);
664 // Move the remaining edges from OrigBB to point to NewBB2.
665 SmallVector
<BasicBlock
*, 8> NewBB2Preds
;
666 for (pred_iterator i
= pred_begin(OrigBB
), e
= pred_end(OrigBB
);
668 BasicBlock
*Pred
= *i
++;
669 if (Pred
== NewBB1
) continue;
670 assert(!isa
<IndirectBrInst
>(Pred
->getTerminator()) &&
671 "Cannot split an edge from an IndirectBrInst");
672 NewBB2Preds
.push_back(Pred
);
673 e
= pred_end(OrigBB
);
676 BasicBlock
*NewBB2
= nullptr;
677 if (!NewBB2Preds
.empty()) {
678 // Create another basic block for the rest of OrigBB's predecessors.
679 NewBB2
= BasicBlock::Create(OrigBB
->getContext(),
680 OrigBB
->getName() + Suffix2
,
681 OrigBB
->getParent(), OrigBB
);
682 NewBBs
.push_back(NewBB2
);
684 // The new block unconditionally branches to the old block.
685 BranchInst
*BI2
= BranchInst::Create(OrigBB
, NewBB2
);
686 BI2
->setDebugLoc(OrigBB
->getFirstNonPHI()->getDebugLoc());
688 // Move the remaining edges from OrigBB to point to NewBB2.
689 for (BasicBlock
*NewBB2Pred
: NewBB2Preds
)
690 NewBB2Pred
->getTerminator()->replaceUsesOfWith(OrigBB
, NewBB2
);
692 // Update DominatorTree, LoopInfo, and LCCSA analysis information.
694 UpdateAnalysisInformation(OrigBB
, NewBB2
, NewBB2Preds
, DT
, LI
, MSSAU
,
695 PreserveLCSSA
, HasLoopExit
);
697 // Update the PHI nodes in OrigBB with the values coming from NewBB2.
698 UpdatePHINodes(OrigBB
, NewBB2
, NewBB2Preds
, BI2
, HasLoopExit
);
701 LandingPadInst
*LPad
= OrigBB
->getLandingPadInst();
702 Instruction
*Clone1
= LPad
->clone();
703 Clone1
->setName(Twine("lpad") + Suffix1
);
704 NewBB1
->getInstList().insert(NewBB1
->getFirstInsertionPt(), Clone1
);
707 Instruction
*Clone2
= LPad
->clone();
708 Clone2
->setName(Twine("lpad") + Suffix2
);
709 NewBB2
->getInstList().insert(NewBB2
->getFirstInsertionPt(), Clone2
);
711 // Create a PHI node for the two cloned landingpad instructions only
712 // if the original landingpad instruction has some uses.
713 if (!LPad
->use_empty()) {
714 assert(!LPad
->getType()->isTokenTy() &&
715 "Split cannot be applied if LPad is token type. Otherwise an "
716 "invalid PHINode of token type would be created.");
717 PHINode
*PN
= PHINode::Create(LPad
->getType(), 2, "lpad.phi", LPad
);
718 PN
->addIncoming(Clone1
, NewBB1
);
719 PN
->addIncoming(Clone2
, NewBB2
);
720 LPad
->replaceAllUsesWith(PN
);
722 LPad
->eraseFromParent();
724 // There is no second clone. Just replace the landing pad with the first
726 LPad
->replaceAllUsesWith(Clone1
);
727 LPad
->eraseFromParent();
731 ReturnInst
*llvm::FoldReturnIntoUncondBranch(ReturnInst
*RI
, BasicBlock
*BB
,
733 DomTreeUpdater
*DTU
) {
734 Instruction
*UncondBranch
= Pred
->getTerminator();
735 // Clone the return and add it to the end of the predecessor.
736 Instruction
*NewRet
= RI
->clone();
737 Pred
->getInstList().push_back(NewRet
);
739 // If the return instruction returns a value, and if the value was a
740 // PHI node in "BB", propagate the right value into the return.
741 for (User::op_iterator i
= NewRet
->op_begin(), e
= NewRet
->op_end();
744 Instruction
*NewBC
= nullptr;
745 if (BitCastInst
*BCI
= dyn_cast
<BitCastInst
>(V
)) {
746 // Return value might be bitcasted. Clone and insert it before the
747 // return instruction.
748 V
= BCI
->getOperand(0);
749 NewBC
= BCI
->clone();
750 Pred
->getInstList().insert(NewRet
->getIterator(), NewBC
);
753 if (PHINode
*PN
= dyn_cast
<PHINode
>(V
)) {
754 if (PN
->getParent() == BB
) {
756 NewBC
->setOperand(0, PN
->getIncomingValueForBlock(Pred
));
758 *i
= PN
->getIncomingValueForBlock(Pred
);
763 // Update any PHI nodes in the returning block to realize that we no
764 // longer branch to them.
765 BB
->removePredecessor(Pred
);
766 UncondBranch
->eraseFromParent();
769 DTU
->applyUpdates({{DominatorTree::Delete
, Pred
, BB
}});
771 return cast
<ReturnInst
>(NewRet
);
774 Instruction
*llvm::SplitBlockAndInsertIfThen(Value
*Cond
,
775 Instruction
*SplitBefore
,
777 MDNode
*BranchWeights
,
778 DominatorTree
*DT
, LoopInfo
*LI
,
779 BasicBlock
*ThenBlock
) {
780 BasicBlock
*Head
= SplitBefore
->getParent();
781 BasicBlock
*Tail
= Head
->splitBasicBlock(SplitBefore
->getIterator());
782 Instruction
*HeadOldTerm
= Head
->getTerminator();
783 LLVMContext
&C
= Head
->getContext();
784 Instruction
*CheckTerm
;
785 bool CreateThenBlock
= (ThenBlock
== nullptr);
786 if (CreateThenBlock
) {
787 ThenBlock
= BasicBlock::Create(C
, "", Head
->getParent(), Tail
);
789 CheckTerm
= new UnreachableInst(C
, ThenBlock
);
791 CheckTerm
= BranchInst::Create(Tail
, ThenBlock
);
792 CheckTerm
->setDebugLoc(SplitBefore
->getDebugLoc());
794 CheckTerm
= ThenBlock
->getTerminator();
795 BranchInst
*HeadNewTerm
=
796 BranchInst::Create(/*ifTrue*/ThenBlock
, /*ifFalse*/Tail
, Cond
);
797 HeadNewTerm
->setMetadata(LLVMContext::MD_prof
, BranchWeights
);
798 ReplaceInstWithInst(HeadOldTerm
, HeadNewTerm
);
801 if (DomTreeNode
*OldNode
= DT
->getNode(Head
)) {
802 std::vector
<DomTreeNode
*> Children(OldNode
->begin(), OldNode
->end());
804 DomTreeNode
*NewNode
= DT
->addNewBlock(Tail
, Head
);
805 for (DomTreeNode
*Child
: Children
)
806 DT
->changeImmediateDominator(Child
, NewNode
);
808 // Head dominates ThenBlock.
810 DT
->addNewBlock(ThenBlock
, Head
);
812 DT
->changeImmediateDominator(ThenBlock
, Head
);
817 if (Loop
*L
= LI
->getLoopFor(Head
)) {
818 L
->addBasicBlockToLoop(ThenBlock
, *LI
);
819 L
->addBasicBlockToLoop(Tail
, *LI
);
826 void llvm::SplitBlockAndInsertIfThenElse(Value
*Cond
, Instruction
*SplitBefore
,
827 Instruction
**ThenTerm
,
828 Instruction
**ElseTerm
,
829 MDNode
*BranchWeights
) {
830 BasicBlock
*Head
= SplitBefore
->getParent();
831 BasicBlock
*Tail
= Head
->splitBasicBlock(SplitBefore
->getIterator());
832 Instruction
*HeadOldTerm
= Head
->getTerminator();
833 LLVMContext
&C
= Head
->getContext();
834 BasicBlock
*ThenBlock
= BasicBlock::Create(C
, "", Head
->getParent(), Tail
);
835 BasicBlock
*ElseBlock
= BasicBlock::Create(C
, "", Head
->getParent(), Tail
);
836 *ThenTerm
= BranchInst::Create(Tail
, ThenBlock
);
837 (*ThenTerm
)->setDebugLoc(SplitBefore
->getDebugLoc());
838 *ElseTerm
= BranchInst::Create(Tail
, ElseBlock
);
839 (*ElseTerm
)->setDebugLoc(SplitBefore
->getDebugLoc());
840 BranchInst
*HeadNewTerm
=
841 BranchInst::Create(/*ifTrue*/ThenBlock
, /*ifFalse*/ElseBlock
, Cond
);
842 HeadNewTerm
->setMetadata(LLVMContext::MD_prof
, BranchWeights
);
843 ReplaceInstWithInst(HeadOldTerm
, HeadNewTerm
);
846 Value
*llvm::GetIfCondition(BasicBlock
*BB
, BasicBlock
*&IfTrue
,
847 BasicBlock
*&IfFalse
) {
848 PHINode
*SomePHI
= dyn_cast
<PHINode
>(BB
->begin());
849 BasicBlock
*Pred1
= nullptr;
850 BasicBlock
*Pred2
= nullptr;
853 if (SomePHI
->getNumIncomingValues() != 2)
855 Pred1
= SomePHI
->getIncomingBlock(0);
856 Pred2
= SomePHI
->getIncomingBlock(1);
858 pred_iterator PI
= pred_begin(BB
), PE
= pred_end(BB
);
859 if (PI
== PE
) // No predecessor
862 if (PI
== PE
) // Only one predecessor
865 if (PI
!= PE
) // More than two predecessors
869 // We can only handle branches. Other control flow will be lowered to
870 // branches if possible anyway.
871 BranchInst
*Pred1Br
= dyn_cast
<BranchInst
>(Pred1
->getTerminator());
872 BranchInst
*Pred2Br
= dyn_cast
<BranchInst
>(Pred2
->getTerminator());
873 if (!Pred1Br
|| !Pred2Br
)
876 // Eliminate code duplication by ensuring that Pred1Br is conditional if
878 if (Pred2Br
->isConditional()) {
879 // If both branches are conditional, we don't have an "if statement". In
880 // reality, we could transform this case, but since the condition will be
881 // required anyway, we stand no chance of eliminating it, so the xform is
882 // probably not profitable.
883 if (Pred1Br
->isConditional())
886 std::swap(Pred1
, Pred2
);
887 std::swap(Pred1Br
, Pred2Br
);
890 if (Pred1Br
->isConditional()) {
891 // The only thing we have to watch out for here is to make sure that Pred2
892 // doesn't have incoming edges from other blocks. If it does, the condition
893 // doesn't dominate BB.
894 if (!Pred2
->getSinglePredecessor())
897 // If we found a conditional branch predecessor, make sure that it branches
898 // to BB and Pred2Br. If it doesn't, this isn't an "if statement".
899 if (Pred1Br
->getSuccessor(0) == BB
&&
900 Pred1Br
->getSuccessor(1) == Pred2
) {
903 } else if (Pred1Br
->getSuccessor(0) == Pred2
&&
904 Pred1Br
->getSuccessor(1) == BB
) {
908 // We know that one arm of the conditional goes to BB, so the other must
909 // go somewhere unrelated, and this must not be an "if statement".
913 return Pred1Br
->getCondition();
916 // Ok, if we got here, both predecessors end with an unconditional branch to
917 // BB. Don't panic! If both blocks only have a single (identical)
918 // predecessor, and THAT is a conditional branch, then we're all ok!
919 BasicBlock
*CommonPred
= Pred1
->getSinglePredecessor();
920 if (CommonPred
== nullptr || CommonPred
!= Pred2
->getSinglePredecessor())
923 // Otherwise, if this is a conditional branch, then we can use it!
924 BranchInst
*BI
= dyn_cast
<BranchInst
>(CommonPred
->getTerminator());
925 if (!BI
) return nullptr;
927 assert(BI
->isConditional() && "Two successors but not conditional?");
928 if (BI
->getSuccessor(0) == Pred1
) {
935 return BI
->getCondition();