LLVM
22.0.0git
lib
CodeGen
MachineDomTreeUpdater.cpp
Go to the documentation of this file.
1
//===- MachineDomTreeUpdater.cpp -----------------------------------------===//
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 implements the MachineDomTreeUpdater class, which provides a
10
// uniform way to update dominator tree related data structures.
11
//
12
//===----------------------------------------------------------------------===//
13
14
#include "
llvm/CodeGen/MachineDomTreeUpdater.h
"
15
#include "
llvm/Analysis/GenericDomTreeUpdaterImpl.h
"
16
#include "
llvm/CodeGen/MachinePostDominators.h
"
17
#include "
llvm/Support/Compiler.h
"
18
19
namespace
llvm
{
20
21
template
class
LLVM_EXPORT_TEMPLATE
GenericDomTreeUpdater
<
22
MachineDomTreeUpdater
,
MachineDominatorTree
,
MachinePostDominatorTree
>;
23
24
template
LLVM_EXPORT_TEMPLATE
void
25
GenericDomTreeUpdater
<
MachineDomTreeUpdater
,
MachineDominatorTree
,
26
MachinePostDominatorTree
>::recalculate(
MachineFunction
27
&MF);
28
29
template
LLVM_EXPORT_TEMPLATE
void
GenericDomTreeUpdater
<
30
MachineDomTreeUpdater
,
MachineDominatorTree
,
31
MachinePostDominatorTree
>::applyUpdatesImpl<
/*IsForward=*/
true
>();
32
template
LLVM_EXPORT_TEMPLATE
void
GenericDomTreeUpdater
<
33
MachineDomTreeUpdater
,
MachineDominatorTree
,
34
MachinePostDominatorTree
>::applyUpdatesImpl<
/*IsForward=*/
false
>();
35
36
bool
MachineDomTreeUpdater::forceFlushDeletedBB() {
37
if
(
DeletedBBs
.
empty
())
38
return
false
;
39
40
for
(
auto
*BB :
DeletedBBs
) {
41
eraseDelBBNode
(BB);
42
BB->eraseFromParent();
43
}
44
DeletedBBs
.
clear
();
45
return
true
;
46
}
47
48
// The DT and PDT require the nodes related to updates
49
// are not deleted when update functions are called.
50
// So MachineBasicBlock deletions must be pended when the
51
// UpdateStrategy is Lazy. When the UpdateStrategy is
52
// Eager, the MachineBasicBlock will be deleted immediately.
53
void
MachineDomTreeUpdater::deleteBB
(
MachineBasicBlock
*DelBB) {
54
validateDeleteBB(DelBB);
55
if
(
Strategy
== UpdateStrategy::Lazy) {
56
DeletedBBs
.insert(DelBB);
57
return
;
58
}
59
60
eraseDelBBNode
(DelBB);
61
DelBB->
eraseFromParent
();
62
}
63
64
void
MachineDomTreeUpdater::validateDeleteBB(
MachineBasicBlock
*DelBB) {
65
assert
(DelBB &&
"Invalid push_back of nullptr DelBB."
);
66
assert
(DelBB->
pred_empty
() &&
"DelBB has one or more predecessors."
);
67
}
68
69
}
// namespace llvm
assert
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Compiler.h
LLVM_EXPORT_TEMPLATE
#define LLVM_EXPORT_TEMPLATE
Definition
Compiler.h:215
GenericDomTreeUpdaterImpl.h
MachineDomTreeUpdater.h
MachinePostDominators.h
llvm::GenericDomTreeUpdater
Definition
GenericDomTreeUpdater.h:24
llvm::GenericDomTreeUpdater< MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree >::DeletedBBs
SmallPtrSet< BasicBlockT *, 8 > DeletedBBs
Definition
GenericDomTreeUpdater.h:238
llvm::GenericDomTreeUpdater< MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree >::eraseDelBBNode
void eraseDelBBNode(BasicBlockT *DelBB)
llvm::GenericDomTreeUpdater< MachineDomTreeUpdater, MachineDominatorTree, MachinePostDominatorTree >::Strategy
const UpdateStrategy Strategy
Definition
GenericDomTreeUpdater.h:237
llvm::MachineBasicBlock
Definition
MachineBasicBlock.h:122
llvm::MachineBasicBlock::pred_empty
bool pred_empty() const
Definition
MachineBasicBlock.h:442
llvm::MachineBasicBlock::eraseFromParent
LLVM_ABI void eraseFromParent()
This method unlinks 'this' from the containing function and deletes it.
Definition
MachineBasicBlock.cpp:1483
llvm::MachineDomTreeUpdater
Definition
MachineDomTreeUpdater.h:43
llvm::MachineDomTreeUpdater::deleteBB
LLVM_ABI void deleteBB(MachineBasicBlock *DelBB)
Delete DelBB.
Definition
MachineDomTreeUpdater.cpp:53
llvm::MachineDominatorTree
DominatorTree Class - Concrete subclass of DominatorTreeBase that is used to compute a normal dominat...
Definition
MachineDominators.h:71
llvm::MachineFunction
Definition
MachineFunction.h:286
llvm::MachinePostDominatorTree
MachinePostDominatorTree - an analysis pass wrapper for DominatorTree used to compute the post-domina...
Definition
MachinePostDominators.h:49
llvm::SmallPtrSetImplBase::clear
void clear()
Definition
SmallPtrSet.h:102
llvm::SmallPtrSetImplBase::empty
bool empty() const
Definition
SmallPtrSet.h:98
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition
AddressRanges.h:18
Generated on
for LLVM by
1.14.0