LLVM 23.0.0git
BasicBlockUtils.cpp
Go to the documentation of this file.
1//===- BasicBlockUtils.cpp - BasicBlock Utilities --------------------------==//
2//
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
6//
7//===----------------------------------------------------------------------===//
8//
9// This family of functions perform manipulations on basic blocks, and
10// instructions contained within basic blocks.
11//
12//===----------------------------------------------------------------------===//
13
15#include "llvm/ADT/ArrayRef.h"
18#include "llvm/ADT/Twine.h"
19#include "llvm/Analysis/CFG.h"
24#include "llvm/IR/BasicBlock.h"
25#include "llvm/IR/CFG.h"
26#include "llvm/IR/Constants.h"
27#include "llvm/IR/DebugInfo.h"
29#include "llvm/IR/Dominators.h"
30#include "llvm/IR/Function.h"
31#include "llvm/IR/IRBuilder.h"
32#include "llvm/IR/InstrTypes.h"
33#include "llvm/IR/Instruction.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"
42#include "llvm/Support/Debug.h"
45#include <cassert>
46#include <cstdint>
47#include <string>
48#include <utility>
49#include <vector>
50
51using namespace llvm;
52
53#define DEBUG_TYPE "basicblock-utils"
54
56 "max-deopt-or-unreachable-succ-check-depth", cl::init(8), cl::Hidden,
57 cl::desc("Set the maximum path length when checking whether a basic block "
58 "is followed by a block that either has a terminating "
59 "deoptimizing call or is terminated with an unreachable"));
60
61/// Zap all the instructions in the block and replace them with an unreachable
62/// instruction and notify the basic block's successors that one of their
63/// predecessors is going away.
64static void
67 bool KeepOneInputPHIs) {
68 // Loop through all of our successors and make sure they know that one
69 // of their predecessors is going away.
70 SmallPtrSet<BasicBlock *, 4> UniqueSuccessors;
71 for (BasicBlock *Succ : successors(BB)) {
72 Succ->removePredecessor(BB, KeepOneInputPHIs);
73 if (Updates && UniqueSuccessors.insert(Succ).second)
74 Updates->push_back({DominatorTree::Delete, BB, Succ});
75 }
76
77 // Zap all the instructions in the block.
78 while (!BB->empty()) {
79 Instruction &I = BB->back();
80 // If this instruction is used, replace uses with an arbitrary value.
81 // Because control flow can't get here, we don't care what we replace the
82 // value with. Note that since this block is unreachable, and all values
83 // contained within it must dominate their uses, that all uses will
84 // eventually be removed (they are themselves dead).
85 if (!I.use_empty())
86 I.replaceAllUsesWith(PoisonValue::get(I.getType()));
87 BB->back().eraseFromParent();
88 }
89 new UnreachableInst(BB->getContext(), BB);
90 assert(BB->size() == 1 && isa<UnreachableInst>(BB->getTerminator()) &&
91 "The successor list of BB isn't empty before "
92 "applying corresponding DTU updates.");
93}
94
96 for (const Instruction &I : *BB) {
98 if (CCI && (CCI->isLoop() || CCI->isEntry()))
99 return true;
100 }
101 return false;
102}
103
106 bool KeepOneInputPHIs) {
107 SmallPtrSet<BasicBlock *, 4> UniqueEHRetBlocksToDelete;
108 for (auto *BB : BBs) {
109 auto NonFirstPhiIt = BB->getFirstNonPHIIt();
110 if (NonFirstPhiIt != BB->end()) {
111 Instruction &I = *NonFirstPhiIt;
112 // Exception handling funclets need to be explicitly addressed.
113 // These funclets must begin with cleanuppad or catchpad and end with
114 // cleanupred or catchret. The return instructions can be in different
115 // basic blocks than the pad instruction. If we would only delete the
116 // first block, the we would have possible cleanupret and catchret
117 // instructions with poison arguments, which wouldn't be valid.
118 if (isa<FuncletPadInst>(I)) {
119 UniqueEHRetBlocksToDelete.clear();
120
121 for (User *User : I.users()) {
122 Instruction *ReturnInstr = dyn_cast<Instruction>(User);
123 // If we have a cleanupret or catchret block, replace it with just an
124 // unreachable. The other alternative, that may use a catchpad is a
125 // catchswitch. That does not need special handling for now.
126 if (isa<CatchReturnInst>(ReturnInstr) ||
127 isa<CleanupReturnInst>(ReturnInstr)) {
128 BasicBlock *ReturnInstrBB = ReturnInstr->getParent();
129 UniqueEHRetBlocksToDelete.insert(ReturnInstrBB);
130 }
131 }
132
133 for (BasicBlock *EHRetBB : UniqueEHRetBlocksToDelete)
134 emptyAndDetachBlock(EHRetBB, Updates, KeepOneInputPHIs);
135 }
136 }
137
138 UniqueEHRetBlocksToDelete.clear();
139
140 // Detaching and emptying the current basic block.
141 emptyAndDetachBlock(BB, Updates, KeepOneInputPHIs);
142 }
143}
144
146 bool KeepOneInputPHIs) {
147 DeleteDeadBlocks({BB}, DTU, KeepOneInputPHIs);
148}
149
151 bool KeepOneInputPHIs) {
152#ifndef NDEBUG
153 // Make sure that all predecessors of each dead block is also dead.
155 assert(Dead.size() == BBs.size() && "Duplicating blocks?");
156 for (auto *BB : Dead)
157 for (BasicBlock *Pred : predecessors(BB))
158 assert(Dead.count(Pred) && "All predecessors must be dead!");
159#endif
160
162 detachDeadBlocks(BBs, DTU ? &Updates : nullptr, KeepOneInputPHIs);
163
164 if (DTU)
165 DTU->applyUpdates(Updates);
166
167 for (BasicBlock *BB : BBs)
168 if (DTU)
169 DTU->deleteBB(BB);
170 else
171 BB->eraseFromParent();
172}
173
175 bool KeepOneInputPHIs) {
177
178 // Mark all reachable blocks.
179 for (BasicBlock *BB : depth_first_ext(&F, Reachable))
180 (void)BB/* Mark all reachable blocks */;
181
182 // Collect all dead blocks.
183 std::vector<BasicBlock*> DeadBlocks;
184 for (BasicBlock &BB : F)
185 if (!Reachable.count(&BB))
186 DeadBlocks.push_back(&BB);
187
188 // Delete the dead blocks.
189 DeleteDeadBlocks(DeadBlocks, DTU, KeepOneInputPHIs);
190
191 return !DeadBlocks.empty();
192}
193
195 MemoryDependenceResults *MemDep) {
196 if (!isa<PHINode>(BB->begin()))
197 return false;
198
199 while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) {
200 if (PN->getIncomingValue(0) != PN)
201 PN->replaceAllUsesWith(PN->getIncomingValue(0));
202 else
203 PN->replaceAllUsesWith(PoisonValue::get(PN->getType()));
204
205 if (MemDep)
206 MemDep->removeInstruction(PN); // Memdep updates AA itself.
207
208 PN->eraseFromParent();
209 }
210 return true;
211}
212
214 MemorySSAUpdater *MSSAU) {
215 // Recursively deleting a PHI may cause multiple PHIs to be deleted
216 // or RAUW'd undef, so use an array of WeakTrackingVH for the PHIs to delete.
218
219 bool Changed = false;
220 for (const auto &PHI : PHIs)
221 if (PHINode *PN = dyn_cast_or_null<PHINode>(PHI.operator Value *()))
222 Changed |= RecursivelyDeleteDeadPHINode(PN, TLI, MSSAU);
223
224 return Changed;
225}
226
228 LoopInfo *LI, MemorySSAUpdater *MSSAU,
230 bool PredecessorWithTwoSuccessors,
231 DominatorTree *DT) {
232 if (BB->hasAddressTaken())
233 return false;
234
235 // Can't merge if there are multiple predecessors, or no predecessors.
236 BasicBlock *PredBB = BB->getUniquePredecessor();
237 if (!PredBB) return false;
238
239 // Don't break self-loops.
240 if (PredBB == BB) return false;
241
242 // Don't break unwinding instructions or terminators with other side-effects.
243 Instruction *PTI = PredBB->getTerminator();
244 if (PTI->isSpecialTerminator() || PTI->mayHaveSideEffects())
245 return false;
246
247 // Can't merge if there are multiple distinct successors.
248 if (!PredecessorWithTwoSuccessors && PredBB->getUniqueSuccessor() != BB)
249 return false;
250
251 // Currently only allow PredBB to have two predecessors, one being BB.
252 // Update BI to branch to BB's only successor instead of BB.
253 CondBrInst *PredBB_BI;
254 BasicBlock *NewSucc = nullptr;
255 unsigned FallThruPath;
256 if (PredecessorWithTwoSuccessors) {
257 if (!(PredBB_BI = dyn_cast<CondBrInst>(PTI)))
258 return false;
260 if (!BB_JmpI)
261 return false;
262 NewSucc = BB_JmpI->getSuccessor();
263 FallThruPath = PredBB_BI->getSuccessor(0) == BB ? 0 : 1;
264 }
265
266 // Can't merge if there is PHI loop.
267 for (PHINode &PN : BB->phis())
268 if (llvm::is_contained(PN.incoming_values(), &PN))
269 return false;
270
271 // Don't break if both the basic block and the predecessor contain loop or
272 // entry convergent intrinsics, since there may only be one convergence token
273 // per block.
276 return false;
277
278 LLVM_DEBUG(dbgs() << "Merging: " << BB->getName() << " into "
279 << PredBB->getName() << "\n");
280
281 // Begin by getting rid of unneeded PHIs.
282 SmallVector<AssertingVH<Value>, 4> IncomingValues;
283 if (isa<PHINode>(BB->front())) {
284 for (PHINode &PN : BB->phis())
285 if (!isa<PHINode>(PN.getIncomingValue(0)) ||
286 cast<PHINode>(PN.getIncomingValue(0))->getParent() != BB)
287 IncomingValues.push_back(PN.getIncomingValue(0));
288 FoldSingleEntryPHINodes(BB, MemDep);
289 }
290
291 if (DT) {
292 assert(!DTU && "cannot use both DT and DTU for updates");
293 DomTreeNode *PredNode = DT->getNode(PredBB);
294 DomTreeNode *BBNode = DT->getNode(BB);
295 if (PredNode) {
296 assert(BBNode && "PredNode unreachable but BBNode reachable?");
297 for (DomTreeNode *C : to_vector(BBNode->children()))
298 C->setIDom(PredNode);
299 }
300 }
301 // DTU update: Collect all the edges that exit BB.
302 // These dominator edges will be redirected from Pred.
303 std::vector<DominatorTree::UpdateType> Updates;
304 if (DTU) {
305 assert(!DT && "cannot use both DT and DTU for updates");
306 // To avoid processing the same predecessor more than once.
309 successors(PredBB));
310 Updates.reserve(Updates.size() + 2 * succ_size(BB) + 1);
311 // Add insert edges first. Experimentally, for the particular case of two
312 // blocks that can be merged, with a single successor and single predecessor
313 // respectively, it is beneficial to have all insert updates first. Deleting
314 // edges first may lead to unreachable blocks, followed by inserting edges
315 // making the blocks reachable again. Such DT updates lead to high compile
316 // times. We add inserts before deletes here to reduce compile time.
317 for (BasicBlock *SuccOfBB : successors(BB))
318 // This successor of BB may already be a PredBB's successor.
319 if (!SuccsOfPredBB.contains(SuccOfBB))
320 if (SeenSuccs.insert(SuccOfBB).second)
321 Updates.push_back({DominatorTree::Insert, PredBB, SuccOfBB});
322 SeenSuccs.clear();
323 for (BasicBlock *SuccOfBB : successors(BB))
324 if (SeenSuccs.insert(SuccOfBB).second)
325 Updates.push_back({DominatorTree::Delete, BB, SuccOfBB});
326 Updates.push_back({DominatorTree::Delete, PredBB, BB});
327 }
328
329 Instruction *STI = BB->getTerminator();
330 Instruction *Start = &*BB->begin();
331 // If there's nothing to move, mark the starting instruction as the last
332 // instruction in the block. Terminator instruction is handled separately.
333 if (Start == STI)
334 Start = PTI;
335
336 // Move all definitions in the successor to the predecessor...
337 PredBB->splice(PTI->getIterator(), BB, BB->begin(), STI->getIterator());
338
339 if (MSSAU)
340 MSSAU->moveAllAfterMergeBlocks(BB, PredBB, Start);
341
342 // Make all PHI nodes that referred to BB now refer to Pred as their
343 // source...
344 BB->replaceAllUsesWith(PredBB);
345
346 if (PredecessorWithTwoSuccessors) {
347 // Delete the unconditional branch from BB.
348 BB->back().eraseFromParent();
349 // Add unreachable to now empty BB.
350 new UnreachableInst(BB->getContext(), BB);
351
352 // Update branch in the predecessor.
353 PredBB_BI->setSuccessor(FallThruPath, NewSucc);
354 } else {
355 // Delete the unconditional branch from the predecessor.
356 PredBB->back().eraseFromParent();
357
358 // Move terminator instruction.
359 BB->back().moveBeforePreserving(*PredBB, PredBB->end());
360 // Add unreachable to now empty BB.
361 new UnreachableInst(BB->getContext(), BB);
362
363 // Terminator may be a memory accessing instruction too.
364 if (MSSAU)
366 MSSAU->getMemorySSA()->getMemoryAccess(PredBB->getTerminator())))
367 MSSAU->moveToPlace(MUD, PredBB, MemorySSA::End);
368 }
369
370 // Inherit predecessors name if it exists.
371 if (!PredBB->hasName())
372 PredBB->takeName(BB);
373
374 if (LI)
375 LI->removeBlock(BB);
376
377 if (MemDep)
379
380 if (DTU)
381 DTU->applyUpdates(Updates);
382
383 if (DT) {
384 assert(succ_empty(BB) &&
385 "successors should have been transferred to PredBB");
386 DT->eraseNode(BB);
387 }
388
389 // Finally, erase the old block and update dominator info.
390 DeleteDeadBlock(BB, DTU);
391
392 return true;
393}
394
397 LoopInfo *LI) {
398 assert(!MergeBlocks.empty() && "MergeBlocks should not be empty");
399
400 bool BlocksHaveBeenMerged = false;
401 while (!MergeBlocks.empty()) {
402 BasicBlock *BB = *MergeBlocks.begin();
403 BasicBlock *Dest = BB->getSingleSuccessor();
404 if (Dest && (!L || L->contains(Dest))) {
405 BasicBlock *Fold = Dest->getUniquePredecessor();
406 (void)Fold;
407 if (MergeBlockIntoPredecessor(Dest, DTU, LI)) {
408 assert(Fold == BB &&
409 "Expecting BB to be unique predecessor of the Dest block");
410 MergeBlocks.erase(Dest);
411 BlocksHaveBeenMerged = true;
412 } else
413 MergeBlocks.erase(BB);
414 } else
415 MergeBlocks.erase(BB);
416 }
417 return BlocksHaveBeenMerged;
418}
419
420/// Remove redundant instructions within sequences of consecutive dbg.value
421/// instructions. This is done using a backward scan to keep the last dbg.value
422/// describing a specific variable/fragment.
423///
424/// BackwardScan strategy:
425/// ----------------------
426/// Given a sequence of consecutive DbgValueInst like this
427///
428/// dbg.value ..., "x", FragmentX1 (*)
429/// dbg.value ..., "y", FragmentY1
430/// dbg.value ..., "x", FragmentX2
431/// dbg.value ..., "x", FragmentX1 (**)
432///
433/// then the instruction marked with (*) can be removed (it is guaranteed to be
434/// obsoleted by the instruction marked with (**) as the latter instruction is
435/// describing the same variable using the same fragment info).
436///
437/// Possible improvements:
438/// - Check fully overlapping fragments and not only identical fragments.
442 for (auto &I : reverse(*BB)) {
443 for (DbgVariableRecord &DVR :
444 reverse(filterDbgVars(I.getDbgRecordRange()))) {
445 DebugVariable Key(DVR.getVariable(), DVR.getExpression(),
446 DVR.getDebugLoc()->getInlinedAt());
447 auto R = VariableSet.insert(Key);
448 // If the same variable fragment is described more than once it is enough
449 // to keep the last one (i.e. the first found since we for reverse
450 // iteration).
451 if (R.second)
452 continue;
453
454 if (DVR.isDbgAssign()) {
455 // Don't delete dbg.assign intrinsics that are linked to instructions.
456 if (!at::getAssignmentInsts(&DVR).empty())
457 continue;
458 // Unlinked dbg.assign intrinsics can be treated like dbg.values.
459 }
460
461 ToBeRemoved.push_back(&DVR);
462 }
463 // Sequence with consecutive dbg.value instrs ended. Clear the map to
464 // restart identifying redundant instructions if case we find another
465 // dbg.value sequence.
466 VariableSet.clear();
467 }
468
469 for (auto &DVR : ToBeRemoved)
470 DVR->eraseFromParent();
471
472 return !ToBeRemoved.empty();
473}
474
475/// Remove redundant dbg.value instructions using a forward scan. This can
476/// remove a dbg.value instruction that is redundant due to indicating that a
477/// variable has the same value as already being indicated by an earlier
478/// dbg.value.
479///
480/// ForwardScan strategy:
481/// ---------------------
482/// Given two identical dbg.value instructions, separated by a block of
483/// instructions that isn't describing the same variable, like this
484///
485/// dbg.value X1, "x", FragmentX1 (**)
486/// <block of instructions, none being "dbg.value ..., "x", ...">
487/// dbg.value X1, "x", FragmentX1 (*)
488///
489/// then the instruction marked with (*) can be removed. Variable "x" is already
490/// described as being mapped to the SSA value X1.
491///
492/// Possible improvements:
493/// - Keep track of non-overlapping fragments.
495 bool RemovedAny = false;
497 std::pair<SmallVector<Value *, 4>, DIExpression *>, 4>
498 VariableMap;
499 for (auto &I : *BB) {
500 for (DbgVariableRecord &DVR :
501 make_early_inc_range(filterDbgVars(I.getDbgRecordRange()))) {
502 if (DVR.getType() == DbgVariableRecord::LocationType::Declare)
503 continue;
504 DebugVariable Key(DVR.getVariable(), std::nullopt,
505 DVR.getDebugLoc()->getInlinedAt());
506 auto [VMI, Inserted] = VariableMap.try_emplace(Key);
507 // A dbg.assign with no linked instructions can be treated like a
508 // dbg.value (i.e. can be deleted).
509 bool IsDbgValueKind =
510 (!DVR.isDbgAssign() || at::getAssignmentInsts(&DVR).empty());
511
512 // Update the map if we found a new value/expression describing the
513 // variable, or if the variable wasn't mapped already.
514 SmallVector<Value *, 4> Values(DVR.location_ops());
515 if (Inserted || VMI->second.first != Values ||
516 VMI->second.second != DVR.getExpression()) {
517 if (IsDbgValueKind)
518 VMI->second = {Values, DVR.getExpression()};
519 else
520 VMI->second = {Values, nullptr};
521 continue;
522 }
523 // Don't delete dbg.assign intrinsics that are linked to instructions.
524 if (!IsDbgValueKind)
525 continue;
526 // Found an identical mapping. Remember the instruction for later removal.
527 DVR.eraseFromParent();
528 RemovedAny = true;
529 }
530 }
531
532 return RemovedAny;
533}
534
535/// Remove redundant undef dbg.assign intrinsic from an entry block using a
536/// forward scan.
537/// Strategy:
538/// ---------------------
539/// Scanning forward, delete dbg.assign intrinsics iff they are undef, not
540/// linked to an intrinsic, and don't share an aggregate variable with a debug
541/// intrinsic that didn't meet the criteria. In other words, undef dbg.assigns
542/// that come before non-undef debug intrinsics for the variable are
543/// deleted. Given:
544///
545/// dbg.assign undef, "x", FragmentX1 (*)
546/// <block of instructions, none being "dbg.value ..., "x", ...">
547/// dbg.value %V, "x", FragmentX2
548/// <block of instructions, none being "dbg.value ..., "x", ...">
549/// dbg.assign undef, "x", FragmentX1
550///
551/// then (only) the instruction marked with (*) can be removed.
552/// Possible improvements:
553/// - Keep track of non-overlapping fragments.
555 assert(BB->isEntryBlock() && "expected entry block");
556 bool RemovedAny = false;
557 DenseSet<DebugVariableAggregate> SeenDefForAggregate;
558
559 // Remove undef dbg.assign intrinsics that are encountered before
560 // any non-undef intrinsics from the entry block.
561 for (auto &I : *BB) {
562 for (DbgVariableRecord &DVR :
563 make_early_inc_range(filterDbgVars(I.getDbgRecordRange()))) {
564 if (!DVR.isDbgValue() && !DVR.isDbgAssign())
565 continue;
566 bool IsDbgValueKind =
567 (DVR.isDbgValue() || at::getAssignmentInsts(&DVR).empty());
568
569 DebugVariableAggregate Aggregate(&DVR);
570 if (!SeenDefForAggregate.contains(Aggregate)) {
571 bool IsKill = DVR.isKillLocation() && IsDbgValueKind;
572 if (!IsKill) {
573 SeenDefForAggregate.insert(Aggregate);
574 } else if (DVR.isDbgAssign()) {
575 DVR.eraseFromParent();
576 RemovedAny = true;
577 }
578 }
579 }
580 }
581
582 return RemovedAny;
583}
584
586 bool MadeChanges = false;
587 // By using the "backward scan" strategy before the "forward scan" strategy we
588 // can remove both dbg.value (2) and (3) in a situation like this:
589 //
590 // (1) dbg.value V1, "x", DIExpression()
591 // ...
592 // (2) dbg.value V2, "x", DIExpression()
593 // (3) dbg.value V1, "x", DIExpression()
594 //
595 // The backward scan will remove (2), it is made obsolete by (3). After
596 // getting (2) out of the way, the foward scan will remove (3) since "x"
597 // already is described as having the value V1 at (1).
599 if (BB->isEntryBlock() &&
601 MadeChanges |= removeUndefDbgAssignsFromEntryBlock(BB);
603
604 if (MadeChanges)
605 LLVM_DEBUG(dbgs() << "Removed redundant dbg instrs from: "
606 << BB->getName() << "\n");
607 return MadeChanges;
608}
609
611 Instruction &I = *BI;
612 // Replaces all of the uses of the instruction with uses of the value
613 I.replaceAllUsesWith(V);
614
615 // Make sure to propagate a name if there is one already.
616 if (I.hasName() && !V->hasName())
617 V->takeName(&I);
618
619 // Delete the unnecessary instruction now...
620 BI = BI->eraseFromParent();
621}
622
624 Instruction *I) {
625 assert(I->getParent() == nullptr &&
626 "ReplaceInstWithInst: Instruction already inserted into basic block!");
627
628 // Copy debug location to newly added instruction, if it wasn't already set
629 // by the caller.
630 if (!I->getDebugLoc())
631 I->setDebugLoc(BI->getDebugLoc());
632
633 // Insert the new instruction into the basic block...
634 BasicBlock::iterator New = I->insertInto(BB, BI);
635
636 // Replace all uses of the old instruction, and delete it.
638
639 // Move BI back to point to the newly inserted instruction
640 BI = New;
641}
642
644 // Remember visited blocks to avoid infinite loop
646 unsigned Depth = 0;
648 VisitedBlocks.insert(BB).second) {
651 return true;
652 BB = BB->getUniqueSuccessor();
653 }
654 return false;
655}
656
658 BasicBlock::iterator BI(From);
659 ReplaceInstWithInst(From->getParent(), BI, To);
660}
661
663 LoopInfo *LI, MemorySSAUpdater *MSSAU,
664 const Twine &BBName) {
665 unsigned SuccNum = GetSuccessorNumber(BB, Succ);
666
667 Instruction *LatchTerm = BB->getTerminator();
668
671
672 if ((isCriticalEdge(LatchTerm, SuccNum, Options.MergeIdenticalEdges))) {
673 // If this is a critical edge, let SplitKnownCriticalEdge do it.
674 return SplitKnownCriticalEdge(LatchTerm, SuccNum, Options, BBName);
675 }
676
677 // If the edge isn't critical, then BB has a single successor or Succ has a
678 // single pred. Split the block.
679 if (BasicBlock *SP = Succ->getSinglePredecessor()) {
680 // If the successor only has a single pred, split the top of the successor
681 // block.
682 assert(SP == BB && "CFG broken");
683 (void)SP;
684 DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
685 return splitBlockBefore(Succ, &Succ->front(), &DTU, LI, MSSAU, BBName);
686 }
687
688 // Otherwise, if BB has a single successor, split it at the bottom of the
689 // block.
690 assert(BB->getTerminator()->getNumSuccessors() == 1 &&
691 "Should have a single succ!");
692 return SplitBlock(BB, BB->getTerminator(), DT, LI, MSSAU, BBName);
693}
694
695/// Helper function to update the cycle or loop information after inserting a
696/// new block between a callbr instruction and one of its target blocks. Adds
697/// the new block to the innermost cycle or loop that the callbr instruction and
698/// the original target block share.
699/// \p LCI cycle or loop information to update
700/// \p CallBrBlock block containing the callbr instruction
701/// \p CallBrTarget new target block of the callbr instruction
702/// \p Succ original target block of the callbr instruction
703template <typename TI, typename T>
704static bool updateCycleLoopInfo(TI *LCI, BasicBlock *CallBrBlock,
705 BasicBlock *CallBrTarget, BasicBlock *Succ) {
706 static_assert(std::is_same_v<TI, CycleInfo> || std::is_same_v<TI, LoopInfo>,
707 "type must be CycleInfo or LoopInfo");
708 if (!LCI)
709 return false;
710
711 T *LC;
712 if constexpr (std::is_same_v<TI, CycleInfo>)
713 LC = LCI->getSmallestCommonCycle(CallBrBlock, Succ);
714 else
715 LC = LCI->getSmallestCommonLoop(CallBrBlock, Succ);
716 if (!LC)
717 return false;
718
719 if constexpr (std::is_same_v<TI, CycleInfo>)
720 LCI->addBlockToCycle(CallBrTarget, LC);
721 else
722 LC->addBasicBlockToLoop(CallBrTarget, *LCI);
723
724 return true;
725}
726
728 unsigned SuccIdx, DomTreeUpdater *DTU,
729 CycleInfo *CI, LoopInfo *LI,
730 bool *UpdatedLI) {
731 CallBrInst *CallBr = dyn_cast<CallBrInst>(CallBrBlock->getTerminator());
732 assert(CallBr && "expected callbr terminator");
733 assert(SuccIdx < CallBr->getNumSuccessors() &&
734 Succ == CallBr->getSuccessor(SuccIdx) && "invalid successor index");
735
736 // Create a new block between callbr and the specified successor.
737 // splitBlockBefore cannot be re-used here since it cannot split if the split
738 // point is a PHI node (because BasicBlock::splitBasicBlockBefore cannot
739 // handle that). But we don't need to rewire every part of a potential PHI
740 // node. We only care about the edge between CallBrBlock and the original
741 // successor.
742 BasicBlock *CallBrTarget =
743 BasicBlock::Create(CallBrBlock->getContext(),
744 CallBrBlock->getName() + ".target." + Succ->getName(),
745 CallBrBlock->getParent());
746 // Rewire control flow from the new target block to the original successor.
747 Succ->replacePhiUsesWith(CallBrBlock, CallBrTarget);
748 // Rewire control flow from callbr to the new target block.
749 CallBr->setSuccessor(SuccIdx, CallBrTarget);
750 // Jump from the new target block to the original successor.
751 UncondBrInst::Create(Succ, CallBrTarget);
752
753 bool Updated =
754 updateCycleLoopInfo<LoopInfo, Loop>(LI, CallBrBlock, CallBrTarget, Succ);
755 if (UpdatedLI)
756 *UpdatedLI = Updated;
757 updateCycleLoopInfo<CycleInfo, Cycle>(CI, CallBrBlock, CallBrTarget, Succ);
758 if (DTU) {
759 DTU->applyUpdates({{DominatorTree::Insert, CallBrBlock, CallBrTarget}});
760 if (DTU->getDomTree().dominates(CallBrBlock, Succ)) {
761 if (!is_contained(successors(CallBrBlock), Succ))
762 DTU->applyUpdates({{DominatorTree::Delete, CallBrBlock, Succ}});
763 DTU->applyUpdates({{DominatorTree::Insert, CallBrTarget, Succ}});
764 }
765 }
766
767 return CallBrTarget;
768}
769
771 if (auto *II = dyn_cast<InvokeInst>(TI))
772 II->setUnwindDest(Succ);
773 else if (auto *CS = dyn_cast<CatchSwitchInst>(TI))
774 CS->setUnwindDest(Succ);
775 else if (auto *CR = dyn_cast<CleanupReturnInst>(TI))
776 CR->setUnwindDest(Succ);
777 else
778 llvm_unreachable("unexpected terminator instruction");
779}
780
782 BasicBlock *NewPred, PHINode *Until) {
783 int BBIdx = 0;
784 for (PHINode &PN : DestBB->phis()) {
785 // We manually update the LandingPadReplacement PHINode and it is the last
786 // PHI Node. So, if we find it, we are done.
787 if (Until == &PN)
788 break;
789
790 // Reuse the previous value of BBIdx if it lines up. In cases where we
791 // have multiple phi nodes with *lots* of predecessors, this is a speed
792 // win because we don't have to scan the PHI looking for TIBB. This
793 // happens because the BB list of PHI nodes are usually in the same
794 // order.
795 if (PN.getIncomingBlock(BBIdx) != OldPred)
796 BBIdx = PN.getBasicBlockIndex(OldPred);
797
798 assert(BBIdx != -1 && "Invalid PHI Index!");
799 PN.setIncomingBlock(BBIdx, NewPred);
800 }
801}
802
804 LandingPadInst *OriginalPad,
805 PHINode *LandingPadReplacement,
807 const Twine &BBName) {
808
809 auto PadInst = Succ->getFirstNonPHIIt();
810 if (!LandingPadReplacement && !PadInst->isEHPad())
811 return SplitEdge(BB, Succ, Options.DT, Options.LI, Options.MSSAU, BBName);
812
813 auto *LI = Options.LI;
815 // Check if extra modifications will be required to preserve loop-simplify
816 // form after splitting. If it would require splitting blocks with IndirectBr
817 // terminators, bail out if preserving loop-simplify form is requested.
818 if (Options.PreserveLoopSimplify && LI) {
819 if (Loop *BBLoop = LI->getLoopFor(BB)) {
820
821 // The only way that we can break LoopSimplify form by splitting a
822 // critical edge is when there exists some edge from BBLoop to Succ *and*
823 // the only edge into Succ from outside of BBLoop is that of NewBB after
824 // the split. If the first isn't true, then LoopSimplify still holds,
825 // NewBB is the new exit block and it has no non-loop predecessors. If the
826 // second isn't true, then Succ was not in LoopSimplify form prior to
827 // the split as it had a non-loop predecessor. In both of these cases,
828 // the predecessor must be directly in BBLoop, not in a subloop, or again
829 // LoopSimplify doesn't hold.
830 for (BasicBlock *P : predecessors(Succ)) {
831 if (P == BB)
832 continue; // The new block is known.
833 if (LI->getLoopFor(P) != BBLoop) {
834 // Loop is not in LoopSimplify form, no need to re simplify after
835 // splitting edge.
836 LoopPreds.clear();
837 break;
838 }
839 LoopPreds.push_back(P);
840 }
841 // Loop-simplify form can be preserved, if we can split all in-loop
842 // predecessors.
843 if (any_of(LoopPreds, [](BasicBlock *Pred) {
844 return isa<IndirectBrInst>(Pred->getTerminator());
845 })) {
846 return nullptr;
847 }
848 }
849 }
850
851 auto *NewBB =
852 BasicBlock::Create(BB->getContext(), BBName, BB->getParent(), Succ);
853 setUnwindEdgeTo(BB->getTerminator(), NewBB);
854 updatePhiNodes(Succ, BB, NewBB, LandingPadReplacement);
855
856 if (LandingPadReplacement) {
857 auto *NewLP = OriginalPad->clone();
858 auto *Terminator = UncondBrInst::Create(Succ, NewBB);
859 NewLP->insertBefore(Terminator->getIterator());
860 LandingPadReplacement->addIncoming(NewLP, NewBB);
861 } else {
862 Value *ParentPad = nullptr;
863 if (auto *FuncletPad = dyn_cast<FuncletPadInst>(PadInst))
864 ParentPad = FuncletPad->getParentPad();
865 else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(PadInst))
866 ParentPad = CatchSwitch->getParentPad();
867 else if (auto *CleanupPad = dyn_cast<CleanupPadInst>(PadInst))
868 ParentPad = CleanupPad->getParentPad();
869 else if (auto *LandingPad = dyn_cast<LandingPadInst>(PadInst))
870 ParentPad = LandingPad->getParent();
871 else
872 llvm_unreachable("handling for other EHPads not implemented yet");
873
874 auto *NewCleanupPad = CleanupPadInst::Create(ParentPad, {}, BBName, NewBB);
875 CleanupReturnInst::Create(NewCleanupPad, Succ, NewBB);
876 }
877
878 auto *DT = Options.DT;
879 auto *MSSAU = Options.MSSAU;
880 if (!DT && !LI)
881 return NewBB;
882
883 if (DT) {
884 DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
886
887 Updates.push_back({DominatorTree::Insert, BB, NewBB});
888 Updates.push_back({DominatorTree::Insert, NewBB, Succ});
889 Updates.push_back({DominatorTree::Delete, BB, Succ});
890
891 DTU.applyUpdates(Updates);
892 DTU.flush();
893
894 if (MSSAU) {
895 MSSAU->applyUpdates(Updates, *DT);
896 if (VerifyMemorySSA)
897 MSSAU->getMemorySSA()->verifyMemorySSA();
898 }
899 }
900
901 if (LI) {
902 if (Loop *BBLoop = LI->getLoopFor(BB)) {
903 // If one or the other blocks were not in a loop, the new block is not
904 // either, and thus LI doesn't need to be updated.
905 if (Loop *SuccLoop = LI->getLoopFor(Succ)) {
906 if (BBLoop == SuccLoop) {
907 // Both in the same loop, the NewBB joins loop.
908 SuccLoop->addBasicBlockToLoop(NewBB, *LI);
909 } else if (BBLoop->contains(SuccLoop)) {
910 // Edge from an outer loop to an inner loop. Add to the outer loop.
911 BBLoop->addBasicBlockToLoop(NewBB, *LI);
912 } else if (SuccLoop->contains(BBLoop)) {
913 // Edge from an inner loop to an outer loop. Add to the outer loop.
914 SuccLoop->addBasicBlockToLoop(NewBB, *LI);
915 } else {
916 // Edge from two loops with no containment relation. Because these
917 // are natural loops, we know that the destination block must be the
918 // header of its loop (adding a branch into a loop elsewhere would
919 // create an irreducible loop).
920 assert(SuccLoop->getHeader() == Succ &&
921 "Should not create irreducible loops!");
922 if (Loop *P = SuccLoop->getParentLoop())
923 P->addBasicBlockToLoop(NewBB, *LI);
924 }
925 }
926
927 // If BB is in a loop and Succ is outside of that loop, we may need to
928 // update LoopSimplify form and LCSSA form.
929 if (!BBLoop->contains(Succ)) {
930 assert(!BBLoop->contains(NewBB) &&
931 "Split point for loop exit is contained in loop!");
932
933 // Update LCSSA form in the newly created exit block.
934 if (Options.PreserveLCSSA) {
935 createPHIsForSplitLoopExit(BB, NewBB, Succ);
936 }
937
938 if (!LoopPreds.empty()) {
940 Succ, LoopPreds, "split", DT, LI, MSSAU, Options.PreserveLCSSA);
941 if (Options.PreserveLCSSA)
942 createPHIsForSplitLoopExit(LoopPreds, NewExitBB, Succ);
943 }
944 }
945 }
946 }
947
948 return NewBB;
949}
950
952 BasicBlock *SplitBB, BasicBlock *DestBB) {
953 // SplitBB shouldn't have anything non-trivial in it yet.
954 assert((&*SplitBB->getFirstNonPHIIt() == SplitBB->getTerminator() ||
955 SplitBB->isLandingPad()) &&
956 "SplitBB has non-PHI nodes!");
957
958 // For each PHI in the destination block.
959 for (PHINode &PN : DestBB->phis()) {
960 int Idx = PN.getBasicBlockIndex(SplitBB);
961 assert(Idx >= 0 && "Invalid Block Index");
962 Value *V = PN.getIncomingValue(Idx);
963
964 // If the input is a PHI which already satisfies LCSSA, don't create
965 // a new one.
966 if (const PHINode *VP = dyn_cast<PHINode>(V))
967 if (VP->getParent() == SplitBB)
968 continue;
969
970 // Otherwise a new PHI is needed. Create one and populate it.
971 PHINode *NewPN = PHINode::Create(PN.getType(), Preds.size(), "split");
972 BasicBlock::iterator InsertPos =
973 SplitBB->isLandingPad() ? SplitBB->begin()
974 : SplitBB->getTerminator()->getIterator();
975 NewPN->insertBefore(InsertPos);
976 for (BasicBlock *BB : Preds)
977 NewPN->addIncoming(V, BB);
978
979 // Update the original PHI.
980 PN.setIncomingValue(Idx, NewPN);
981 }
982}
983
984unsigned
987 unsigned NumBroken = 0;
988 for (BasicBlock &BB : F) {
989 Instruction *TI = BB.getTerminator();
990 if (TI->getNumSuccessors() > 1 && !isa<IndirectBrInst>(TI))
991 for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
992 if (SplitCriticalEdge(TI, i, Options))
993 ++NumBroken;
994 }
995 return NumBroken;
996}
997
1000 LoopInfo *LI, MemorySSAUpdater *MSSAU,
1001 const Twine &BBName) {
1002 BasicBlock::iterator SplitIt = SplitPt;
1003 while (isa<PHINode>(SplitIt) || SplitIt->isEHPad()) {
1004 ++SplitIt;
1005 assert(SplitIt != SplitPt->getParent()->end());
1006 }
1007 std::string Name = BBName.str();
1008 BasicBlock *New = Old->splitBasicBlock(
1009 SplitIt, Name.empty() ? Old->getName() + ".split" : Name);
1010
1011 // The new block lives in whichever loop the old one did. This preserves
1012 // LCSSA as well, because we force the split point to be after any PHI nodes.
1013 if (LI)
1014 if (Loop *L = LI->getLoopFor(Old))
1015 L->addBasicBlockToLoop(New, *LI);
1016
1017 if (DTU) {
1019 // Old dominates New. New node dominates all other nodes dominated by Old.
1020 SmallPtrSet<BasicBlock *, 8> UniqueSuccessorsOfOld;
1021 Updates.push_back({DominatorTree::Insert, Old, New});
1022 Updates.reserve(Updates.size() + 2 * succ_size(New));
1023 for (BasicBlock *SuccessorOfOld : successors(New))
1024 if (UniqueSuccessorsOfOld.insert(SuccessorOfOld).second) {
1025 Updates.push_back({DominatorTree::Insert, New, SuccessorOfOld});
1026 Updates.push_back({DominatorTree::Delete, Old, SuccessorOfOld});
1027 }
1028
1029 DTU->applyUpdates(Updates);
1030 } else if (DT)
1031 // Old dominates New. New node dominates all other nodes dominated by Old.
1032 if (DomTreeNode *OldNode = DT->getNode(Old)) {
1033 std::vector<DomTreeNode *> Children(OldNode->begin(), OldNode->end());
1034
1035 DomTreeNode *NewNode = DT->addNewBlock(New, Old);
1036 for (DomTreeNode *I : Children)
1037 DT->changeImmediateDominator(I, NewNode);
1038 }
1039
1040 // Move MemoryAccesses still tracked in Old, but part of New now.
1041 // Update accesses in successor blocks accordingly.
1042 if (MSSAU)
1043 MSSAU->moveAllAfterSpliceBlocks(Old, New, &*(New->begin()));
1044
1045 return New;
1046}
1047
1049 DominatorTree *DT, LoopInfo *LI,
1050 MemorySSAUpdater *MSSAU, const Twine &BBName) {
1051 return SplitBlockImpl(Old, SplitPt, /*DTU=*/nullptr, DT, LI, MSSAU, BBName);
1052}
1054 DomTreeUpdater *DTU, LoopInfo *LI,
1055 MemorySSAUpdater *MSSAU, const Twine &BBName) {
1056 return SplitBlockImpl(Old, SplitPt, DTU, /*DT=*/nullptr, LI, MSSAU, BBName);
1057}
1058
1059/// Update DominatorTree, LoopInfo, and LCCSA analysis information.
1060/// Invalidates DFS Numbering when DTU or DT is provided.
1063 DomTreeUpdater *DTU, DominatorTree *DT,
1064 LoopInfo *LI, MemorySSAUpdater *MSSAU,
1065 bool PreserveLCSSA, bool &HasLoopExit) {
1066 // Update dominator tree if available.
1067 if (DTU) {
1068 // Recalculation of DomTree is needed when updating a forward DomTree and
1069 // the Entry BB is replaced.
1070 if (NewBB->isEntryBlock() && DTU->hasDomTree()) {
1071 // The entry block was removed and there is no external interface for
1072 // the dominator tree to be notified of this change. In this corner-case
1073 // we recalculate the entire tree.
1074 DTU->recalculate(*NewBB->getParent());
1075 } else {
1076 // Split block expects NewBB to have a non-empty set of predecessors.
1078 SmallPtrSet<BasicBlock *, 8> UniquePreds;
1079 Updates.push_back({DominatorTree::Insert, NewBB, OldBB});
1080 Updates.reserve(Updates.size() + 2 * Preds.size());
1081 for (auto *Pred : Preds)
1082 if (UniquePreds.insert(Pred).second) {
1083 Updates.push_back({DominatorTree::Insert, Pred, NewBB});
1084 Updates.push_back({DominatorTree::Delete, Pred, OldBB});
1085 }
1086 DTU->applyUpdates(Updates);
1087 }
1088 } else if (DT) {
1089 if (OldBB == DT->getRootNode()->getBlock()) {
1090 assert(NewBB->isEntryBlock());
1091 DT->setNewRoot(NewBB);
1092 } else {
1093 // Split block expects NewBB to have a non-empty set of predecessors.
1094 DT->splitBlock(NewBB);
1095 }
1096 }
1097
1098 // Update MemoryPhis after split if MemorySSA is available
1099 if (MSSAU)
1100 MSSAU->wireOldPredecessorsToNewImmediatePredecessor(OldBB, NewBB, Preds);
1101
1102 // The rest of the logic is only relevant for updating the loop structures.
1103 if (!LI)
1104 return;
1105
1106 if (DTU && DTU->hasDomTree())
1107 DT = &DTU->getDomTree();
1108 assert(DT && "DT should be available to update LoopInfo!");
1109 Loop *L = LI->getLoopFor(OldBB);
1110
1111 // If we need to preserve loop analyses, collect some information about how
1112 // this split will affect loops.
1113 bool IsLoopEntry = !!L;
1114 bool SplitMakesNewLoopHeader = false;
1115 for (BasicBlock *Pred : Preds) {
1116 // Preds that are not reachable from entry should not be used to identify if
1117 // OldBB is a loop entry or if SplitMakesNewLoopHeader. Unreachable blocks
1118 // are not within any loops, so we incorrectly mark SplitMakesNewLoopHeader
1119 // as true and make the NewBB the header of some loop. This breaks LI.
1120 if (!DT->isReachableFromEntry(Pred))
1121 continue;
1122 // If we need to preserve LCSSA, determine if any of the preds is a loop
1123 // exit.
1124 if (PreserveLCSSA)
1125 if (Loop *PL = LI->getLoopFor(Pred))
1126 if (!PL->contains(OldBB))
1127 HasLoopExit = true;
1128
1129 // If we need to preserve LoopInfo, note whether any of the preds crosses
1130 // an interesting loop boundary.
1131 if (!L)
1132 continue;
1133 if (L->contains(Pred))
1134 IsLoopEntry = false;
1135 else
1136 SplitMakesNewLoopHeader = true;
1137 }
1138
1139 // Unless we have a loop for OldBB, nothing else to do here.
1140 if (!L)
1141 return;
1142
1143 if (IsLoopEntry) {
1144 // Add the new block to the nearest enclosing loop (and not an adjacent
1145 // loop). To find this, examine each of the predecessors and determine which
1146 // loops enclose them, and select the most-nested loop which contains the
1147 // loop containing the block being split.
1148 Loop *InnermostPredLoop = nullptr;
1149 for (BasicBlock *Pred : Preds) {
1150 if (Loop *PredLoop = LI->getLoopFor(Pred)) {
1151 // Seek a loop which actually contains the block being split (to avoid
1152 // adjacent loops).
1153 while (PredLoop && !PredLoop->contains(OldBB))
1154 PredLoop = PredLoop->getParentLoop();
1155
1156 // Select the most-nested of these loops which contains the block.
1157 if (PredLoop && PredLoop->contains(OldBB) &&
1158 (!InnermostPredLoop ||
1159 InnermostPredLoop->getLoopDepth() < PredLoop->getLoopDepth()))
1160 InnermostPredLoop = PredLoop;
1161 }
1162 }
1163
1164 if (InnermostPredLoop)
1165 InnermostPredLoop->addBasicBlockToLoop(NewBB, *LI);
1166 } else {
1167 L->addBasicBlockToLoop(NewBB, *LI);
1168 if (SplitMakesNewLoopHeader)
1169 L->moveToHeader(NewBB);
1170 }
1171}
1172
1174 BasicBlock::iterator SplitPt,
1175 DomTreeUpdater *DTU, LoopInfo *LI,
1176 MemorySSAUpdater *MSSAU,
1177 const Twine &BBName) {
1178 BasicBlock::iterator SplitIt = SplitPt;
1179 while (isa<PHINode>(SplitIt) || SplitIt->isEHPad())
1180 ++SplitIt;
1183 SplitIt, BBName.isTriviallyEmpty() ? Old->getName() + ".split" : BBName);
1184
1185 bool HasLoopExit = false;
1186 UpdateAnalysisInformation(Old, New, Preds, DTU, nullptr, LI, MSSAU, false,
1187 HasLoopExit);
1188
1189 return New;
1190}
1191
1192/// Update the PHI nodes in OrigBB to include the values coming from NewBB.
1193/// This also updates AliasAnalysis, if available.
1194static void UpdatePHINodes(BasicBlock *OrigBB, BasicBlock *NewBB,
1196 bool HasLoopExit) {
1197 // Otherwise, create a new PHI node in NewBB for each PHI node in OrigBB.
1199 for (BasicBlock::iterator I = OrigBB->begin(); isa<PHINode>(I); ) {
1200 PHINode *PN = cast<PHINode>(I++);
1201
1202 // Check to see if all of the values coming in are the same. If so, we
1203 // don't need to create a new PHI node, unless it's needed for LCSSA.
1204 Value *InVal = nullptr;
1205 if (!HasLoopExit) {
1206 InVal = PN->getIncomingValueForBlock(Preds[0]);
1207 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
1208 if (!PredSet.count(PN->getIncomingBlock(i)))
1209 continue;
1210 if (!InVal)
1211 InVal = PN->getIncomingValue(i);
1212 else if (InVal != PN->getIncomingValue(i)) {
1213 InVal = nullptr;
1214 break;
1215 }
1216 }
1217 }
1218
1219 if (InVal) {
1220 // If all incoming values for the new PHI would be the same, just don't
1221 // make a new PHI. Instead, just remove the incoming values from the old
1222 // PHI.
1224 [&](unsigned Idx) {
1225 return PredSet.contains(PN->getIncomingBlock(Idx));
1226 },
1227 /* DeletePHIIfEmpty */ false);
1228
1229 // Add an incoming value to the PHI node in the loop for the preheader
1230 // edge.
1231 PN->addIncoming(InVal, NewBB);
1232 continue;
1233 }
1234
1235 // If the values coming into the block are not the same, we need a new
1236 // PHI.
1237 // Create the new PHI node, insert it into NewBB at the end of the block
1238 PHINode *NewPHI =
1239 PHINode::Create(PN->getType(), Preds.size(), PN->getName() + ".ph", BI->getIterator());
1240
1241 // NOTE! This loop walks backwards for a reason! First off, this minimizes
1242 // the cost of removal if we end up removing a large number of values, and
1243 // second off, this ensures that the indices for the incoming values aren't
1244 // invalidated when we remove one.
1245 for (int64_t i = PN->getNumIncomingValues() - 1; i >= 0; --i) {
1246 BasicBlock *IncomingBB = PN->getIncomingBlock(i);
1247 if (PredSet.count(IncomingBB)) {
1248 Value *V = PN->removeIncomingValue(i, false);
1249 NewPHI->addIncoming(V, IncomingBB);
1250 }
1251 }
1252
1253 PN->addIncoming(NewPHI, NewBB);
1254 }
1255}
1256
1258 BasicBlock *OrigBB, ArrayRef<BasicBlock *> Preds, const char *Suffix1,
1259 const char *Suffix2, SmallVectorImpl<BasicBlock *> &NewBBs,
1260 DomTreeUpdater *DTU, DominatorTree *DT, LoopInfo *LI,
1261 MemorySSAUpdater *MSSAU, bool PreserveLCSSA);
1262
1263static BasicBlock *
1265 const char *Suffix, DomTreeUpdater *DTU,
1266 DominatorTree *DT, LoopInfo *LI,
1267 MemorySSAUpdater *MSSAU, bool PreserveLCSSA) {
1268 // Do not attempt to split that which cannot be split.
1269 if (!BB->canSplitPredecessors())
1270 return nullptr;
1271
1272 // For the landingpads we need to act a bit differently.
1273 // Delegate this work to the SplitLandingPadPredecessors.
1274 if (BB->isLandingPad()) {
1276 std::string NewName = std::string(Suffix) + ".split-lp";
1277
1278 SplitLandingPadPredecessorsImpl(BB, Preds, Suffix, NewName.c_str(), NewBBs,
1279 DTU, DT, LI, MSSAU, PreserveLCSSA);
1280 return NewBBs[0];
1281 }
1282
1283 // Create new basic block, insert right before the original block.
1285 BB->getContext(), BB->getName() + Suffix, BB->getParent(), BB);
1286
1287 // The new block unconditionally branches to the old block.
1288 UncondBrInst *BI = UncondBrInst::Create(BB, NewBB);
1289
1290 Loop *L = nullptr;
1291 BasicBlock *OldLatch = nullptr;
1292 // Splitting the predecessors of a loop header creates a preheader block.
1293 if (LI && LI->isLoopHeader(BB)) {
1294 L = LI->getLoopFor(BB);
1295 // Using the loop start line number prevents debuggers stepping into the
1296 // loop body for this instruction.
1297 BI->setDebugLoc(L->getStartLoc());
1298
1299 // If BB is the header of the Loop, it is possible that the loop is
1300 // modified, such that the current latch does not remain the latch of the
1301 // loop. If that is the case, the loop metadata from the current latch needs
1302 // to be applied to the new latch.
1303 OldLatch = L->getLoopLatch();
1304 } else
1305 BI->setDebugLoc(BB->getFirstNonPHIOrDbg()->getDebugLoc());
1306
1307 // Move the edges from Preds to point to NewBB instead of BB.
1308 for (BasicBlock *Pred : Preds) {
1309 // This is slightly more strict than necessary; the minimum requirement
1310 // is that there be no more than one indirectbr branching to BB. And
1311 // all BlockAddress uses would need to be updated.
1312 assert(!isa<IndirectBrInst>(Pred->getTerminator()) &&
1313 "Cannot split an edge from an IndirectBrInst");
1314 Pred->getTerminator()->replaceSuccessorWith(BB, NewBB);
1315 }
1316
1317 // Insert a new PHI node into NewBB for every PHI node in BB and that new PHI
1318 // node becomes an incoming value for BB's phi node. However, if the Preds
1319 // list is empty, we need to insert dummy entries into the PHI nodes in BB to
1320 // account for the newly created predecessor.
1321 if (Preds.empty()) {
1322 // Insert dummy values as the incoming value.
1323 for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++I)
1324 cast<PHINode>(I)->addIncoming(PoisonValue::get(I->getType()), NewBB);
1325 }
1326
1327 // Update DominatorTree, LoopInfo, and LCCSA analysis information.
1328 bool HasLoopExit = false;
1329 UpdateAnalysisInformation(BB, NewBB, Preds, DTU, DT, LI, MSSAU, PreserveLCSSA,
1330 HasLoopExit);
1331
1332 if (!Preds.empty()) {
1333 // Update the PHI nodes in BB with the values coming from NewBB.
1334 UpdatePHINodes(BB, NewBB, Preds, BI, HasLoopExit);
1335 }
1336
1337 if (OldLatch) {
1338 BasicBlock *NewLatch = L->getLoopLatch();
1339 if (NewLatch != OldLatch) {
1340 MDNode *MD = OldLatch->getTerminator()->getMetadata(LLVMContext::MD_loop);
1341 NewLatch->getTerminator()->setMetadata(LLVMContext::MD_loop, MD);
1342 // It's still possible that OldLatch is the latch of another inner loop,
1343 // in which case we do not remove the metadata.
1344 Loop *IL = LI->getLoopFor(OldLatch);
1345 if (IL && IL->getLoopLatch() != OldLatch)
1346 OldLatch->getTerminator()->setMetadata(LLVMContext::MD_loop, nullptr);
1347 }
1348 }
1349
1350 return NewBB;
1351}
1352
1355 const char *Suffix, DominatorTree *DT,
1356 LoopInfo *LI, MemorySSAUpdater *MSSAU,
1357 bool PreserveLCSSA) {
1358 return SplitBlockPredecessorsImpl(BB, Preds, Suffix, /*DTU=*/nullptr, DT, LI,
1359 MSSAU, PreserveLCSSA);
1360}
1363 const char *Suffix,
1364 DomTreeUpdater *DTU, LoopInfo *LI,
1365 MemorySSAUpdater *MSSAU,
1366 bool PreserveLCSSA) {
1367 return SplitBlockPredecessorsImpl(BB, Preds, Suffix, DTU,
1368 /*DT=*/nullptr, LI, MSSAU, PreserveLCSSA);
1369}
1370
1372 BasicBlock *OrigBB, ArrayRef<BasicBlock *> Preds, const char *Suffix1,
1373 const char *Suffix2, SmallVectorImpl<BasicBlock *> &NewBBs,
1374 DomTreeUpdater *DTU, DominatorTree *DT, LoopInfo *LI,
1375 MemorySSAUpdater *MSSAU, bool PreserveLCSSA) {
1376 assert(OrigBB->isLandingPad() && "Trying to split a non-landing pad!");
1377
1378 // Create a new basic block for OrigBB's predecessors listed in Preds. Insert
1379 // it right before the original block.
1380 BasicBlock *NewBB1 = BasicBlock::Create(OrigBB->getContext(),
1381 OrigBB->getName() + Suffix1,
1382 OrigBB->getParent(), OrigBB);
1383 NewBBs.push_back(NewBB1);
1384
1385 // The new block unconditionally branches to the old block.
1386 UncondBrInst *BI1 = UncondBrInst::Create(OrigBB, NewBB1);
1387 BI1->setDebugLoc(OrigBB->getFirstNonPHIIt()->getDebugLoc());
1388
1389 // Move the edges from Preds to point to NewBB1 instead of OrigBB.
1390 for (BasicBlock *Pred : Preds) {
1391 // This is slightly more strict than necessary; the minimum requirement
1392 // is that there be no more than one indirectbr branching to BB. And
1393 // all BlockAddress uses would need to be updated.
1394 assert(!isa<IndirectBrInst>(Pred->getTerminator()) &&
1395 "Cannot split an edge from an IndirectBrInst");
1396 Pred->getTerminator()->replaceUsesOfWith(OrigBB, NewBB1);
1397 }
1398
1399 bool HasLoopExit = false;
1400 UpdateAnalysisInformation(OrigBB, NewBB1, Preds, DTU, DT, LI, MSSAU,
1401 PreserveLCSSA, HasLoopExit);
1402
1403 // Update the PHI nodes in OrigBB with the values coming from NewBB1.
1404 UpdatePHINodes(OrigBB, NewBB1, Preds, BI1, HasLoopExit);
1405
1406 // Move the remaining edges from OrigBB to point to NewBB2.
1407 SmallVector<BasicBlock*, 8> NewBB2Preds;
1408 for (pred_iterator i = pred_begin(OrigBB), e = pred_end(OrigBB);
1409 i != e; ) {
1410 BasicBlock *Pred = *i++;
1411 if (Pred == NewBB1) continue;
1412 assert(!isa<IndirectBrInst>(Pred->getTerminator()) &&
1413 "Cannot split an edge from an IndirectBrInst");
1414 NewBB2Preds.push_back(Pred);
1415 e = pred_end(OrigBB);
1416 }
1417
1418 BasicBlock *NewBB2 = nullptr;
1419 if (!NewBB2Preds.empty()) {
1420 // Create another basic block for the rest of OrigBB's predecessors.
1421 NewBB2 = BasicBlock::Create(OrigBB->getContext(),
1422 OrigBB->getName() + Suffix2,
1423 OrigBB->getParent(), OrigBB);
1424 NewBBs.push_back(NewBB2);
1425
1426 // The new block unconditionally branches to the old block.
1427 UncondBrInst *BI2 = UncondBrInst::Create(OrigBB, NewBB2);
1428 BI2->setDebugLoc(OrigBB->getFirstNonPHIIt()->getDebugLoc());
1429
1430 // Move the remaining edges from OrigBB to point to NewBB2.
1431 for (BasicBlock *NewBB2Pred : NewBB2Preds)
1432 NewBB2Pred->getTerminator()->replaceUsesOfWith(OrigBB, NewBB2);
1433
1434 // Update DominatorTree, LoopInfo, and LCCSA analysis information.
1435 HasLoopExit = false;
1436 UpdateAnalysisInformation(OrigBB, NewBB2, NewBB2Preds, DTU, DT, LI, MSSAU,
1437 PreserveLCSSA, HasLoopExit);
1438
1439 // Update the PHI nodes in OrigBB with the values coming from NewBB2.
1440 UpdatePHINodes(OrigBB, NewBB2, NewBB2Preds, BI2, HasLoopExit);
1441 }
1442
1443 LandingPadInst *LPad = OrigBB->getLandingPadInst();
1444 Instruction *Clone1 = LPad->clone();
1445 Clone1->setName(Twine("lpad") + Suffix1);
1446 Clone1->insertInto(NewBB1, NewBB1->getFirstInsertionPt());
1447
1448 if (NewBB2) {
1449 Instruction *Clone2 = LPad->clone();
1450 Clone2->setName(Twine("lpad") + Suffix2);
1451 Clone2->insertInto(NewBB2, NewBB2->getFirstInsertionPt());
1452
1453 // Create a PHI node for the two cloned landingpad instructions only
1454 // if the original landingpad instruction has some uses.
1455 if (!LPad->use_empty()) {
1456 assert(!LPad->getType()->isTokenTy() &&
1457 "Split cannot be applied if LPad is token type. Otherwise an "
1458 "invalid PHINode of token type would be created.");
1459 PHINode *PN = PHINode::Create(LPad->getType(), 2, "lpad.phi", LPad->getIterator());
1460 PN->addIncoming(Clone1, NewBB1);
1461 PN->addIncoming(Clone2, NewBB2);
1462 LPad->replaceAllUsesWith(PN);
1463 }
1464 LPad->eraseFromParent();
1465 } else {
1466 // There is no second clone. Just replace the landing pad with the first
1467 // clone.
1468 LPad->replaceAllUsesWith(Clone1);
1469 LPad->eraseFromParent();
1470 }
1471}
1472
1475 const char *Suffix1, const char *Suffix2,
1477 DomTreeUpdater *DTU, LoopInfo *LI,
1478 MemorySSAUpdater *MSSAU,
1479 bool PreserveLCSSA) {
1480 return SplitLandingPadPredecessorsImpl(OrigBB, Preds, Suffix1, Suffix2,
1481 NewBBs, DTU, /*DT=*/nullptr, LI, MSSAU,
1482 PreserveLCSSA);
1483}
1484
1486 BasicBlock *Pred,
1487 DomTreeUpdater *DTU) {
1488 Instruction *UncondBranch = Pred->getTerminator();
1489 // Clone the return and add it to the end of the predecessor.
1490 Instruction *NewRet = RI->clone();
1491 NewRet->insertInto(Pred, Pred->end());
1492
1493 // If the return instruction returns a value, and if the value was a
1494 // PHI node in "BB", propagate the right value into the return.
1495 for (Use &Op : NewRet->operands()) {
1496 Value *V = Op;
1497 Instruction *NewBC = nullptr;
1498 if (BitCastInst *BCI = dyn_cast<BitCastInst>(V)) {
1499 // Return value might be bitcasted. Clone and insert it before the
1500 // return instruction.
1501 V = BCI->getOperand(0);
1502 NewBC = BCI->clone();
1503 NewBC->insertInto(Pred, NewRet->getIterator());
1504 Op = NewBC;
1505 }
1506
1507 Instruction *NewEV = nullptr;
1509 V = EVI->getOperand(0);
1510 NewEV = EVI->clone();
1511 if (NewBC) {
1512 NewBC->setOperand(0, NewEV);
1513 NewEV->insertInto(Pred, NewBC->getIterator());
1514 } else {
1515 NewEV->insertInto(Pred, NewRet->getIterator());
1516 Op = NewEV;
1517 }
1518 }
1519
1520 if (PHINode *PN = dyn_cast<PHINode>(V)) {
1521 if (PN->getParent() == BB) {
1522 if (NewEV) {
1523 NewEV->setOperand(0, PN->getIncomingValueForBlock(Pred));
1524 } else if (NewBC)
1525 NewBC->setOperand(0, PN->getIncomingValueForBlock(Pred));
1526 else
1527 Op = PN->getIncomingValueForBlock(Pred);
1528 }
1529 }
1530 }
1531
1532 // Update any PHI nodes in the returning block to realize that we no
1533 // longer branch to them.
1534 BB->removePredecessor(Pred);
1535 UncondBranch->eraseFromParent();
1536
1537 if (DTU)
1538 DTU->applyUpdates({{DominatorTree::Delete, Pred, BB}});
1539
1540 return cast<ReturnInst>(NewRet);
1541}
1542
1544 BasicBlock::iterator SplitBefore,
1545 bool Unreachable,
1546 MDNode *BranchWeights,
1547 DomTreeUpdater *DTU, LoopInfo *LI,
1548 BasicBlock *ThenBlock) {
1550 Cond, SplitBefore, &ThenBlock, /* ElseBlock */ nullptr,
1551 /* UnreachableThen */ Unreachable,
1552 /* UnreachableElse */ false, BranchWeights, DTU, LI);
1553 return ThenBlock->getTerminator();
1554}
1555
1557 BasicBlock::iterator SplitBefore,
1558 bool Unreachable,
1559 MDNode *BranchWeights,
1560 DomTreeUpdater *DTU, LoopInfo *LI,
1561 BasicBlock *ElseBlock) {
1563 Cond, SplitBefore, /* ThenBlock */ nullptr, &ElseBlock,
1564 /* UnreachableThen */ false,
1565 /* UnreachableElse */ Unreachable, BranchWeights, DTU, LI);
1566 return ElseBlock->getTerminator();
1567}
1568
1570 Instruction **ThenTerm,
1571 Instruction **ElseTerm,
1572 MDNode *BranchWeights,
1573 DomTreeUpdater *DTU, LoopInfo *LI) {
1574 BasicBlock *ThenBlock = nullptr;
1575 BasicBlock *ElseBlock = nullptr;
1577 Cond, SplitBefore, &ThenBlock, &ElseBlock, /* UnreachableThen */ false,
1578 /* UnreachableElse */ false, BranchWeights, DTU, LI);
1579
1580 *ThenTerm = ThenBlock->getTerminator();
1581 *ElseTerm = ElseBlock->getTerminator();
1582}
1583
1585 Value *Cond, BasicBlock::iterator SplitBefore, BasicBlock **ThenBlock,
1586 BasicBlock **ElseBlock, bool UnreachableThen, bool UnreachableElse,
1587 MDNode *BranchWeights, DomTreeUpdater *DTU, LoopInfo *LI) {
1588 assert((ThenBlock || ElseBlock) &&
1589 "At least one branch block must be created");
1590 assert((!UnreachableThen || !UnreachableElse) &&
1591 "Split block tail must be reachable");
1592
1594 SmallPtrSet<BasicBlock *, 8> UniqueOrigSuccessors;
1595 BasicBlock *Head = SplitBefore->getParent();
1596 if (DTU) {
1597 UniqueOrigSuccessors.insert_range(successors(Head));
1598 Updates.reserve(4 + 2 * UniqueOrigSuccessors.size());
1599 }
1600
1601 LLVMContext &C = Head->getContext();
1602 BasicBlock *Tail = Head->splitBasicBlock(SplitBefore);
1603 BasicBlock *TrueBlock = Tail;
1604 BasicBlock *FalseBlock = Tail;
1605 bool ThenToTailEdge = false;
1606 bool ElseToTailEdge = false;
1607
1608 // Encapsulate the logic around creation/insertion/etc of a new block.
1609 auto handleBlock = [&](BasicBlock **PBB, bool Unreachable, BasicBlock *&BB,
1610 bool &ToTailEdge) {
1611 if (PBB == nullptr)
1612 return; // Do not create/insert a block.
1613
1614 if (*PBB)
1615 BB = *PBB; // Caller supplied block, use it.
1616 else {
1617 // Create a new block.
1618 BB = BasicBlock::Create(C, "", Head->getParent(), Tail);
1619 if (Unreachable)
1620 (void)new UnreachableInst(C, BB);
1621 else {
1622 (void)UncondBrInst::Create(Tail, BB);
1623 ToTailEdge = true;
1624 }
1625 BB->getTerminator()->setDebugLoc(SplitBefore->getDebugLoc());
1626 // Pass the new block back to the caller.
1627 *PBB = BB;
1628 }
1629 };
1630
1631 handleBlock(ThenBlock, UnreachableThen, TrueBlock, ThenToTailEdge);
1632 handleBlock(ElseBlock, UnreachableElse, FalseBlock, ElseToTailEdge);
1633
1634 Instruction *HeadOldTerm = Head->getTerminator();
1635 CondBrInst *HeadNewTerm = CondBrInst::Create(Cond, TrueBlock, FalseBlock);
1636 HeadNewTerm->setMetadata(LLVMContext::MD_prof, BranchWeights);
1637 ReplaceInstWithInst(HeadOldTerm, HeadNewTerm);
1638
1639 if (DTU) {
1640 Updates.emplace_back(DominatorTree::Insert, Head, TrueBlock);
1641 Updates.emplace_back(DominatorTree::Insert, Head, FalseBlock);
1642 if (ThenToTailEdge)
1643 Updates.emplace_back(DominatorTree::Insert, TrueBlock, Tail);
1644 if (ElseToTailEdge)
1645 Updates.emplace_back(DominatorTree::Insert, FalseBlock, Tail);
1646 for (BasicBlock *UniqueOrigSuccessor : UniqueOrigSuccessors)
1647 Updates.emplace_back(DominatorTree::Insert, Tail, UniqueOrigSuccessor);
1648 for (BasicBlock *UniqueOrigSuccessor : UniqueOrigSuccessors)
1649 Updates.emplace_back(DominatorTree::Delete, Head, UniqueOrigSuccessor);
1650 DTU->applyUpdates(Updates);
1651 }
1652
1653 if (LI) {
1654 if (Loop *L = LI->getLoopFor(Head); L) {
1655 if (ThenToTailEdge)
1656 L->addBasicBlockToLoop(TrueBlock, *LI);
1657 if (ElseToTailEdge)
1658 L->addBasicBlockToLoop(FalseBlock, *LI);
1659 L->addBasicBlockToLoop(Tail, *LI);
1660 }
1661 }
1662}
1663
1664std::pair<Instruction *, Value *>
1666 BasicBlock::iterator SplitBefore) {
1667 BasicBlock *LoopPred = SplitBefore->getParent();
1668 BasicBlock *LoopBody = SplitBlock(SplitBefore->getParent(), SplitBefore);
1669 BasicBlock *LoopExit = SplitBlock(SplitBefore->getParent(), SplitBefore);
1670
1671 auto *Ty = End->getType();
1672 auto &DL = SplitBefore->getDataLayout();
1673 const unsigned Bitwidth = DL.getTypeSizeInBits(Ty);
1674
1675 IRBuilder<> Builder(LoopBody->getTerminator());
1676 auto *IV = Builder.CreatePHI(Ty, 2, "iv");
1677 auto *IVNext =
1678 Builder.CreateAdd(IV, ConstantInt::get(Ty, 1), IV->getName() + ".next",
1679 /*HasNUW=*/true, /*HasNSW=*/Bitwidth != 2);
1680 auto *IVCheck = Builder.CreateICmpEQ(IVNext, End,
1681 IV->getName() + ".check");
1682 Builder.CreateCondBr(IVCheck, LoopExit, LoopBody);
1683 LoopBody->getTerminator()->eraseFromParent();
1684
1685 // Populate the IV PHI.
1686 IV->addIncoming(ConstantInt::get(Ty, 0), LoopPred);
1687 IV->addIncoming(IVNext, LoopBody);
1688
1689 return std::make_pair(&*LoopBody->getFirstNonPHIIt(), IV);
1690}
1691
1693 ElementCount EC, Type *IndexTy, BasicBlock::iterator InsertBefore,
1694 std::function<void(IRBuilderBase &, Value *)> Func) {
1695
1696 IRBuilder<> IRB(InsertBefore->getParent(), InsertBefore);
1697
1698 if (EC.isScalable()) {
1699 Value *NumElements = IRB.CreateElementCount(IndexTy, EC);
1700
1701 auto [BodyIP, Index] =
1702 SplitBlockAndInsertSimpleForLoop(NumElements, InsertBefore);
1703
1704 IRB.SetInsertPoint(BodyIP);
1705 Func(IRB, Index);
1706 return;
1707 }
1708
1709 unsigned Num = EC.getFixedValue();
1710 for (unsigned Idx = 0; Idx < Num; ++Idx) {
1711 IRB.SetInsertPoint(InsertBefore);
1712 Func(IRB, ConstantInt::get(IndexTy, Idx));
1713 }
1714}
1715
1717 Value *EVL, BasicBlock::iterator InsertBefore,
1718 std::function<void(IRBuilderBase &, Value *)> Func) {
1719
1720 IRBuilder<> IRB(InsertBefore->getParent(), InsertBefore);
1721 Type *Ty = EVL->getType();
1722
1723 if (!isa<ConstantInt>(EVL)) {
1724 auto [BodyIP, Index] = SplitBlockAndInsertSimpleForLoop(EVL, InsertBefore);
1725 IRB.SetInsertPoint(BodyIP);
1726 Func(IRB, Index);
1727 return;
1728 }
1729
1730 unsigned Num = cast<ConstantInt>(EVL)->getZExtValue();
1731 for (unsigned Idx = 0; Idx < Num; ++Idx) {
1732 IRB.SetInsertPoint(InsertBefore);
1733 Func(IRB, ConstantInt::get(Ty, Idx));
1734 }
1735}
1736
1738 BasicBlock *&IfFalse) {
1739 PHINode *SomePHI = dyn_cast<PHINode>(BB->begin());
1740 BasicBlock *Pred1 = nullptr;
1741 BasicBlock *Pred2 = nullptr;
1742
1743 if (SomePHI) {
1744 if (SomePHI->getNumIncomingValues() != 2)
1745 return nullptr;
1746 Pred1 = SomePHI->getIncomingBlock(0);
1747 Pred2 = SomePHI->getIncomingBlock(1);
1748 } else {
1749 pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
1750 if (PI == PE) // No predecessor
1751 return nullptr;
1752 Pred1 = *PI++;
1753 if (PI == PE) // Only one predecessor
1754 return nullptr;
1755 Pred2 = *PI++;
1756 if (PI != PE) // More than two predecessors
1757 return nullptr;
1758 }
1759
1760 Instruction *Pred1Term = Pred1->getTerminator();
1761 Instruction *Pred2Term = Pred2->getTerminator();
1762
1763 // Eliminate code duplication by ensuring that Pred1Br is conditional if
1764 // either are.
1765 if (isa<CondBrInst>(Pred2Term)) {
1766 // If both branches are conditional, we don't have an "if statement". In
1767 // reality, we could transform this case, but since the condition will be
1768 // required anyway, we stand no chance of eliminating it, so the xform is
1769 // probably not profitable.
1770 if (isa<CondBrInst>(Pred1Term))
1771 return nullptr;
1772
1773 std::swap(Pred1, Pred2);
1774 std::swap(Pred1Term, Pred2Term);
1775 }
1776
1777 // We can only handle branches. Other control flow will be lowered to
1778 // branches if possible anyway.
1779 if (!isa<UncondBrInst>(Pred2Term))
1780 return nullptr;
1781
1782 if (auto *Pred1Br = dyn_cast<CondBrInst>(Pred1Term)) {
1783 // The only thing we have to watch out for here is to make sure that Pred2
1784 // doesn't have incoming edges from other blocks. If it does, the condition
1785 // doesn't dominate BB.
1786 if (!Pred2->getSinglePredecessor())
1787 return nullptr;
1788
1789 // If we found a conditional branch predecessor, make sure that it branches
1790 // to BB and Pred2Br. If it doesn't, this isn't an "if statement".
1791 if (Pred1Br->getSuccessor(0) == BB &&
1792 Pred1Br->getSuccessor(1) == Pred2) {
1793 IfTrue = Pred1;
1794 IfFalse = Pred2;
1795 } else if (Pred1Br->getSuccessor(0) == Pred2 &&
1796 Pred1Br->getSuccessor(1) == BB) {
1797 IfTrue = Pred2;
1798 IfFalse = Pred1;
1799 } else {
1800 // We know that one arm of the conditional goes to BB, so the other must
1801 // go somewhere unrelated, and this must not be an "if statement".
1802 return nullptr;
1803 }
1804
1805 return Pred1Br;
1806 }
1807
1808 if (!isa<UncondBrInst>(Pred1Term))
1809 return nullptr;
1810
1811 // Ok, if we got here, both predecessors end with an unconditional branch to
1812 // BB. Don't panic! If both blocks only have a single (identical)
1813 // predecessor, and THAT is a conditional branch, then we're all ok!
1814 BasicBlock *CommonPred = Pred1->getSinglePredecessor();
1815 if (CommonPred == nullptr || CommonPred != Pred2->getSinglePredecessor())
1816 return nullptr;
1817
1818 // Otherwise, if this is a conditional branch, then we can use it!
1819 CondBrInst *BI = dyn_cast<CondBrInst>(CommonPred->getTerminator());
1820 if (!BI) return nullptr;
1821
1822 if (BI->getSuccessor(0) == Pred1) {
1823 IfTrue = Pred1;
1824 IfFalse = Pred2;
1825 } else {
1826 IfTrue = Pred2;
1827 IfFalse = Pred1;
1828 }
1829 return BI;
1830}
1831
1833 Value *NewCond = PBI->getCondition();
1834 // If this is a "cmp" instruction, only used for branching (and nowhere
1835 // else), then we can simply invert the predicate.
1836 if (NewCond->hasOneUse() && isa<CmpInst>(NewCond)) {
1837 CmpInst *CI = cast<CmpInst>(NewCond);
1839 } else
1840 NewCond = Builder.CreateNot(NewCond, NewCond->getName() + ".not");
1841
1842 PBI->setCondition(NewCond);
1843 PBI->swapSuccessors();
1844}
1845
1847 for (auto &BB : F) {
1848 auto *Term = BB.getTerminator();
1850 return false;
1851 }
1852 return true;
1853}
1854
1856 return Printable([BB](raw_ostream &OS) {
1857 if (!BB) {
1858 OS << "<nullptr>";
1859 return;
1860 }
1861 BB->printAsOperand(OS);
1862 });
1863}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Rewrite undef for PHI
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static BasicBlock * SplitBlockPredecessorsImpl(BasicBlock *BB, ArrayRef< BasicBlock * > Preds, const char *Suffix, DomTreeUpdater *DTU, DominatorTree *DT, LoopInfo *LI, MemorySSAUpdater *MSSAU, bool PreserveLCSSA)
static bool removeRedundantDbgInstrsUsingBackwardScan(BasicBlock *BB)
Remove redundant instructions within sequences of consecutive dbg.value instructions.
static bool removeUndefDbgAssignsFromEntryBlock(BasicBlock *BB)
Remove redundant undef dbg.assign intrinsic from an entry block using a forward scan.
static bool updateCycleLoopInfo(TI *LCI, BasicBlock *CallBrBlock, BasicBlock *CallBrTarget, BasicBlock *Succ)
Helper function to update the cycle or loop information after inserting a new block between a callbr ...
static void UpdateAnalysisInformation(BasicBlock *OldBB, BasicBlock *NewBB, ArrayRef< BasicBlock * > Preds, DomTreeUpdater *DTU, DominatorTree *DT, LoopInfo *LI, MemorySSAUpdater *MSSAU, bool PreserveLCSSA, bool &HasLoopExit)
Update DominatorTree, LoopInfo, and LCCSA analysis information.
static BasicBlock * SplitBlockImpl(BasicBlock *Old, BasicBlock::iterator SplitPt, DomTreeUpdater *DTU, DominatorTree *DT, LoopInfo *LI, MemorySSAUpdater *MSSAU, const Twine &BBName)
static bool removeRedundantDbgInstrsUsingForwardScan(BasicBlock *BB)
Remove redundant dbg.value instructions using a forward scan.
static void SplitLandingPadPredecessorsImpl(BasicBlock *OrigBB, ArrayRef< BasicBlock * > Preds, const char *Suffix1, const char *Suffix2, SmallVectorImpl< BasicBlock * > &NewBBs, DomTreeUpdater *DTU, DominatorTree *DT, LoopInfo *LI, MemorySSAUpdater *MSSAU, bool PreserveLCSSA)
static cl::opt< unsigned > MaxDeoptOrUnreachableSuccessorCheckDepth("max-deopt-or-unreachable-succ-check-depth", cl::init(8), cl::Hidden, cl::desc("Set the maximum path length when checking whether a basic block " "is followed by a block that either has a terminating " "deoptimizing call or is terminated with an unreachable"))
static void emptyAndDetachBlock(BasicBlock *BB, SmallVectorImpl< DominatorTree::UpdateType > *Updates, bool KeepOneInputPHIs)
Zap all the instructions in the block and replace them with an unreachable instruction and notify the...
static void UpdatePHINodes(BasicBlock *OrigBB, BasicBlock *NewBB, ArrayRef< BasicBlock * > Preds, Instruction *BI, bool HasLoopExit)
Update the PHI nodes in OrigBB to include the values coming from NewBB.
This file contains the declarations for the subclasses of Constant, which represent the different fla...
SmallPtrSet< const BasicBlock *, 8 > VisitedBlocks
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
static LVOptions Options
Definition LVOptions.cpp:25
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
#define T
uint64_t IntrinsicInst * II
#define P(N)
const SmallVectorImpl< MachineOperand > & Cond
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
#define LLVM_DEBUG(...)
Definition Debug.h:114
static const uint32_t IV[8]
Definition blake3_impl.h:83
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
size_t size() const
size - Get the array size.
Definition ArrayRef.h:142
bool empty() const
empty - Check if the array is empty.
Definition ArrayRef.h:137
LLVM Basic Block Representation.
Definition BasicBlock.h:62
iterator end()
Definition BasicBlock.h:483
iterator begin()
Instruction iterator methods.
Definition BasicBlock.h:470
iterator_range< const_phi_iterator > phis() const
Returns a range that iterates over the phis in the basic block.
Definition BasicBlock.h:539
LLVM_ABI const LandingPadInst * getLandingPadInst() const
Return the landingpad instruction associated with the landing pad.
LLVM_ABI const_iterator getFirstInsertionPt() const
Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...
LLVM_ABI BasicBlock * splitBasicBlock(iterator I, const Twine &BBName="")
Split the basic block into two basic blocks at the specified instruction.
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
bool empty() const
Definition BasicBlock.h:492
const Instruction & back() const
Definition BasicBlock.h:495
LLVM_ABI BasicBlock * splitBasicBlockBefore(iterator I, const Twine &BBName="")
Split the basic block into two basic blocks at the specified instruction and insert the new basic blo...
bool hasAddressTaken() const
Returns true if there are any uses of this basic block other than direct branches,...
Definition BasicBlock.h:696
LLVM_ABI InstListType::const_iterator getFirstNonPHIIt() const
Returns an iterator to the first instruction in this block that is not a PHINode instruction.
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=nullptr, BasicBlock *InsertBefore=nullptr)
Creates a new BasicBlock.
Definition BasicBlock.h:206
LLVM_ABI bool isEntryBlock() const
Return true if this is the entry block of the containing function.
LLVM_ABI InstListType::const_iterator getFirstNonPHIOrDbg(bool SkipPseudoOp=true) const
Returns a pointer to the first instruction in this block that is not a PHINode or a debug intrinsic,...
LLVM_ABI const BasicBlock * getUniqueSuccessor() const
Return the successor of this block if it has a unique successor.
LLVM_ABI const BasicBlock * getSinglePredecessor() const
Return the predecessor of this block if it has a single predecessor block.
const Instruction & front() const
Definition BasicBlock.h:493
LLVM_ABI const CallInst * getTerminatingDeoptimizeCall() const
Returns the call instruction calling @llvm.experimental.deoptimize prior to the terminating return in...
LLVM_ABI void replacePhiUsesWith(BasicBlock *Old, BasicBlock *New)
Update all phi nodes in this basic block to refer to basic block New instead of basic block Old.
LLVM_ABI const BasicBlock * getUniquePredecessor() const
Return the predecessor of this block if it has a unique predecessor block.
LLVM_ABI const BasicBlock * getSingleSuccessor() const
Return the successor of this block if it has a single successor.
InstListType::iterator iterator
Instruction iterators...
Definition BasicBlock.h:170
LLVM_ABI LLVMContext & getContext() const
Get the context in which this basic block lives.
size_t size() const
Definition BasicBlock.h:491
LLVM_ABI bool isLandingPad() const
Return true if this basic block is a landing pad.
LLVM_ABI bool canSplitPredecessors() const
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition BasicBlock.h:233
void splice(BasicBlock::iterator ToIt, BasicBlock *FromBB)
Transfer all instructions from FromBB to this basic block at ToIt.
Definition BasicBlock.h:668
LLVM_ABI void removePredecessor(BasicBlock *Pred, bool KeepOneInputPHIs=false)
Update PHI nodes in this BasicBlock before removal of predecessor Pred.
This class represents a no-op cast from one type to another.
CallBr instruction, tracking function calls that may not return control but instead transfer it to a ...
void setSuccessor(unsigned i, BasicBlock *NewSucc)
BasicBlock * getSuccessor(unsigned i) const
static CleanupPadInst * Create(Value *ParentPad, ArrayRef< Value * > Args={}, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static CleanupReturnInst * Create(Value *CleanupPad, BasicBlock *UnwindBB=nullptr, InsertPosition InsertBefore=nullptr)
This class is the base class for the comparison instructions.
Definition InstrTypes.h:664
void setPredicate(Predicate P)
Set the predicate for this instruction to the specified value.
Definition InstrTypes.h:768
Predicate getInversePredicate() const
For example, EQ -> NE, UGT -> ULE, SLT -> SGE, OEQ -> UNE, UGT -> OLE, OLT -> UGE,...
Definition InstrTypes.h:789
Conditional Branch instruction.
LLVM_ABI void swapSuccessors()
Swap the successors of this branch instruction.
static CondBrInst * Create(Value *Cond, BasicBlock *IfTrue, BasicBlock *IfFalse, InsertPosition InsertBefore=nullptr)
void setSuccessor(unsigned idx, BasicBlock *NewSucc)
void setCondition(Value *V)
Value * getCondition() const
BasicBlock * getSuccessor(unsigned i) const
Represents calls to the llvm.experimintal.convergence.* intrinsics.
DWARF expression.
Record of a variable value-assignment, aka a non instruction representation of the dbg....
Identifies a unique instance of a whole variable (discards/ignores fragment information).
Identifies a unique instance of a variable.
std::pair< iterator, bool > try_emplace(KeyT &&Key, Ts &&...Args)
Definition DenseMap.h:256
Implements a dense probed hash-table based set.
Definition DenseSet.h:279
iterator_range< iterator > children()
NodeT * getBlock() const
LLVM_ABI void deleteBB(BasicBlock *DelBB)
Delete DelBB.
DomTreeNodeBase< NodeT > * getRootNode()
getRootNode - This returns the entry node for the CFG of the function.
void changeImmediateDominator(DomTreeNodeBase< NodeT > *N, DomTreeNodeBase< NodeT > *NewIDom)
changeImmediateDominator - This method is used to update the dominator tree information when a node's...
DomTreeNodeBase< NodeT > * addNewBlock(NodeT *BB, NodeT *DomBB)
Add a new node to the dominator tree information.
void splitBlock(NodeT *NewBB)
splitBlock - BB is split and now it has one successor.
DomTreeNodeBase< NodeT > * setNewRoot(NodeT *BB)
Add a new node to the forward dominator tree and make it a new root.
void eraseNode(NodeT *BB)
eraseNode - Removes a node from the dominator tree.
DomTreeNodeBase< NodeT > * getNode(const NodeT *BB) const
getNode - return the (Post)DominatorTree node for the specified basic block.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition Dominators.h:159
LLVM_ABI bool isReachableFromEntry(const Use &U) const
Provide an overload for a Use.
LLVM_ABI bool dominates(const BasicBlock *BB, const Use &U) const
Return true if the (end of the) basic block BB dominates the use U.
This instruction extracts a struct member or array element value from an aggregate value.
DomTreeT & getDomTree()
Flush DomTree updates and return DomTree.
void applyUpdates(ArrayRef< UpdateT > Updates)
Submit updates to all available trees.
void flush()
Apply all pending updates to available trees and flush all BasicBlocks awaiting deletion.
bool hasDomTree() const
Returns true if it holds a DomTreeT.
void recalculate(FuncT &F)
Notify DTU that the entry block was replaced.
Module * getParent()
Get the module that this global value is contained inside of...
Common base class shared among various IRBuilders.
Definition IRBuilder.h:114
void SetInsertPoint(BasicBlock *TheBB)
This specifies that created instructions should be appended to the end of the specified block.
Definition IRBuilder.h:207
LLVM_ABI Value * CreateElementCount(Type *Ty, ElementCount EC)
Create an expression which evaluates to the number of elements in EC at runtime.
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
Definition IRBuilder.h:2787
LLVM_ABI Instruction * clone() const
Create a copy of 'this' instruction that is identical in all ways except the following:
LLVM_ABI unsigned getNumSuccessors() const LLVM_READONLY
Return the number of successors that this instruction has.
LLVM_ABI void insertBefore(InstListType::iterator InsertPos)
Insert an unlinked instruction into a basic block immediately before the specified position.
bool isEHPad() const
Return true if the instruction is a variety of EH-block.
LLVM_ABI InstListType::iterator eraseFromParent()
This method unlinks 'this' from the containing basic block and deletes it.
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
LLVM_ABI bool mayHaveSideEffects() const LLVM_READONLY
Return true if the instruction may have side effects.
LLVM_ABI void setMetadata(unsigned KindID, MDNode *Node)
Set the metadata of the specified kind to the specified node.
LLVM_ABI void moveBeforePreserving(InstListType::iterator MovePos)
Perform a moveBefore operation, while signalling that the caller intends to preserve the original ord...
void setDebugLoc(DebugLoc Loc)
Set the debug location information for this instruction.
bool isSpecialTerminator() const
LLVM_ABI InstListType::iterator insertInto(BasicBlock *ParentBB, InstListType::iterator It)
Inserts an unlinked instruction into ParentBB at position It and returns the iterator of the inserted...
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
The landingpad instruction holds all of the information necessary to generate correct exception handl...
BlockT * getLoopLatch() const
If there is a single latch block for this loop, return it.
unsigned getLoopDepth() const
Return the nesting level of this loop.
void addBasicBlockToLoop(BlockT *NewBB, LoopInfoBase< BlockT, LoopT > &LI)
This method is used by other analyses to update loop information.
void removeBlock(BlockT *BB)
This method completely removes BB from all data structures, including all of the Loop objects it is n...
bool isLoopHeader(const BlockT *BB) const
LoopT * getLoopFor(const BlockT *BB) const
Return the inner most loop that BB lives in.
Represents a single loop in the control flow graph.
Definition LoopInfo.h:40
Metadata node.
Definition Metadata.h:1080
Provides a lazy, caching interface for making common memory aliasing information queries,...
void invalidateCachedPredecessors()
Clears the PredIteratorCache info.
void removeInstruction(Instruction *InstToRemove)
Removes an instruction from the dependence analysis, updating the dependence of instructions that pre...
MemorySSA * getMemorySSA() const
Get handle on MemorySSA.
LLVM_ABI void moveAllAfterSpliceBlocks(BasicBlock *From, BasicBlock *To, Instruction *Start)
From block was spliced into From and To.
LLVM_ABI void moveAllAfterMergeBlocks(BasicBlock *From, BasicBlock *To, Instruction *Start)
From block was merged into To.
LLVM_ABI void moveToPlace(MemoryUseOrDef *What, BasicBlock *BB, MemorySSA::InsertionPlace Where)
LLVM_ABI void wireOldPredecessorsToNewImmediatePredecessor(BasicBlock *Old, BasicBlock *New, ArrayRef< BasicBlock * > Preds, bool IdenticalEdgesWereMerged=true)
A new empty BasicBlock (New) now branches directly to Old.
MemoryUseOrDef * getMemoryAccess(const Instruction *I) const
Given a memory Mod/Ref'ing instruction, get the MemorySSA access associated with it.
Definition MemorySSA.h:720
Class that has the common methods + fields of memory uses/defs.
Definition MemorySSA.h:250
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
LLVM_ABI void removeIncomingValueIf(function_ref< bool(unsigned)> Predicate, bool DeletePHIIfEmpty=true)
Remove all incoming values for which the predicate returns true.
LLVM_ABI Value * removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty=true)
Remove an incoming value.
Value * getIncomingValueForBlock(const BasicBlock *BB) const
BasicBlock * getIncomingBlock(unsigned i) const
Return incoming basic block number i.
Value * getIncomingValue(unsigned i) const
Return incoming value number x.
unsigned getNumIncomingValues() const
Return the number of incoming edges.
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
Simple wrapper around std::function<void(raw_ostream&)>.
Definition Printable.h:38
Return a value (possibly void), from a function.
Implements a dense probed hash-table based set with some number of buckets stored inline.
Definition DenseSet.h:291
size_type size() const
Definition SmallPtrSet.h:99
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
bool erase(PtrType Ptr)
Remove pointer from the set.
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
void insert_range(Range &&R)
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
iterator begin() const
bool contains(ConstPtrType Ptr) const
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
reference emplace_back(ArgTypes &&... Args)
void reserve(size_type N)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Provides information about what library functions are available for the current target.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition Twine.h:82
LLVM_ABI std::string str() const
Return the twine contents as a std::string.
Definition Twine.cpp:17
bool isTriviallyEmpty() const
Check if this twine is trivially empty; a false return value does not necessarily mean the twine is e...
Definition Twine.h:398
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:45
bool isTokenTy() const
Return true if this is 'token'.
Definition Type.h:234
Unconditional Branch instruction.
static UncondBrInst * Create(BasicBlock *IfTrue, InsertPosition InsertBefore=nullptr)
BasicBlock * getSuccessor(unsigned i=0) const
This function has undefined behavior.
A Use represents the edge between a Value definition and its users.
Definition Use.h:35
op_range operands()
Definition User.h:267
void setOperand(unsigned i, Value *Val)
Definition User.h:212
LLVM Value Representation.
Definition Value.h:75
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:256
LLVM_ABI void setName(const Twine &Name)
Change the name of the value.
Definition Value.cpp:397
bool hasOneUse() const
Return true if there is exactly one use of this value.
Definition Value.h:440
LLVM_ABI void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
Definition Value.cpp:553
LLVM_ABI void printAsOperand(raw_ostream &O, bool PrintType=true, const Module *M=nullptr) const
Print the name of this Value out to the specified raw_ostream.
bool use_empty() const
Definition Value.h:347
bool hasName() const
Definition Value.h:262
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
Definition Value.cpp:322
LLVM_ABI void takeName(Value *V)
Transfer the name from V to this value.
Definition Value.cpp:403
std::pair< iterator, bool > insert(const ValueT &V)
Definition DenseSet.h:202
bool contains(const_arg_type_t< ValueT > V) const
Check if the set contains the given element.
Definition DenseSet.h:175
const ParentTy * getParent() const
Definition ilist_node.h:34
self_iterator getIterator()
Definition ilist_node.h:123
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
Changed
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ Tail
Attemps to make calls as fast as possible while guaranteeing that tail call optimization can always b...
Definition CallingConv.h:76
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
LLVM_ABI AssignmentInstRange getAssignmentInsts(DIAssignID *ID)
Return a range of instructions (typically just one) that have ID as an attachment.
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
Definition Types.h:26
LLVM_ABI void ReplaceInstWithInst(BasicBlock *BB, BasicBlock::iterator &BI, Instruction *I)
Replace the instruction specified by BI with the instruction specified by I.
iterator_range< df_ext_iterator< T, SetTy > > depth_first_ext(const T &G, SetTy &S)
LLVM_ABI bool RemoveRedundantDbgInstrs(BasicBlock *BB)
Try to remove redundant dbg.value instructions from given basic block.
bool succ_empty(const Instruction *I)
Definition CFG.h:153
LLVM_ABI bool IsBlockFollowedByDeoptOrUnreachable(const BasicBlock *BB)
Check if we can prove that all paths starting from this block converge to a block that either has a @...
LLVM_ABI unsigned GetSuccessorNumber(const BasicBlock *BB, const BasicBlock *Succ)
Search for the specified successor of basic block BB and return its position in the terminator instru...
Definition CFG.cpp:89
@ Dead
Unused definition.
auto pred_end(const MachineBasicBlock *BB)
LLVM_ABI void detachDeadBlocks(ArrayRef< BasicBlock * > BBs, SmallVectorImpl< DominatorTree::UpdateType > *Updates, bool KeepOneInputPHIs=false)
Replace contents of every block in BBs with single unreachable instruction.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
LLVM_ABI bool hasOnlySimpleTerminator(const Function &F)
auto successors(const MachineBasicBlock *BB)
LLVM_ABI ReturnInst * FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB, BasicBlock *Pred, DomTreeUpdater *DTU=nullptr)
This method duplicates the specified return instruction into a predecessor which ends in an unconditi...
constexpr from_range_t from_range
LLVM_ABI std::pair< Instruction *, Value * > SplitBlockAndInsertSimpleForLoop(Value *End, BasicBlock::iterator SplitBefore)
Insert a for (int i = 0; i < End; i++) loop structure (with the exception that End is assumed > 0,...
LLVM_ABI BasicBlock * splitBlockBefore(BasicBlock *Old, BasicBlock::iterator SplitPt, DomTreeUpdater *DTU, LoopInfo *LI, MemorySSAUpdater *MSSAU, const Twine &BBName="")
Split the specified block at the specified instruction SplitPt.
LLVM_ABI Instruction * SplitBlockAndInsertIfElse(Value *Cond, BasicBlock::iterator SplitBefore, bool Unreachable, MDNode *BranchWeights=nullptr, DomTreeUpdater *DTU=nullptr, LoopInfo *LI=nullptr, BasicBlock *ElseBlock=nullptr)
Similar to SplitBlockAndInsertIfThen, but the inserted block is on the false path of the branch.
LLVM_ABI BasicBlock * SplitCallBrEdge(BasicBlock *CallBrBlock, BasicBlock *Succ, unsigned SuccIdx, DomTreeUpdater *DTU=nullptr, CycleInfo *CI=nullptr, LoopInfo *LI=nullptr, bool *UpdatedLI=nullptr)
Create a new intermediate target block for a callbr edge.
iterator_range< early_inc_iterator_impl< detail::IterOfRange< RangeT > > > make_early_inc_range(RangeT &&Range)
Make a range that does early increment to allow mutation of the underlying range without disrupting i...
Definition STLExtras.h:634
auto cast_or_null(const Y &Val)
Definition Casting.h:714
LLVM_ABI void DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU=nullptr, bool KeepOneInputPHIs=false)
Delete the specified block, which must have no predecessors.
LLVM_ABI void ReplaceInstWithValue(BasicBlock::iterator &BI, Value *V)
Replace all uses of an instruction (specified by BI) with a value, then remove and delete the origina...
LLVM_ABI BasicBlock * SplitKnownCriticalEdge(Instruction *TI, unsigned SuccNum, const CriticalEdgeSplittingOptions &Options=CriticalEdgeSplittingOptions(), const Twine &BBName="")
If it is known that an edge is critical, SplitKnownCriticalEdge can be called directly,...
DomTreeNodeBase< BasicBlock > DomTreeNode
Definition Dominators.h:94
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1746
LLVM_ABI bool DeleteDeadPHIs(BasicBlock *BB, const TargetLibraryInfo *TLI=nullptr, MemorySSAUpdater *MSSAU=nullptr)
Examine each PHI in the given block and delete it if it is dead.
LLVM_ABI CondBrInst * GetIfCondition(BasicBlock *BB, BasicBlock *&IfTrue, BasicBlock *&IfFalse)
Check whether BB is the merge point of a if-region.
LLVM_ABI bool HasLoopOrEntryConvergenceToken(const BasicBlock *BB)
Check if the given basic block contains any loop or entry convergent intrinsic instructions.
LLVM_ABI void InvertBranch(CondBrInst *PBI, IRBuilderBase &Builder)
auto reverse(ContainerTy &&C)
Definition STLExtras.h:408
LLVM_ABI bool EliminateUnreachableBlocks(Function &F, DomTreeUpdater *DTU=nullptr, bool KeepOneInputPHIs=false)
Delete all basic blocks from F that are not reachable from its entry node.
LLVM_ABI bool MergeBlockSuccessorsIntoGivenBlocks(SmallPtrSetImpl< BasicBlock * > &MergeBlocks, Loop *L=nullptr, DomTreeUpdater *DTU=nullptr, LoopInfo *LI=nullptr)
Merge block(s) sucessors, if possible.
LLVM_ABI void SplitBlockAndInsertIfThenElse(Value *Cond, BasicBlock::iterator SplitBefore, Instruction **ThenTerm, Instruction **ElseTerm, MDNode *BranchWeights=nullptr, DomTreeUpdater *DTU=nullptr, LoopInfo *LI=nullptr)
SplitBlockAndInsertIfThenElse is similar to SplitBlockAndInsertIfThen, but also creates the ElseBlock...
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition Debug.cpp:207
LLVM_ABI BasicBlock * ehAwareSplitEdge(BasicBlock *BB, BasicBlock *Succ, LandingPadInst *OriginalPad=nullptr, PHINode *LandingPadReplacement=nullptr, const CriticalEdgeSplittingOptions &Options=CriticalEdgeSplittingOptions(), const Twine &BBName="")
Split the edge connect the specficed blocks in the case that Succ is an Exception Handling Block.
auto succ_size(const MachineBasicBlock *BB)
SmallVector< ValueTypeFromRangeType< R >, Size > to_vector(R &&Range)
Given a range of type R, iterate the entire range and return a SmallVector with elements of the vecto...
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ABI void SplitLandingPadPredecessors(BasicBlock *OrigBB, ArrayRef< BasicBlock * > Preds, const char *Suffix, const char *Suffix2, SmallVectorImpl< BasicBlock * > &NewBBs, DomTreeUpdater *DTU=nullptr, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, bool PreserveLCSSA=false)
This method transforms the landing pad, OrigBB, by introducing two new basic blocks into the function...
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
LLVM_ABI BasicBlock * SplitBlockPredecessors(BasicBlock *BB, ArrayRef< BasicBlock * > Preds, const char *Suffix, DominatorTree *DT, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, bool PreserveLCSSA=false)
This method introduces at least one new basic block into the function and moves some of the predecess...
LLVM_ABI bool VerifyMemorySSA
Enables verification of MemorySSA.
Definition MemorySSA.cpp:84
LLVM_ABI void createPHIsForSplitLoopExit(ArrayRef< BasicBlock * > Preds, BasicBlock *SplitBB, BasicBlock *DestBB)
When a loop exit edge is split, LCSSA form may require new PHIs in the new exit block.
LLVM_ABI bool MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU=nullptr, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, MemoryDependenceResults *MemDep=nullptr, bool PredecessorWithTwoSuccessors=false, DominatorTree *DT=nullptr)
Attempts to merge a block into its predecessor, if possible.
LLVM_ABI bool isAssignmentTrackingEnabled(const Module &M)
Return true if assignment tracking is enabled for module M.
LLVM_ABI BasicBlock * SplitBlock(BasicBlock *Old, BasicBlock::iterator SplitPt, DominatorTree *DT, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, const Twine &BBName="")
Split the specified block at the specified instruction.
DWARFExpression::Operation Op
PredIterator< BasicBlock, Value::user_iterator > pred_iterator
Definition CFG.h:105
LLVM_ABI BasicBlock * SplitCriticalEdge(Instruction *TI, unsigned SuccNum, const CriticalEdgeSplittingOptions &Options=CriticalEdgeSplittingOptions(), const Twine &BBName="")
If this edge is a critical edge, insert a new node to split the critical edge.
LLVM_ABI bool FoldSingleEntryPHINodes(BasicBlock *BB, MemoryDependenceResults *MemDep=nullptr)
We know that BB has one predecessor.
ArrayRef(const T &OneElt) -> ArrayRef< T >
LLVM_ABI bool isCriticalEdge(const Instruction *TI, unsigned SuccNum, bool AllowIdenticalEdges=false)
Return true if the specified edge is a critical edge.
Definition CFG.cpp:105
LLVM_ABI unsigned SplitAllCriticalEdges(Function &F, const CriticalEdgeSplittingOptions &Options=CriticalEdgeSplittingOptions())
Loop over all of the edges in the CFG, breaking critical edges as they are found.
LLVM_ABI void updatePhiNodes(BasicBlock *DestBB, BasicBlock *OldPred, BasicBlock *NewPred, PHINode *Until=nullptr)
Replaces all uses of OldPred with the NewPred block in all PHINodes in a block.
LLVM_ABI Printable printBasicBlock(const BasicBlock *BB)
Print BasicBlock BB as an operand or print "<nullptr>" if BB is a nullptr.
auto pred_begin(const MachineBasicBlock *BB)
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
auto predecessors(const MachineBasicBlock *BB)
iterator_range< pointer_iterator< WrappedIteratorT > > make_pointer_range(RangeT &&Range)
Definition iterator.h:368
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Definition STLExtras.h:1947
LLVM_ABI bool RecursivelyDeleteDeadPHINode(PHINode *PN, const TargetLibraryInfo *TLI=nullptr, MemorySSAUpdater *MSSAU=nullptr)
If the specified value is an effectively dead PHI node, due to being a def-use chain of single-use no...
Definition Local.cpp:643
LLVM_ABI Instruction * SplitBlockAndInsertIfThen(Value *Cond, BasicBlock::iterator SplitBefore, bool Unreachable, MDNode *BranchWeights=nullptr, DomTreeUpdater *DTU=nullptr, LoopInfo *LI=nullptr, BasicBlock *ThenBlock=nullptr)
Split the containing block at the specified instruction - everything before SplitBefore stays in the ...
LLVM_ABI void DeleteDeadBlocks(ArrayRef< BasicBlock * > BBs, DomTreeUpdater *DTU=nullptr, bool KeepOneInputPHIs=false)
Delete the specified blocks from BB.
LLVM_ABI BasicBlock * SplitEdge(BasicBlock *From, BasicBlock *To, DominatorTree *DT=nullptr, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, const Twine &BBName="")
Split the edge connecting the specified blocks, and return the newly created basic block between From...
LLVM_ABI void setUnwindEdgeTo(Instruction *TI, BasicBlock *Succ)
Sets the unwind edge of an instruction to a particular successor.
static auto filterDbgVars(iterator_range< simple_ilist< DbgRecord >::iterator > R)
Filter the DbgRecord range to DbgVariableRecord types only and downcast.
LLVM_ABI void SplitBlockAndInsertForEachLane(ElementCount EC, Type *IndexTy, BasicBlock::iterator InsertBefore, std::function< void(IRBuilderBase &, Value *)> Func)
Utility function for performing a given action on each lane of a vector with EC elements.
GenericCycleInfo< SSAContext > CycleInfo
Definition CycleInfo.h:23
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition BitVector.h:872
Option class for critical edge splitting.
CriticalEdgeSplittingOptions & setPreserveLCSSA()