LLVM 23.0.0git
BasicBlock.h
Go to the documentation of this file.
1//===- llvm/BasicBlock.h - Represent a basic block in the VM ----*- C++ -*-===//
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 file contains the declaration of the BasicBlock class.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_IR_BASICBLOCK_H
14#define LLVM_IR_BASICBLOCK_H
15
16#include "llvm-c/Types.h"
17#include "llvm/ADT/DenseMap.h"
18#include "llvm/ADT/Twine.h"
19#include "llvm/ADT/ilist.h"
20#include "llvm/ADT/ilist_node.h"
21#include "llvm/ADT/iterator.h"
24#include "llvm/IR/Instruction.h"
26#include "llvm/IR/Value.h"
28#include <cassert>
29#include <cstddef>
30#include <iterator>
31
32namespace llvm {
33
35class CallInst;
36class DataLayout;
37class Function;
38class LandingPadInst;
39class LLVMContext;
40class Module;
41class PHINode;
44class DbgMarker;
45
46/// LLVM Basic Block Representation
47///
48/// This represents a single basic block in LLVM. A basic block is simply a
49/// container of instructions that execute sequentially. Basic blocks are Values
50/// because they are referenced by instructions such as branches and switch
51/// tables. The type of a BasicBlock is "Type::LabelTy" because the basic block
52/// represents a label to which a branch can jump.
53///
54/// A well formed basic block is formed of a list of non-terminating
55/// instructions followed by a single terminator instruction. Terminator
56/// instructions may not occur in the middle of basic blocks, and must terminate
57/// the blocks. The BasicBlock class allows malformed basic blocks to occur
58/// because it may be useful in the intermediate stage of constructing or
59/// modifying a program. However, the verifier will ensure that basic blocks are
60/// "well formed".
61class BasicBlock final : public Value, // Basic blocks are data objects also
62 public ilist_node_with_parent<BasicBlock, Function> {
63public:
66
67private:
68 // Allow Function to renumber blocks.
69 friend class Function;
70 /// Per-function unique number.
71 unsigned Number = ~0u;
72
73 friend class BlockAddress;
74 friend class SymbolTableListTraits<BasicBlock>;
75
76 InstListType InstList;
77 Function *Parent;
78
79public:
80 /// Attach a DbgMarker to the given instruction. Enables the storage of any
81 /// debug-info at this position in the program.
84
85 /// Convert variable location debugging information stored in dbg.value
86 /// intrinsics into DbgMarkers / DbgRecords. Deletes all dbg.values in
87 /// the process and sets IsNewDbgInfoFormat = true.
89
90 /// Convert variable location debugging information stored in DbgMarkers and
91 /// DbgRecords into the dbg.value intrinsic representation. Sets
92 /// IsNewDbgInfoFormat = false.
94
95 unsigned getNumber() const {
96 assert(getParent() && "only basic blocks in functions have valid numbers");
97 return Number;
98 }
99
100 /// Record that the collection of DbgRecords in \p M "trails" after the last
101 /// instruction of this block. These are equivalent to dbg.value intrinsics
102 /// that exist at the end of a basic block with no terminator (a transient
103 /// state that occurs regularly).
105
106 /// Fetch the collection of DbgRecords that "trail" after the last instruction
107 /// of this block, see \ref setTrailingDbgRecords. If there are none, returns
108 /// nullptr.
110
111 /// Delete any trailing DbgRecords at the end of this block, see
112 /// \ref setTrailingDbgRecords.
114
115 LLVM_ABI void dumpDbgValues() const;
116
117 /// Return the DbgMarker for the position given by \p It, so that DbgRecords
118 /// can be inserted there. This will either be nullptr if not present, a
119 /// DbgMarker, or TrailingDbgRecords if It is end().
121
122 /// Return the DbgMarker for the position that comes after \p I. \see
123 /// BasicBlock::getMarker, this can be nullptr, a DbgMarker, or
124 /// TrailingDbgRecords if there is no next instruction.
126
127 /// Insert a DbgRecord into a block at the position given by \p I.
129
130 /// Insert a DbgRecord into a block at the position given by \p Here.
133
134 /// Eject any debug-info trailing at the end of a block. DbgRecords can
135 /// transiently be located "off the end" of a block if the blocks terminator
136 /// is temporarily removed. Once a terminator is re-inserted this method will
137 /// move such DbgRecords back to the right place (ahead of the terminator).
139
140 /// In rare circumstances instructions can be speculatively removed from
141 /// blocks, and then be re-inserted back into that position later. When this
142 /// happens in RemoveDIs debug-info mode, some special patching-up needs to
143 /// occur: inserting into the middle of a sequence of dbg.value intrinsics
144 /// does not have an equivalent with DbgRecords.
145 LLVM_ABI void
147 std::optional<DbgRecord::self_iterator> Pos);
148
149private:
150 void setParent(Function *parent);
151
152 /// Constructor.
153 ///
154 /// If the function parameter is specified, the basic block is automatically
155 /// inserted at either the end of the function (if InsertBefore is null), or
156 /// before the specified basic block.
157 LLVM_ABI explicit BasicBlock(LLVMContext &C, const Twine &Name = "",
158 Function *Parent = nullptr,
159 BasicBlock *InsertBefore = nullptr);
160
161public:
162 BasicBlock(const BasicBlock &) = delete;
163 BasicBlock &operator=(const BasicBlock &) = delete;
165
166 /// Get the context in which this basic block lives.
168
169 /// Instruction iterators...
174
175 // These functions and classes need access to the instruction list.
180 friend class llvm::SymbolTableListTraits<
181 llvm::Instruction, ilist_iterator_bits<true>, ilist_parent<BasicBlock>>;
182 friend class llvm::ilist_node_with_parent<llvm::Instruction, llvm::BasicBlock,
183 ilist_iterator_bits<true>,
184 ilist_parent<BasicBlock>>;
185
186 // Friendly methods that need to access us for the maintenence of
187 // debug-info attachments.
188 friend void Instruction::insertBefore(BasicBlock::iterator InsertPos);
189 friend void Instruction::insertAfter(Instruction *InsertPos);
190 friend void Instruction::insertAfter(BasicBlock::iterator InsertPos);
191 friend void Instruction::insertBefore(BasicBlock &BB,
192 InstListType::iterator InsertPos);
193 friend void Instruction::moveBeforeImpl(BasicBlock &BB,
194 InstListType::iterator I,
195 bool Preserve);
196 friend iterator_range<DbgRecord::self_iterator>
198 const Instruction *From, std::optional<DbgRecord::self_iterator> FromHere,
199 bool InsertAtHead);
200
201 /// Creates a new BasicBlock.
202 ///
203 /// If the Parent parameter is specified, the basic block is automatically
204 /// inserted at either the end of the function (if InsertBefore is 0), or
205 /// before the specified basic block.
206 static BasicBlock *Create(LLVMContext &Context, const Twine &Name = "",
207 Function *Parent = nullptr,
208 BasicBlock *InsertBefore = nullptr) {
209 return new BasicBlock(Context, Name, Parent, InsertBefore);
210 }
211
212 /// Return the enclosing method, or null if none.
213 const Function *getParent() const { return Parent; }
214 Function *getParent() { return Parent; }
215
216 /// Return the module owning the function this basic block belongs to, or
217 /// nullptr if the function does not have a module.
218 ///
219 /// Note: this is undefined behavior if the block does not have a parent.
220 LLVM_ABI const Module *getModule() const;
222 return const_cast<Module *>(
223 static_cast<const BasicBlock *>(this)->getModule());
224 }
225
226 /// Get the data layout of the module this basic block belongs to.
227 ///
228 /// Requires the basic block to have a parent module.
229 LLVM_ABI const DataLayout &getDataLayout() const;
230
231 /// Returns the terminator instruction if the block is well formed or
232 /// null if the block is not well formed.
234 if (InstList.empty() || !InstList.back().isTerminator())
235 return nullptr;
236 return &InstList.back();
237 }
239 return const_cast<Instruction *>(
240 static_cast<const BasicBlock *>(this)->getTerminator());
241 }
242
243 /// Returns the call instruction calling \@llvm.experimental.deoptimize
244 /// prior to the terminating return instruction of this basic block, if such
245 /// a call is present. Otherwise, returns null.
248 return const_cast<CallInst *>(
249 static_cast<const BasicBlock *>(this)->getTerminatingDeoptimizeCall());
250 }
251
252 /// Returns the call instruction calling \@llvm.experimental.deoptimize
253 /// that is present either in current basic block or in block that is a unique
254 /// successor to current block, if such call is present. Otherwise, returns
255 /// null.
258 return const_cast<CallInst *>(static_cast<const BasicBlock *>(this)
259 ->getPostdominatingDeoptimizeCall());
260 }
261
262 /// Returns the call instruction marked 'musttail' prior to the terminating
263 /// return instruction of this basic block, if such a call is present.
264 /// Otherwise, returns null.
267 return const_cast<CallInst *>(
268 static_cast<const BasicBlock *>(this)->getTerminatingMustTailCall());
269 }
270
271 /// Returns a pointer to the first instruction in this block that is not a
272 /// PHINode instruction.
273 ///
274 /// When adding instructions to the beginning of the basic block, they should
275 /// be added before the returned value, not before the first instruction,
276 /// which might be PHI. Returns 0 is there's no non-PHI instruction.
277 ///
278 /// Deprecated in favour of getFirstNonPHIIt, which returns an iterator that
279 /// preserves some debugging information.
280 LLVM_ABI LLVM_DEPRECATED("Use iterators as instruction positions",
281 "getFirstNonPHIIt") const
282 Instruction *getFirstNonPHI() const;
283 LLVM_ABI LLVM_DEPRECATED("Use iterators as instruction positions instead",
284 "getFirstNonPHIIt") Instruction *getFirstNonPHI();
285
286 /// Returns an iterator to the first instruction in this block that is not a
287 /// PHINode instruction.
288 ///
289 /// When adding instructions to the beginning of the basic block, they should
290 /// be added before the returned value, not before the first instruction,
291 /// which might be PHI. Returns end() if there's no non-PHI instruction.
292 ///
293 /// Avoid unwrapping the iterator to an Instruction* before inserting here,
294 /// as important debug-info is preserved in the iterator.
298 static_cast<const BasicBlock *>(this)->getFirstNonPHIIt().getNonConst();
299 It.setHeadBit(true);
300 return It;
301 }
302
303 /// Returns a pointer to the first instruction in this block that is not a
304 /// PHINode or a debug intrinsic, or any pseudo operation if \c SkipPseudoOp
305 /// is true.
307 getFirstNonPHIOrDbg(bool SkipPseudoOp = true) const;
308 InstListType::iterator getFirstNonPHIOrDbg(bool SkipPseudoOp = true) {
309 return static_cast<const BasicBlock *>(this)
310 ->getFirstNonPHIOrDbg(SkipPseudoOp)
311 .getNonConst();
312 }
313
314 /// Returns a pointer to the first instruction in this block that is not a
315 /// PHINode, a debug intrinsic, or a lifetime intrinsic, or any pseudo
316 /// operation if \c SkipPseudoOp is true.
318 getFirstNonPHIOrDbgOrLifetime(bool SkipPseudoOp = true) const;
320 getFirstNonPHIOrDbgOrLifetime(bool SkipPseudoOp = true) {
321 return static_cast<const BasicBlock *>(this)
322 ->getFirstNonPHIOrDbgOrLifetime(SkipPseudoOp)
323 .getNonConst();
324 }
325
326 /// Returns an iterator to the first instruction in this block that is
327 /// suitable for inserting a non-PHI instruction.
328 ///
329 /// In particular, it skips all PHIs and LandingPad instructions.
332 return static_cast<const BasicBlock *>(this)
334 .getNonConst();
335 }
336
337 /// Returns true if there is a valid insertion point for non-PHI instructions
338 /// in this block. Returns false for blocks that can only contain PHI nodes,
339 /// such as blocks with a catchswitch terminator.
340 ///
341 /// This is an O(1) check, unlike getFirstInsertionPt() which must scan
342 /// through all PHI nodes.
343 bool hasInsertionPt() const {
344 const Instruction *Term = getTerminator();
345 return Term && Term->getOpcode() != Instruction::CatchSwitch;
346 }
347
348 /// Returns an iterator to the first instruction in this block that is
349 /// not a PHINode, a debug intrinsic, a static alloca or any pseudo operation.
352 return static_cast<const BasicBlock *>(this)
354 .getNonConst();
355 }
356
357 /// Returns the first potential AsynchEH faulty instruction
358 /// currently it checks for loads/stores (which may dereference a null
359 /// pointer) and calls/invokes (which may propagate exceptions)
362 return const_cast<Instruction *>(
363 static_cast<const BasicBlock *>(this)->getFirstMayFaultInst());
364 }
365
366 /// Return a const iterator range over the instructions in the block, skipping
367 /// any debug instructions. Skip any pseudo operations as well if \c
368 /// SkipPseudoOp is true.
371 std::function<bool(const Instruction &)>>>
372 instructionsWithoutDebug(bool SkipPseudoOp = true) const;
373
374 /// Return an iterator range over the instructions in the block, skipping any
375 /// debug instructions. Skip and any pseudo operations as well if \c
376 /// SkipPseudoOp is true.
379 instructionsWithoutDebug(bool SkipPseudoOp = true);
380
381 /// Return the size of the basic block ignoring debug instructions
384 std::function<bool(const Instruction &)>>::difference_type
385 sizeWithoutDebug() const;
386
387 /// Unlink 'this' from the containing function, but do not delete it.
389
390 /// Unlink 'this' from the containing function and delete it.
391 ///
392 // \returns an iterator pointing to the element after the erased one.
394
395 /// Unlink this basic block from its current function and insert it into
396 /// the function that \p MovePos lives in, right before \p MovePos.
397 inline void moveBefore(BasicBlock *MovePos) {
398 moveBefore(MovePos->getIterator());
399 }
401
402 /// Unlink this basic block from its current function and insert it
403 /// right after \p MovePos in the function \p MovePos lives in.
404 LLVM_ABI void moveAfter(BasicBlock *MovePos);
405
406 /// Insert unlinked basic block into a function.
407 ///
408 /// Inserts an unlinked basic block into \c Parent. If \c InsertBefore is
409 /// provided, inserts before that basic block, otherwise inserts at the end.
410 ///
411 /// \pre \a getParent() is \c nullptr.
412 LLVM_ABI void insertInto(Function *Parent,
413 BasicBlock *InsertBefore = nullptr);
414
415 /// Return the predecessor of this block if it has a single predecessor
416 /// block. Otherwise return a null pointer.
418 BasicBlock *getSinglePredecessor() {
419 return const_cast<BasicBlock *>(
420 static_cast<const BasicBlock *>(this)->getSinglePredecessor());
421 }
422
423 /// Return the predecessor of this block if it has a unique predecessor
424 /// block. Otherwise return a null pointer.
425 ///
426 /// Note that unique predecessor doesn't mean single edge, there can be
427 /// multiple edges from the unique predecessor to this block (for example a
428 /// switch statement with multiple cases having the same destination).
430 BasicBlock *getUniquePredecessor() {
431 return const_cast<BasicBlock *>(
432 static_cast<const BasicBlock *>(this)->getUniquePredecessor());
433 }
434
435 /// Return true if this block has exactly N predecessors.
436 LLVM_ABI bool hasNPredecessors(unsigned N) const;
437
438 /// Return true if this block has N predecessors or more.
439 LLVM_ABI bool hasNPredecessorsOrMore(unsigned N) const;
440
441 /// Return the successor of this block if it has a single successor.
442 /// Otherwise return a null pointer.
443 ///
444 /// This method is analogous to getSinglePredecessor above.
446 BasicBlock *getSingleSuccessor() {
447 return const_cast<BasicBlock *>(
448 static_cast<const BasicBlock *>(this)->getSingleSuccessor());
449 }
450
451 /// Return the successor of this block if it has a unique successor.
452 /// Otherwise return a null pointer.
453 ///
454 /// This method is analogous to getUniquePredecessor above.
456 BasicBlock *getUniqueSuccessor() {
457 return const_cast<BasicBlock *>(
458 static_cast<const BasicBlock *>(this)->getUniqueSuccessor());
459 }
460
461 /// Print the basic block to an output stream with an optional
462 /// AssemblyAnnotationWriter.
463 LLVM_ABI void print(raw_ostream &OS, AssemblyAnnotationWriter *AAW = nullptr,
464 bool ShouldPreserveUseListOrder = false,
465 bool IsForDebug = false) const;
466
467 //===--------------------------------------------------------------------===//
468 /// Instruction iterator methods
469 ///
470 inline iterator begin() {
471 iterator It = InstList.begin();
472 // Set the head-inclusive bit to indicate that this iterator includes
473 // any debug-info at the start of the block. This is a no-op unless the
474 // appropriate CMake flag is set.
475 It.setHeadBit(true);
476 return It;
477 }
478 inline const_iterator begin() const {
479 const_iterator It = InstList.begin();
480 It.setHeadBit(true);
481 return It;
482 }
483 inline iterator end() { return InstList.end(); }
484 inline const_iterator end() const { return InstList.end(); }
485
486 inline reverse_iterator rbegin() { return InstList.rbegin(); }
487 inline const_reverse_iterator rbegin() const { return InstList.rbegin(); }
488 inline reverse_iterator rend() { return InstList.rend(); }
489 inline const_reverse_iterator rend() const { return InstList.rend(); }
490
491 inline size_t size() const { return InstList.size(); }
492 inline bool empty() const { return InstList.empty(); }
493 inline const Instruction &front() const { return InstList.front(); }
494 inline Instruction &front() { return InstList.front(); }
495 inline const Instruction &back() const { return InstList.back(); }
496 inline Instruction &back() { return InstList.back(); }
497
498 /// Iterator to walk just the phi nodes in the basic block.
499 template <typename PHINodeT = PHINode, typename BBIteratorT = iterator>
500 class phi_iterator_impl
501 : public iterator_facade_base<phi_iterator_impl<PHINodeT, BBIteratorT>,
502 std::forward_iterator_tag, PHINodeT> {
503 friend BasicBlock;
504
505 PHINodeT *PN;
506
507 phi_iterator_impl(PHINodeT *PN) : PN(PN) {}
508
509 public:
510 // Allow default construction to build variables, but this doesn't build
511 // a useful iterator.
512 phi_iterator_impl() = default;
513
514 // Allow conversion between instantiations where valid.
515 template <typename PHINodeU, typename BBIteratorU,
516 typename = std::enable_if_t<
517 std::is_convertible<PHINodeU *, PHINodeT *>::value>>
518 phi_iterator_impl(const phi_iterator_impl<PHINodeU, BBIteratorU> &Arg)
519 : PN(Arg.PN) {}
520
521 bool operator==(const phi_iterator_impl &Arg) const { return PN == Arg.PN; }
522
523 PHINodeT &operator*() const { return *PN; }
524
525 using phi_iterator_impl::iterator_facade_base::operator++;
526 phi_iterator_impl &operator++() {
527 assert(PN && "Cannot increment the end iterator!");
528 PN = dyn_cast<PHINodeT>(std::next(BBIteratorT(PN)));
529 return *this;
530 }
531 };
535
536 /// Returns a range that iterates over the phis in the basic block.
537 ///
538 /// Note that this cannot be used with basic blocks that have no terminator.
540 return const_cast<BasicBlock *>(this)->phis();
541 }
543
544private:
545 /// Return the underlying instruction list container.
546 /// This is deliberately private because we have implemented an adequate set
547 /// of functions to modify the list, including BasicBlock::splice(),
548 /// BasicBlock::erase(), Instruction::insertInto() etc.
549 const InstListType &getInstList() const { return InstList; }
550 InstListType &getInstList() { return InstList; }
551
552 /// Returns a pointer to a member of the instruction list.
553 /// This is private on purpose, just like `getInstList()`.
554 static InstListType BasicBlock::*getSublistAccess(Instruction *) {
555 return &BasicBlock::InstList;
556 }
557
558 /// Dedicated function for splicing debug-info: when we have an empty
559 /// splice (i.e. zero instructions), the caller may still intend any
560 /// debug-info in between the two "positions" to be spliced.
561 void spliceDebugInfoEmptyBlock(BasicBlock::iterator ToIt, BasicBlock *FromBB,
562 BasicBlock::iterator FromBeginIt,
563 BasicBlock::iterator FromEndIt);
564
565 /// Perform any debug-info specific maintenence for the given splice
566 /// activity. In the DbgRecord debug-info representation, debug-info is not
567 /// in instructions, and so it does not automatically move from one block
568 /// to another.
569 void spliceDebugInfo(BasicBlock::iterator ToIt, BasicBlock *FromBB,
570 BasicBlock::iterator FromBeginIt,
571 BasicBlock::iterator FromEndIt);
572 void spliceDebugInfoImpl(BasicBlock::iterator ToIt, BasicBlock *FromBB,
573 BasicBlock::iterator FromBeginIt,
574 BasicBlock::iterator FromEndIt);
575
576 enum {
577 HasAddressTaken = 1 << 0,
578 InstrOrderValid = 1 << 1,
579 };
580
581 void setHasAddressTaken(bool B) {
582 if (B)
583 SubclassOptionalData |= HasAddressTaken;
584 else
585 SubclassOptionalData &= ~HasAddressTaken;
586 }
587
588 /// Shadow Value::setValueSubclassData with a private forwarding method so
589 /// that any future subclasses cannot accidentally use it.
590 void setValueSubclassData(unsigned short D) {
592 }
593
594public:
595 /// Returns a pointer to the symbol table if one exists.
596 LLVM_ABI ValueSymbolTable *getValueSymbolTable();
597
598 /// Methods for support type inquiry through isa, cast, and dyn_cast.
599 static bool classof(const Value *V) {
600 return V->getValueID() == Value::BasicBlockVal;
601 }
602
603 /// Cause all subinstructions to "let go" of all the references that said
604 /// subinstructions are maintaining.
605 ///
606 /// This allows one to 'delete' a whole class at a time, even though there may
607 /// be circular references... first all references are dropped, and all use
608 /// counts go to zero. Then everything is delete'd for real. Note that no
609 /// operations are valid on an object that has "dropped all references",
610 /// except operator delete.
612
613 /// Update PHI nodes in this BasicBlock before removal of predecessor \p Pred.
614 /// Note that this function does not actually remove the predecessor.
615 ///
616 /// If \p KeepOneInputPHIs is true then don't remove PHIs that are left with
617 /// zero or one incoming values, and don't simplify PHIs with all incoming
618 /// values the same.
620 bool KeepOneInputPHIs = false);
621
622 LLVM_ABI bool canSplitPredecessors() const;
623
624 /// Split the basic block into two basic blocks at the specified instruction.
625 ///
626 /// If \p Before is true, splitBasicBlockBefore handles the
627 /// block splitting. Otherwise, execution proceeds as described below.
628 ///
629 /// Note that all instructions BEFORE the specified iterator
630 /// stay as part of the original basic block, an unconditional branch is added
631 /// to the original BB, and the rest of the instructions in the BB are moved
632 /// to the new BB, including the old terminator. The newly formed basic block
633 /// is returned. This function invalidates the specified iterator.
634 ///
635 /// Note that this only works on well formed basic blocks (must have a
636 /// terminator), and \p 'I' must not be the end of instruction list (which
637 /// would cause a degenerate basic block to be formed, having a terminator
638 /// inside of the basic block).
639 ///
640 /// Also note that this doesn't preserve any passes. To split blocks while
641 /// keeping loop information consistent, use the SplitBlock utility function.
642 LLVM_ABI BasicBlock *splitBasicBlock(iterator I, const Twine &BBName = "",
643 bool Before = false);
644 BasicBlock *splitBasicBlock(Instruction *I, const Twine &BBName = "",
645 bool Before = false) {
646 return splitBasicBlock(I->getIterator(), BBName, Before);
647 }
648
649 /// Split the basic block into two basic blocks at the specified instruction
650 /// and insert the new basic blocks as the predecessor of the current block.
651 ///
652 /// This function ensures all instructions AFTER and including the specified
653 /// iterator \p I are part of the original basic block. All Instructions
654 /// BEFORE the iterator \p I are moved to the new BB and an unconditional
655 /// branch is added to the new BB. The new basic block is returned.
656 ///
657 /// Note that this only works on well formed basic blocks (must have a
658 /// terminator), and \p 'I' must not be the end of instruction list (which
659 /// would cause a degenerate basic block to be formed, having a terminator
660 /// inside of the basic block). \p 'I' cannot be a iterator for a PHINode
661 /// with multiple incoming blocks.
662 ///
663 /// Also note that this doesn't preserve any passes. To split blocks while
664 /// keeping loop information consistent, use the SplitBlockBefore utility
665 /// function.
667 const Twine &BBName = "");
668 BasicBlock *splitBasicBlockBefore(Instruction *I, const Twine &BBName = "") {
669 return splitBasicBlockBefore(I->getIterator(), BBName);
670 }
671
672 /// Transfer all instructions from \p FromBB to this basic block at \p ToIt.
673 void splice(BasicBlock::iterator ToIt, BasicBlock *FromBB) {
674 splice(ToIt, FromBB, FromBB->begin(), FromBB->end());
675 }
676
677 /// Transfer one instruction from \p FromBB at \p FromIt to this basic block
678 /// at \p ToIt.
679 void splice(BasicBlock::iterator ToIt, BasicBlock *FromBB,
680 BasicBlock::iterator FromIt) {
681 auto FromItNext = std::next(FromIt);
682 // Single-element splice is a noop if destination == source.
683 if (ToIt == FromIt || ToIt == FromItNext)
684 return;
685 splice(ToIt, FromBB, FromIt, FromItNext);
686 }
687
688 /// Transfer a range of instructions that belong to \p FromBB from \p
689 /// FromBeginIt to \p FromEndIt, to this basic block at \p ToIt.
691 BasicBlock::iterator FromBeginIt,
692 BasicBlock::iterator FromEndIt);
693
694 /// Erases a range of instructions from \p FromIt to (not including) \p ToIt.
695 /// \Returns \p ToIt.
698
699 /// Returns true if there are any uses of this basic block other than
700 /// direct branches, switches, etc. to it.
701 bool hasAddressTaken() const {
702 return SubclassOptionalData & HasAddressTaken;
703 }
704
705 /// Update all phi nodes in this basic block to refer to basic block \p New
706 /// instead of basic block \p Old.
708
709 /// Update all phi nodes in this basic block's successors to refer to basic
710 /// block \p New instead of basic block \p Old.
712
713 /// Update all phi nodes in this basic block's successors to refer to basic
714 /// block \p New instead of to it.
716
717 /// Return true if this basic block is an exception handling block.
718 bool isEHPad() const { return getFirstNonPHIIt()->isEHPad(); }
719
720 /// Return true if this basic block is a landing pad.
721 ///
722 /// Being a ``landing pad'' means that the basic block is the destination of
723 /// the 'unwind' edge of an invoke instruction.
724 LLVM_ABI bool isLandingPad() const;
725
726 /// Return the landingpad instruction associated with the landing pad.
729 return const_cast<LandingPadInst *>(
730 static_cast<const BasicBlock *>(this)->getLandingPadInst());
731 }
732
733 /// Return true if it is legal to hoist instructions into this block.
734 LLVM_ABI bool isLegalToHoistInto() const;
735
736 /// Return true if this is the entry block of the containing function.
737 /// This method can only be used on blocks that have a parent function.
738 LLVM_ABI bool isEntryBlock() const;
739
740 LLVM_ABI std::optional<uint64_t> getIrrLoopHeaderWeight() const;
741
742 /// Returns true if the Order field of child Instructions is valid.
743 bool isInstrOrderValid() const {
744 return SubclassOptionalData & InstrOrderValid;
745 }
746
747 /// Mark instruction ordering invalid. Done on every instruction insert.
750 SubclassOptionalData &= ~InstrOrderValid;
751 }
752
753 /// Renumber instructions and mark the ordering as valid.
755
756 /// Asserts that instruction order numbers are marked invalid, or that they
757 /// are in ascending order. This is constant time if the ordering is invalid,
758 /// and linear in the number of instructions if the ordering is valid. Callers
759 /// should be careful not to call this in ways that make common operations
760 /// O(n^2). For example, it takes O(n) time to assign order numbers to
761 /// instructions, so the order should be validated no more than once after
762 /// each ordering to ensure that transforms have the same algorithmic
763 /// complexity when asserts are enabled as when they are disabled.
765};
766
767// Create wrappers for C Binding types (see CBindingWrapping.h).
769
770/// Advance \p It while it points to a debug instruction and return the result.
771/// This assumes that \p It is not at the end of a block.
773
774#ifdef NDEBUG
775/// In release builds, this is a no-op. For !NDEBUG builds, the checks are
776/// implemented in the .cpp file to avoid circular header deps.
777inline void BasicBlock::validateInstrOrdering() const {}
778#endif
779
780// Specialize DenseMapInfo for iterators, so that ththey can be installed into
781// maps and sets. The iterator is made up of its node pointer, and the
782// debug-info "head" bit.
783template <> struct DenseMapInfo<BasicBlock::iterator> {
785 return BasicBlock::iterator(nullptr);
786 }
787
789 BasicBlock::iterator It(nullptr);
790 It.setHeadBit(true);
791 return It;
792 }
793
794 static unsigned getHashValue(const BasicBlock::iterator &It) {
796 reinterpret_cast<void *>(It.getNodePtr())) ^
797 (unsigned)It.getHeadBit();
798 }
799
800 static bool isEqual(const BasicBlock::iterator &LHS,
801 const BasicBlock::iterator &RHS) {
802 return LHS == RHS && LHS.getHeadBit() == RHS.getHeadBit();
803 }
804};
805
806} // end namespace llvm
807
808#endif // LLVM_IR_BASICBLOCK_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
aarch64 promote const
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
#define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)
#define LLVM_ABI
Definition Compiler.h:213
#define LLVM_READONLY
Definition Compiler.h:322
#define LLVM_ABI_FOR_TEST
Definition Compiler.h:218
This file defines the DenseMap class.
#define I(x, y, z)
Definition MD5.cpp:57
Value * RHS
Value * LHS
Iterator to walk just the phi nodes in the basic block.
Definition BasicBlock.h:502
bool operator==(const phi_iterator_impl &Arg) const
Definition BasicBlock.h:521
phi_iterator_impl(const phi_iterator_impl< PHINodeU, BBIteratorU > &Arg)
Definition BasicBlock.h:518
phi_iterator_impl & operator++()
Definition BasicBlock.h:526
LLVM Basic Block Representation.
Definition BasicBlock.h:62
LLVM_ABI BasicBlock::iterator erase(BasicBlock::iterator FromIt, BasicBlock::iterator ToIt)
Erases a range of instructions from FromIt to (not including) ToIt.
LLVM_ABI LLVM_DEPRECATED("Use iterators as instruction positions", "getFirstNonPHIIt") const Instruction *getFirstNonPHI() const
Returns a pointer to the first instruction in this block that is not a PHINode instruction.
bool hasInsertionPt() const
Returns true if there is a valid insertion point for non-PHI instructions in this block.
Definition BasicBlock.h:343
phi_iterator_impl<> phi_iterator
Definition BasicBlock.h:532
LLVM_ABI void replaceSuccessorsPhiUsesWith(BasicBlock *Old, BasicBlock *New)
Update all phi nodes in this basic block's successors to refer to basic block New instead of basic bl...
BasicBlock(const BasicBlock &)=delete
iterator end()
Definition BasicBlock.h:483
unsigned getNumber() const
Definition BasicBlock.h:95
Instruction * getFirstMayFaultInst()
Definition BasicBlock.h:361
iterator begin()
Instruction iterator methods.
Definition BasicBlock.h:470
LLVM_ABI void deleteTrailingDbgRecords()
Delete any trailing DbgRecords at the end of this block, see setTrailingDbgRecords.
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 void setTrailingDbgRecords(DbgMarker *M)
Record that the collection of DbgRecords in M "trails" after the last instruction of this block.
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...
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
reverse_iterator rbegin()
Definition BasicBlock.h:486
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast.
Definition BasicBlock.h:599
InstListType::iterator getFirstNonPHIOrDbgOrLifetime(bool SkipPseudoOp=true)
Definition BasicBlock.h:320
LLVM_ABI void renumberInstructions()
Renumber instructions and mark the ordering as valid.
LLVM_ABI iterator_range< filter_iterator< BasicBlock::const_iterator, std::function< bool(const Instruction &)> > > instructionsWithoutDebug(bool SkipPseudoOp=true) const
Return a const iterator range over the instructions in the block, skipping any debug instructions.
bool empty() const
Definition BasicBlock.h:492
LLVM_ABI DbgMarker * createMarker(Instruction *I)
Attach a DbgMarker to the given instruction.
BasicBlock * splitBasicBlock(Instruction *I, const Twine &BBName="", bool Before=false)
Definition BasicBlock.h:644
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:701
LLVM_ABI InstListType::const_iterator getFirstNonPHIIt() const
Returns an iterator to the first instruction in this block that is not a PHINode instruction.
LLVM_ABI void insertDbgRecordBefore(DbgRecord *DR, InstListType::iterator Here)
Insert a DbgRecord into a block at the position given by Here.
BasicBlock * splitBasicBlockBefore(Instruction *I, const Twine &BBName="")
Definition BasicBlock.h:668
void invalidateOrders()
Mark instruction ordering invalid. Done on every instruction insert.
Definition BasicBlock.h:748
friend void Instruction::removeFromParent()
LLVM_ABI void convertToNewDbgValues()
Convert variable location debugging information stored in dbg.value intrinsics into DbgMarkers / DbgR...
LLVM_ABI void print(raw_ostream &OS, AssemblyAnnotationWriter *AAW=nullptr, bool ShouldPreserveUseListOrder=false, bool IsForDebug=false) const
Print the basic block to an output stream with an optional AssemblyAnnotationWriter.
InstListType::const_iterator const_iterator
Definition BasicBlock.h:171
BasicBlock * getUniqueSuccessor()
Definition BasicBlock.h:456
Module * getModule()
Definition BasicBlock.h:221
Instruction & front()
Definition BasicBlock.h:494
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=nullptr, BasicBlock *InsertBefore=nullptr)
Creates a new BasicBlock.
Definition BasicBlock.h:206
BasicBlock * getSingleSuccessor()
Definition BasicBlock.h:446
friend BasicBlock::iterator Instruction::eraseFromParent()
LLVM_ABI bool isEntryBlock() const
Return true if this is the entry block of the containing function.
LLVM_ABI ValueSymbolTable * getValueSymbolTable()
Returns a pointer to the symbol table if one exists.
BasicBlock * getUniquePredecessor()
Definition BasicBlock.h:430
LLVM_ABI void moveAfter(BasicBlock *MovePos)
Unlink this basic block from its current function and insert it right after MovePos in the function M...
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 bool hasNPredecessors(unsigned N) const
Return true if this block has exactly N predecessors.
LLVM_ABI BasicBlock * splitBasicBlock(iterator I, const Twine &BBName="", bool Before=false)
Split the basic block into two basic blocks at the specified instruction.
BasicBlock * getSinglePredecessor()
Definition BasicBlock.h:418
LLVM_ABI void convertFromNewDbgValues()
Convert variable location debugging information stored in DbgMarkers and DbgRecords into the dbg....
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.
LLVM_ABI std::optional< uint64_t > getIrrLoopHeaderWeight() const
const Instruction & front() const
Definition BasicBlock.h:493
LLVM_ABI void dumpDbgValues() const
LLVM_ABI const CallInst * getTerminatingDeoptimizeCall() const
Returns the call instruction calling @llvm.experimental.deoptimize prior to the terminating return in...
Instruction & back()
Definition BasicBlock.h:496
InstListType::reverse_iterator reverse_iterator
Definition BasicBlock.h:172
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.
SymbolTableList< Instruction, ilist_iterator_bits< true >, ilist_parent< BasicBlock > > InstListType
Definition BasicBlock.h:64
LLVM_ABI void flushTerminatorDbgRecords()
Eject any debug-info trailing at the end of a block.
void splice(BasicBlock::iterator ToIt, BasicBlock *FromBB, BasicBlock::iterator FromIt)
Transfer one instruction from FromBB at FromIt to this basic block at ToIt.
Definition BasicBlock.h:679
Function * getParent()
Definition BasicBlock.h:214
InstListType::iterator getFirstNonPHIOrDbg(bool SkipPseudoOp=true)
Definition BasicBlock.h:308
LLVM_ABI const DataLayout & getDataLayout() const
Get the data layout of the module this basic block belongs to.
const_reverse_iterator rend() const
Definition BasicBlock.h:489
reverse_iterator rend()
Definition BasicBlock.h:488
LLVM_ABI void insertDbgRecordAfter(DbgRecord *DR, Instruction *I)
Insert a DbgRecord into a block at the position given by I.
LLVM_ABI_FOR_TEST void validateInstrOrdering() const
Asserts that instruction order numbers are marked invalid, or that they are in ascending order.
LLVM_ABI DbgMarker * getMarker(InstListType::iterator It)
Return the DbgMarker for the position given by It, so that DbgRecords can be inserted there.
LLVM_ABI filter_iterator< BasicBlock::const_iterator, std::function< bool(constInstruction &)> >::difference_type sizeWithoutDebug() const
Return the size of the basic block ignoring debug instructions.
LLVM_ABI ~BasicBlock()
InstListType::iterator iterator
Instruction iterators...
Definition BasicBlock.h:170
LLVM_ABI LLVMContext & getContext() const
Get the context in which this basic block lives.
CallInst * getPostdominatingDeoptimizeCall()
Definition BasicBlock.h:257
const_iterator begin() const
Definition BasicBlock.h:478
LLVM_ABI const_iterator getFirstNonPHIOrDbgOrAlloca() const
Returns an iterator to the first instruction in this block that is not a PHINode, a debug intrinsic,...
friend class BlockAddress
Definition BasicBlock.h:73
Instruction * getTerminator()
Definition BasicBlock.h:238
BasicBlock & operator=(const BasicBlock &)=delete
iterator getFirstNonPHIOrDbgOrAlloca()
Definition BasicBlock.h:351
CallInst * getTerminatingDeoptimizeCall()
Definition BasicBlock.h:247
friend class Function
Definition BasicBlock.h:69
LLVM_ABI void dropAllReferences()
Cause all subinstructions to "let go" of all the references that said subinstructions are maintaining...
size_t size() const
Definition BasicBlock.h:491
LLVM_ABI void reinsertInstInDbgRecords(Instruction *I, std::optional< DbgRecord::self_iterator > Pos)
In rare circumstances instructions can be speculatively removed from blocks, and then be re-inserted ...
void moveBefore(BasicBlock *MovePos)
Unlink this basic block from its current function and insert it into the function that MovePos lives ...
Definition BasicBlock.h:397
LLVM_ABI InstListType::const_iterator getFirstNonPHIOrDbgOrLifetime(bool SkipPseudoOp=true) const
Returns a pointer to the first instruction in this block that is not a PHINode, a debug intrinsic,...
LLVM_ABI bool isLandingPad() const
Return true if this basic block is a landing pad.
InstListType::const_reverse_iterator const_reverse_iterator
Definition BasicBlock.h:173
bool isEHPad() const
Return true if this basic block is an exception handling block.
Definition BasicBlock.h:718
LLVM_ABI DbgMarker * getTrailingDbgRecords()
Fetch the collection of DbgRecords that "trail" after the last instruction of this block,...
CallInst * getTerminatingMustTailCall()
Definition BasicBlock.h:266
phi_iterator_impl< const PHINode, BasicBlock::const_iterator > const_phi_iterator
Definition BasicBlock.h:533
LLVM_ABI bool canSplitPredecessors() const
const_iterator end() const
Definition BasicBlock.h:484
LLVM_ABI const CallInst * getTerminatingMustTailCall() const
Returns the call instruction marked 'musttail' prior to the terminating return instruction of this ba...
friend BasicBlock::iterator Instruction::insertInto(BasicBlock *BB, BasicBlock::iterator It)
LLVM_ABI bool isLegalToHoistInto() const
Return true if it is legal to hoist instructions into this block.
LLVM_ABI bool hasNPredecessorsOrMore(unsigned N) const
Return true if this block has N predecessors or more.
bool isInstrOrderValid() const
Returns true if the Order field of child Instructions is valid.
Definition BasicBlock.h:743
LLVM_ABI const CallInst * getPostdominatingDeoptimizeCall() const
Returns the call instruction calling @llvm.experimental.deoptimize that is present either in current ...
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
LLVM_ABI DbgMarker * getNextMarker(Instruction *I)
Return the DbgMarker for the position that comes after I.
LLVM_ABI const Instruction * getFirstMayFaultInst() const
Returns the first potential AsynchEH faulty instruction currently it checks for loads/stores (which m...
void splice(BasicBlock::iterator ToIt, BasicBlock *FromBB)
Transfer all instructions from FromBB to this basic block at ToIt.
Definition BasicBlock.h:673
const_reverse_iterator rbegin() const
Definition BasicBlock.h:487
LandingPadInst * getLandingPadInst()
Definition BasicBlock.h:728
LLVM_ABI const Module * getModule() const
Return the module owning the function this basic block belongs to, or nullptr if the function does no...
iterator getFirstInsertionPt()
Definition BasicBlock.h:331
LLVM_ABI void removePredecessor(BasicBlock *Pred, bool KeepOneInputPHIs=false)
Update PHI nodes in this BasicBlock before removal of predecessor Pred.
This class represents a function call, abstracting a target machine's calling convention.
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
Per-instruction record of debug-info.
Base class for non-instruction debug metadata records that have positions within IR.
Record of a variable value-assignment, aka a non instruction representation of the dbg....
LLVM_ABI void removeFromParent()
This method unlinks 'this' from the containing basic block, but does not delete it.
LLVM_ABI iterator_range< simple_ilist< DbgRecord >::iterator > cloneDebugInfoFrom(const Instruction *From, std::optional< simple_ilist< DbgRecord >::iterator > FromHere=std::nullopt, bool InsertAtHead=false)
Clone any debug-info attached to From onto this instruction.
LLVM_ABI void insertBefore(InstListType::iterator InsertPos)
Insert an unlinked instruction into a basic block immediately before the specified position.
LLVM_ABI InstListType::iterator eraseFromParent()
This method unlinks 'this' from the containing basic block and deletes it.
LLVM_ABI void insertAfter(Instruction *InsertPos)
Insert an unlinked instruction into a basic block immediately after the specified instruction.
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...
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
List that automatically updates parent links and symbol tables.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition Twine.h:82
This class provides a symbol table of name/value pairs.
LLVM_ABI Value(Type *Ty, unsigned scid)
Definition Value.cpp:53
unsigned char SubclassOptionalData
Hold subclass data that can be dropped.
Definition Value.h:85
void setValueSubclassData(unsigned short D)
Definition Value.h:890
self_iterator getIterator()
Definition ilist_node.h:123
An ilist node that can access its parent list.
Definition ilist_node.h:316
typename base_list_type::const_reverse_iterator const_reverse_iterator
Definition ilist.h:124
typename base_list_type::reverse_iterator reverse_iterator
Definition ilist.h:123
typename base_list_type::iterator iterator
Definition ilist.h:121
typename base_list_type::const_iterator const_iterator
Definition ilist.h:122
CRTP base class which implements the entire standard iterator facade in terms of a minimal subset of ...
Definition iterator.h:80
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
struct LLVMOpaqueBasicBlock * LLVMBasicBlockRef
Represents a basic block of instructions in LLVM IR.
Definition Types.h:82
This file defines classes to implement an intrusive doubly linked list class (i.e.
This file defines the ilist_node class template, which is a convenient base class for creating classe...
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
This is an optimization pass for GlobalISel generic memory operations.
Definition Types.h:26
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 BasicBlock::iterator skipDebugIntrinsics(BasicBlock::iterator It)
Advance It while it points to a debug instruction and return the result.
filter_iterator_impl< WrappedIteratorT, PredicateT, detail::fwd_or_bidi_tag< WrappedIteratorT > > filter_iterator
Defines filter_iterator to a suitable specialization of filter_iterator_impl, based on the underlying...
Definition STLExtras.h:537
#define N
static BasicBlock::iterator getEmptyKey()
Definition BasicBlock.h:784
static unsigned getHashValue(const BasicBlock::iterator &It)
Definition BasicBlock.h:794
static bool isEqual(const BasicBlock::iterator &LHS, const BasicBlock::iterator &RHS)
Definition BasicBlock.h:800
static BasicBlock::iterator getTombstoneKey()
Definition BasicBlock.h:788
An information struct used to provide DenseMap with the various necessary components for a given valu...
Option to add extra bits to the ilist_iterator.
Option to add a pointer to this list's owner in every node.