1 //===-- BasicBlock.cpp - Implement BasicBlock related methods -------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file implements the BasicBlock class for the IR library.
11 //===----------------------------------------------------------------------===//
13 #include "llvm/IR/BasicBlock.h"
14 #include "SymbolTableListTraitsImpl.h"
15 #include "llvm/ADT/STLExtras.h"
16 #include "llvm/IR/CFG.h"
17 #include "llvm/IR/Constants.h"
18 #include "llvm/IR/Instructions.h"
19 #include "llvm/IR/IntrinsicInst.h"
20 #include "llvm/IR/LLVMContext.h"
21 #include "llvm/IR/Type.h"
26 ValueSymbolTable
*BasicBlock::getValueSymbolTable() {
27 if (Function
*F
= getParent())
28 return F
->getValueSymbolTable();
32 LLVMContext
&BasicBlock::getContext() const {
33 return getType()->getContext();
36 template <> void llvm::invalidateParentIListOrdering(BasicBlock
*BB
) {
37 BB
->invalidateOrders();
40 // Explicit instantiation of SymbolTableListTraits since some of the methods
41 // are not in the public header file...
42 template class llvm::SymbolTableListTraits
<Instruction
>;
44 BasicBlock::BasicBlock(LLVMContext
&C
, const Twine
&Name
, Function
*NewParent
,
45 BasicBlock
*InsertBefore
)
46 : Value(Type::getLabelTy(C
), Value::BasicBlockVal
), Parent(nullptr) {
49 insertInto(NewParent
, InsertBefore
);
51 assert(!InsertBefore
&&
52 "Cannot insert block before another block with no function!");
57 void BasicBlock::insertInto(Function
*NewParent
, BasicBlock
*InsertBefore
) {
58 assert(NewParent
&& "Expected a parent");
59 assert(!Parent
&& "Already has a parent");
62 NewParent
->getBasicBlockList().insert(InsertBefore
->getIterator(), this);
64 NewParent
->getBasicBlockList().push_back(this);
67 BasicBlock::~BasicBlock() {
68 validateInstrOrdering();
70 // If the address of the block is taken and it is being deleted (e.g. because
71 // it is dead), this means that there is either a dangling constant expr
72 // hanging off the block, or an undefined use of the block (source code
73 // expecting the address of a label to keep the block alive even though there
74 // is no indirect branch). Handle these cases by zapping the BlockAddress
75 // nodes. There are no other possible uses at this point.
76 if (hasAddressTaken()) {
77 assert(!use_empty() && "There should be at least one blockaddress!");
78 Constant
*Replacement
=
79 ConstantInt::get(llvm::Type::getInt32Ty(getContext()), 1);
80 while (!use_empty()) {
81 BlockAddress
*BA
= cast
<BlockAddress
>(user_back());
82 BA
->replaceAllUsesWith(ConstantExpr::getIntToPtr(Replacement
,
84 BA
->destroyConstant();
88 assert(getParent() == nullptr && "BasicBlock still linked into the program!");
93 void BasicBlock::setParent(Function
*parent
) {
94 // Set Parent=parent, updating instruction symtab entries as appropriate.
95 InstList
.setSymTabObject(&Parent
, parent
);
98 iterator_range
<filter_iterator
<BasicBlock::const_iterator
,
99 std::function
<bool(const Instruction
&)>>>
100 BasicBlock::instructionsWithoutDebug(bool SkipPseudoOp
) const {
101 std::function
<bool(const Instruction
&)> Fn
= [=](const Instruction
&I
) {
102 return !isa
<DbgInfoIntrinsic
>(I
) &&
103 !(SkipPseudoOp
&& isa
<PseudoProbeInst
>(I
));
105 return make_filter_range(*this, Fn
);
109 filter_iterator
<BasicBlock::iterator
, std::function
<bool(Instruction
&)>>>
110 BasicBlock::instructionsWithoutDebug(bool SkipPseudoOp
) {
111 std::function
<bool(Instruction
&)> Fn
= [=](Instruction
&I
) {
112 return !isa
<DbgInfoIntrinsic
>(I
) &&
113 !(SkipPseudoOp
&& isa
<PseudoProbeInst
>(I
));
115 return make_filter_range(*this, Fn
);
118 filter_iterator
<BasicBlock::const_iterator
,
119 std::function
<bool(const Instruction
&)>>::difference_type
120 BasicBlock::sizeWithoutDebug() const {
121 return std::distance(instructionsWithoutDebug().begin(),
122 instructionsWithoutDebug().end());
125 void BasicBlock::removeFromParent() {
126 getParent()->getBasicBlockList().remove(getIterator());
129 iplist
<BasicBlock
>::iterator
BasicBlock::eraseFromParent() {
130 return getParent()->getBasicBlockList().erase(getIterator());
133 void BasicBlock::moveBefore(BasicBlock
*MovePos
) {
134 MovePos
->getParent()->getBasicBlockList().splice(
135 MovePos
->getIterator(), getParent()->getBasicBlockList(), getIterator());
138 void BasicBlock::moveAfter(BasicBlock
*MovePos
) {
139 MovePos
->getParent()->getBasicBlockList().splice(
140 ++MovePos
->getIterator(), getParent()->getBasicBlockList(),
144 const Module
*BasicBlock::getModule() const {
145 return getParent()->getParent();
148 const Instruction
*BasicBlock::getTerminator() const {
149 if (InstList
.empty() || !InstList
.back().isTerminator())
151 return &InstList
.back();
154 const CallInst
*BasicBlock::getTerminatingMustTailCall() const {
155 if (InstList
.empty())
157 const ReturnInst
*RI
= dyn_cast
<ReturnInst
>(&InstList
.back());
158 if (!RI
|| RI
== &InstList
.front())
161 const Instruction
*Prev
= RI
->getPrevNode();
165 if (Value
*RV
= RI
->getReturnValue()) {
169 // Look through the optional bitcast.
170 if (auto *BI
= dyn_cast
<BitCastInst
>(Prev
)) {
171 RV
= BI
->getOperand(0);
172 Prev
= BI
->getPrevNode();
173 if (!Prev
|| RV
!= Prev
)
178 if (auto *CI
= dyn_cast
<CallInst
>(Prev
)) {
179 if (CI
->isMustTailCall())
185 const CallInst
*BasicBlock::getTerminatingDeoptimizeCall() const {
186 if (InstList
.empty())
188 auto *RI
= dyn_cast
<ReturnInst
>(&InstList
.back());
189 if (!RI
|| RI
== &InstList
.front())
192 if (auto *CI
= dyn_cast_or_null
<CallInst
>(RI
->getPrevNode()))
193 if (Function
*F
= CI
->getCalledFunction())
194 if (F
->getIntrinsicID() == Intrinsic::experimental_deoptimize
)
200 const CallInst
*BasicBlock::getPostdominatingDeoptimizeCall() const {
201 const BasicBlock
* BB
= this;
202 SmallPtrSet
<const BasicBlock
*, 8> Visited
;
204 while (auto *Succ
= BB
->getUniqueSuccessor()) {
205 if (!Visited
.insert(Succ
).second
)
209 return BB
->getTerminatingDeoptimizeCall();
212 const Instruction
* BasicBlock::getFirstNonPHI() const {
213 for (const Instruction
&I
: *this)
214 if (!isa
<PHINode
>(I
))
219 const Instruction
*BasicBlock::getFirstNonPHIOrDbg(bool SkipPseudoOp
) const {
220 for (const Instruction
&I
: *this) {
221 if (isa
<PHINode
>(I
) || isa
<DbgInfoIntrinsic
>(I
))
224 if (SkipPseudoOp
&& isa
<PseudoProbeInst
>(I
))
233 BasicBlock::getFirstNonPHIOrDbgOrLifetime(bool SkipPseudoOp
) const {
234 for (const Instruction
&I
: *this) {
235 if (isa
<PHINode
>(I
) || isa
<DbgInfoIntrinsic
>(I
))
238 if (I
.isLifetimeStartOrEnd())
241 if (SkipPseudoOp
&& isa
<PseudoProbeInst
>(I
))
249 BasicBlock::const_iterator
BasicBlock::getFirstInsertionPt() const {
250 const Instruction
*FirstNonPHI
= getFirstNonPHI();
254 const_iterator InsertPt
= FirstNonPHI
->getIterator();
255 if (InsertPt
->isEHPad()) ++InsertPt
;
259 void BasicBlock::dropAllReferences() {
260 for (Instruction
&I
: *this)
261 I
.dropAllReferences();
264 const BasicBlock
*BasicBlock::getSinglePredecessor() const {
265 const_pred_iterator PI
= pred_begin(this), E
= pred_end(this);
266 if (PI
== E
) return nullptr; // No preds.
267 const BasicBlock
*ThePred
= *PI
;
269 return (PI
== E
) ? ThePred
: nullptr /*multiple preds*/;
272 const BasicBlock
*BasicBlock::getUniquePredecessor() const {
273 const_pred_iterator PI
= pred_begin(this), E
= pred_end(this);
274 if (PI
== E
) return nullptr; // No preds.
275 const BasicBlock
*PredBB
= *PI
;
277 for (;PI
!= E
; ++PI
) {
280 // The same predecessor appears multiple times in the predecessor list.
286 bool BasicBlock::hasNPredecessors(unsigned N
) const {
287 return hasNItems(pred_begin(this), pred_end(this), N
);
290 bool BasicBlock::hasNPredecessorsOrMore(unsigned N
) const {
291 return hasNItemsOrMore(pred_begin(this), pred_end(this), N
);
294 const BasicBlock
*BasicBlock::getSingleSuccessor() const {
295 const_succ_iterator SI
= succ_begin(this), E
= succ_end(this);
296 if (SI
== E
) return nullptr; // no successors
297 const BasicBlock
*TheSucc
= *SI
;
299 return (SI
== E
) ? TheSucc
: nullptr /* multiple successors */;
302 const BasicBlock
*BasicBlock::getUniqueSuccessor() const {
303 const_succ_iterator SI
= succ_begin(this), E
= succ_end(this);
304 if (SI
== E
) return nullptr; // No successors
305 const BasicBlock
*SuccBB
= *SI
;
307 for (;SI
!= E
; ++SI
) {
310 // The same successor appears multiple times in the successor list.
316 iterator_range
<BasicBlock::phi_iterator
> BasicBlock::phis() {
317 PHINode
*P
= empty() ? nullptr : dyn_cast
<PHINode
>(&*begin());
318 return make_range
<phi_iterator
>(P
, nullptr);
321 void BasicBlock::removePredecessor(BasicBlock
*Pred
,
322 bool KeepOneInputPHIs
) {
323 // Use hasNUsesOrMore to bound the cost of this assertion for complex CFGs.
324 assert((hasNUsesOrMore(16) || llvm::is_contained(predecessors(this), Pred
)) &&
325 "Pred is not a predecessor!");
327 // Return early if there are no PHI nodes to update.
328 if (empty() || !isa
<PHINode
>(begin()))
331 unsigned NumPreds
= cast
<PHINode
>(front()).getNumIncomingValues();
332 for (PHINode
&Phi
: make_early_inc_range(phis())) {
333 Phi
.removeIncomingValue(Pred
, !KeepOneInputPHIs
);
334 if (KeepOneInputPHIs
)
337 // If we have a single predecessor, removeIncomingValue may have erased the
342 // Try to replace the PHI node with a constant value.
343 if (Value
*PhiConstant
= Phi
.hasConstantValue()) {
344 Phi
.replaceAllUsesWith(PhiConstant
);
345 Phi
.eraseFromParent();
350 bool BasicBlock::canSplitPredecessors() const {
351 const Instruction
*FirstNonPHI
= getFirstNonPHI();
352 if (isa
<LandingPadInst
>(FirstNonPHI
))
354 // This is perhaps a little conservative because constructs like
355 // CleanupBlockInst are pretty easy to split. However, SplitBlockPredecessors
356 // cannot handle such things just yet.
357 if (FirstNonPHI
->isEHPad())
362 bool BasicBlock::isLegalToHoistInto() const {
363 auto *Term
= getTerminator();
364 // No terminator means the block is under construction.
368 // If the block has no successors, there can be no instructions to hoist.
369 assert(Term
->getNumSuccessors() > 0);
371 // Instructions should not be hoisted across exception handling boundaries.
372 return !Term
->isExceptionalTerminator();
375 bool BasicBlock::isEntryBlock() const {
376 const Function
*F
= getParent();
377 assert(F
&& "Block must have a parent function to use this API");
378 return this == &F
->getEntryBlock();
381 BasicBlock
*BasicBlock::splitBasicBlock(iterator I
, const Twine
&BBName
,
384 return splitBasicBlockBefore(I
, BBName
);
386 assert(getTerminator() && "Can't use splitBasicBlock on degenerate BB!");
387 assert(I
!= InstList
.end() &&
388 "Trying to get me to create degenerate basic block!");
390 BasicBlock
*New
= BasicBlock::Create(getContext(), BBName
, getParent(),
391 this->getNextNode());
393 // Save DebugLoc of split point before invalidating iterator.
394 DebugLoc Loc
= I
->getDebugLoc();
395 // Move all of the specified instructions from the original basic block into
396 // the new basic block.
397 New
->getInstList().splice(New
->end(), this->getInstList(), I
, end());
399 // Add a branch instruction to the newly formed basic block.
400 BranchInst
*BI
= BranchInst::Create(New
, this);
401 BI
->setDebugLoc(Loc
);
403 // Now we must loop through all of the successors of the New block (which
404 // _were_ the successors of the 'this' block), and update any PHI nodes in
405 // successors. If there were PHI nodes in the successors, then they need to
406 // know that incoming branches will be from New, not from Old (this).
408 New
->replaceSuccessorsPhiUsesWith(this, New
);
412 BasicBlock
*BasicBlock::splitBasicBlockBefore(iterator I
, const Twine
&BBName
) {
413 assert(getTerminator() &&
414 "Can't use splitBasicBlockBefore on degenerate BB!");
415 assert(I
!= InstList
.end() &&
416 "Trying to get me to create degenerate basic block!");
418 assert((!isa
<PHINode
>(*I
) || getSinglePredecessor()) &&
419 "cannot split on multi incoming phis");
421 BasicBlock
*New
= BasicBlock::Create(getContext(), BBName
, getParent(), this);
422 // Save DebugLoc of split point before invalidating iterator.
423 DebugLoc Loc
= I
->getDebugLoc();
424 // Move all of the specified instructions from the original basic block into
425 // the new basic block.
426 New
->getInstList().splice(New
->end(), this->getInstList(), begin(), I
);
428 // Loop through all of the predecessors of the 'this' block (which will be the
429 // predecessors of the New block), replace the specified successor 'this'
430 // block to point at the New block and update any PHI nodes in 'this' block.
431 // If there were PHI nodes in 'this' block, the PHI nodes are updated
432 // to reflect that the incoming branches will be from the New block and not
433 // from predecessors of the 'this' block.
434 for (BasicBlock
*Pred
: predecessors(this)) {
435 Instruction
*TI
= Pred
->getTerminator();
436 TI
->replaceSuccessorWith(this, New
);
437 this->replacePhiUsesWith(Pred
, New
);
439 // Add a branch instruction from "New" to "this" Block.
440 BranchInst
*BI
= BranchInst::Create(this, New
);
441 BI
->setDebugLoc(Loc
);
446 void BasicBlock::replacePhiUsesWith(BasicBlock
*Old
, BasicBlock
*New
) {
447 // N.B. This might not be a complete BasicBlock, so don't assume
448 // that it ends with a non-phi instruction.
449 for (iterator II
= begin(), IE
= end(); II
!= IE
; ++II
) {
450 PHINode
*PN
= dyn_cast
<PHINode
>(II
);
453 PN
->replaceIncomingBlockWith(Old
, New
);
457 void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock
*Old
,
459 Instruction
*TI
= getTerminator();
461 // Cope with being called on a BasicBlock that doesn't have a terminator
462 // yet. Clang's CodeGenFunction::EmitReturnBlock() likes to do this.
464 for (BasicBlock
*Succ
: successors(TI
))
465 Succ
->replacePhiUsesWith(Old
, New
);
468 void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock
*New
) {
469 this->replaceSuccessorsPhiUsesWith(this, New
);
472 bool BasicBlock::isLandingPad() const {
473 return isa
<LandingPadInst
>(getFirstNonPHI());
476 const LandingPadInst
*BasicBlock::getLandingPadInst() const {
477 return dyn_cast
<LandingPadInst
>(getFirstNonPHI());
480 Optional
<uint64_t> BasicBlock::getIrrLoopHeaderWeight() const {
481 const Instruction
*TI
= getTerminator();
482 if (MDNode
*MDIrrLoopHeader
=
483 TI
->getMetadata(LLVMContext::MD_irr_loop
)) {
484 MDString
*MDName
= cast
<MDString
>(MDIrrLoopHeader
->getOperand(0));
485 if (MDName
->getString().equals("loop_header_weight")) {
486 auto *CI
= mdconst::extract
<ConstantInt
>(MDIrrLoopHeader
->getOperand(1));
487 return Optional
<uint64_t>(CI
->getValue().getZExtValue());
490 return Optional
<uint64_t>();
493 BasicBlock::iterator
llvm::skipDebugIntrinsics(BasicBlock::iterator It
) {
494 while (isa
<DbgInfoIntrinsic
>(It
))
499 void BasicBlock::renumberInstructions() {
501 for (Instruction
&I
: *this)
504 // Set the bit to indicate that the instruction order valid and cached.
505 BasicBlockBits Bits
= getBasicBlockBits();
506 Bits
.InstrOrderValid
= true;
507 setBasicBlockBits(Bits
);
511 /// In asserts builds, this checks the numbering. In non-asserts builds, it
512 /// is defined as a no-op inline function in BasicBlock.h.
513 void BasicBlock::validateInstrOrdering() const {
514 if (!isInstrOrderValid())
516 const Instruction
*Prev
= nullptr;
517 for (const Instruction
&I
: *this) {
518 assert((!Prev
|| Prev
->comesBefore(&I
)) &&
519 "cached instruction ordering is incorrect");