Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
Dominators.h
Go to the documentation of this file.
1//===- Dominators.h - Dominator Info Calculation ----------------*- 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 defines the DominatorTree class, which provides fast and efficient
10// dominance queries.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_IR_DOMINATORS_H
15#define LLVM_IR_DOMINATORS_H
16
17#include "llvm/ADT/APInt.h"
18#include "llvm/ADT/ArrayRef.h"
19#include "llvm/ADT/DenseMapInfo.h"
20#include "llvm/ADT/DepthFirstIterator.h"
21#include "llvm/ADT/Hashing.h"
22#include "llvm/ADT/PointerIntPair.h"
23#include "llvm/ADT/SmallVector.h"
24#include "llvm/ADT/Twine.h"
25#include "llvm/ADT/ilist_iterator.h"
26#include "llvm/IR/BasicBlock.h"
27#include "llvm/IR/CFG.h"
28#include "llvm/IR/PassManager.h"
29#include "llvm/IR/Use.h"
30#include "llvm/Pass.h"
31#include "llvm/Support/CFGDiff.h"
32#include "llvm/Support/CFGUpdate.h"
33#include "llvm/Support/GenericDomTree.h"
34#include <algorithm>
35#include <utility>
36
37namespacellvm {
38
39classFunction;
40classInstruction;
41classModule;
42classValue;
43classraw_ostream;
44template <class GraphType>structGraphTraits;
45
46externtemplateclassDomTreeNodeBase<BasicBlock>;
47externtemplateclassDominatorTreeBase<BasicBlock, false>;// DomTree
48externtemplateclassDominatorTreeBase<BasicBlock, true>;// PostDomTree
49
50externtemplateclasscfg::Update<BasicBlock *>;
51
52namespaceDomTreeBuilder {
53usingBBDomTree =DomTreeBase<BasicBlock>;
54usingBBPostDomTree =PostDomTreeBase<BasicBlock>;
55
56usingBBUpdates =ArrayRef<llvm::cfg::Update<BasicBlock *>>;
57
58usingBBDomTreeGraphDiff =GraphDiff<BasicBlock *, false>;
59usingBBPostDomTreeGraphDiff =GraphDiff<BasicBlock *, true>;
60
61externtemplatevoid Calculate<BBDomTree>(BBDomTree &DT);
62externtemplatevoid CalculateWithUpdates<BBDomTree>(BBDomTree &DT,
63BBUpdates U);
64
65externtemplatevoid Calculate<BBPostDomTree>(BBPostDomTree &DT);
66
67externtemplatevoid InsertEdge<BBDomTree>(BBDomTree &DT,BasicBlock *From,
68BasicBlock *To);
69externtemplatevoid InsertEdge<BBPostDomTree>(BBPostDomTree &DT,
70BasicBlock *From,
71BasicBlock *To);
72
73externtemplatevoid DeleteEdge<BBDomTree>(BBDomTree &DT,BasicBlock *From,
74BasicBlock *To);
75externtemplatevoid DeleteEdge<BBPostDomTree>(BBPostDomTree &DT,
76BasicBlock *From,
77BasicBlock *To);
78
79externtemplatevoid ApplyUpdates<BBDomTree>(BBDomTree &DT,
80BBDomTreeGraphDiff &,
81BBDomTreeGraphDiff *);
82externtemplatevoid ApplyUpdates<BBPostDomTree>(BBPostDomTree &DT,
83BBPostDomTreeGraphDiff &,
84BBPostDomTreeGraphDiff *);
85
86externtemplatebool Verify<BBDomTree>(constBBDomTree &DT,
87BBDomTree::VerificationLevel VL);
88externtemplatebool Verify<BBPostDomTree>(constBBPostDomTree &DT,
89BBPostDomTree::VerificationLevel VL);
90}// namespace DomTreeBuilder
91
92usingDomTreeNode =DomTreeNodeBase<BasicBlock>;
93
94classBasicBlockEdge {
95constBasicBlock *Start;
96constBasicBlock *End;
97
98public:
99BasicBlockEdge(constBasicBlock *Start_,constBasicBlock *End_) :
100 Start(Start_),End(End_) {}
101
102BasicBlockEdge(const std::pair<BasicBlock *, BasicBlock *> &Pair)
103 : Start(Pair.first),End(Pair.second) {}
104
105BasicBlockEdge(const std::pair<const BasicBlock *, const BasicBlock *> &Pair)
106 : Start(Pair.first),End(Pair.second) {}
107
108constBasicBlock *getStart() const{
109return Start;
110 }
111
112constBasicBlock *getEnd() const{
113returnEnd;
114 }
115
116 /// Check if this is the only edge between Start and End.
117bool isSingleEdge()const;
118};
119
120template <>structDenseMapInfo<BasicBlockEdge> {
121usingBBInfo =DenseMapInfo<const BasicBlock *>;
122
123staticunsignedgetHashValue(constBasicBlockEdge *V);
124
125staticinlineBasicBlockEdgegetEmptyKey() {
126returnBasicBlockEdge(BBInfo::getEmptyKey(), BBInfo::getEmptyKey());
127 }
128
129staticinlineBasicBlockEdgegetTombstoneKey() {
130returnBasicBlockEdge(BBInfo::getTombstoneKey(), BBInfo::getTombstoneKey());
131 }
132
133staticunsignedgetHashValue(constBasicBlockEdge &Edge) {
134returnhash_combine(BBInfo::getHashValue(Edge.getStart()),
135 BBInfo::getHashValue(Edge.getEnd()));
136 }
137
138staticboolisEqual(constBasicBlockEdge &LHS,constBasicBlockEdge &RHS) {
139return BBInfo::isEqual(LHS.getStart(),RHS.getStart()) &&
140 BBInfo::isEqual(LHS.getEnd(),RHS.getEnd());
141 }
142};
143
144/// Concrete subclass of DominatorTreeBase that is used to compute a
145/// normal dominator tree.
146///
147/// Definition: A block is said to be forward statically reachable if there is
148/// a path from the entry of the function to the block. A statically reachable
149/// block may become statically unreachable during optimization.
150///
151/// A forward unreachable block may appear in the dominator tree, or it may
152/// not. If it does, dominance queries will return results as if all reachable
153/// blocks dominate it. When asking for a Node corresponding to a potentially
154/// unreachable block, calling code must handle the case where the block was
155/// unreachable and the result of getNode() is nullptr.
156///
157/// Generally, a block known to be unreachable when the dominator tree is
158/// constructed will not be in the tree. One which becomes unreachable after
159/// the dominator tree is initially constructed may still exist in the tree,
160/// even if the tree is properly updated. Calling code should not rely on the
161/// preceding statements; this is stated only to assist human understanding.
162classDominatorTree :publicDominatorTreeBase<BasicBlock, false> {
163public:
164usingBase =DominatorTreeBase<BasicBlock, false>;
165
166DominatorTree() =default;
167explicitDominatorTree(Function &F) { recalculate(F); }
168explicitDominatorTree(DominatorTree &DT,DomTreeBuilder::BBUpdates U) {
169 recalculate(*DT.Parent, U);
170 }
171
172 /// Handle invalidation explicitly.
173bool invalidate(Function &F,constPreservedAnalyses &PA,
174FunctionAnalysisManager::Invalidator &);
175
176// Ensure base-class overloads are visible.
177usingBase::dominates;
178
179 /// Return true if the (end of the) basic block BB dominates the use U.
180booldominates(constBasicBlock *BB,constUse &U)const;
181
182 /// Return true if value Def dominates use U, in the sense that Def is
183 /// available at U, and could be substituted as the used value without
184 /// violating the SSA dominance requirement.
185 ///
186 /// In particular, it is worth noting that:
187 /// * Non-instruction Defs dominate everything.
188 /// * Def does not dominate a use in Def itself (outside of degenerate cases
189 /// like unreachable code or trivial phi cycles).
190 /// * Invoke Defs only dominate uses in their default destination.
191booldominates(constValue *Def,constUse &U)const;
192
193 /// Return true if value Def dominates all possible uses inside instruction
194 /// User. Same comments as for the Use-based API apply.
195booldominates(constValue *Def,constInstruction *User)const;
196booldominates(constValue *Def,BasicBlock::iteratorUser) const{
197returndominates(Def, &*User);
198 }
199
200 /// Returns true if Def would dominate a use in any instruction in BB.
201 /// If Def is an instruction in BB, then Def does not dominate BB.
202 ///
203 /// Does not accept Value to avoid ambiguity with dominance checks between
204 /// two basic blocks.
205booldominates(constInstruction *Def,constBasicBlock *BB)const;
206
207 /// Return true if an edge dominates a use.
208 ///
209 /// If BBE is not a unique edge between start and end of the edge, it can
210 /// never dominate the use.
211booldominates(constBasicBlockEdge &BBE,constUse &U)const;
212booldominates(constBasicBlockEdge &BBE,constBasicBlock *BB)const;
213 /// Returns true if edge \p BBE1 dominates edge \p BBE2.
214booldominates(constBasicBlockEdge &BBE1,constBasicBlockEdge &BBE2)const;
215
216// Ensure base class overloads are visible.
217usingBase::isReachableFromEntry;
218
219 /// Provide an overload for a Use.
220bool isReachableFromEntry(constUse &U)const;
221
222// Ensure base class overloads are visible.
223usingBase::findNearestCommonDominator;
224
225 /// Find the nearest instruction I that dominates both I1 and I2, in the sense
226 /// that a result produced before I will be available at both I1 and I2.
227Instruction *findNearestCommonDominator(Instruction *I1,
228Instruction *I2)const;
229
230// Pop up a GraphViz/gv window with the Dominator Tree rendered using `dot`.
231void viewGraph(constTwine &Name,constTwine &Title);
232void viewGraph();
233};
234
235//===-------------------------------------
236// DominatorTree GraphTraits specializations so the DominatorTree can be
237// iterable by generic graph iterators.
238
239template <class Node,class ChildIterator>structDomTreeGraphTraitsBase {
240usingNodeRef =Node *;
241usingChildIteratorType = ChildIterator;
242usingnodes_iterator =df_iterator<Node *, df_iterator_default_set<Node*>>;
243
244staticNodeRefgetEntryNode(NodeRefN) {returnN; }
245staticChildIteratorTypechild_begin(NodeRefN) {returnN->begin(); }
246staticChildIteratorTypechild_end(NodeRefN) {returnN->end(); }
247
248staticnodes_iteratornodes_begin(NodeRefN) {
249returndf_begin(getEntryNode(N));
250 }
251
252staticnodes_iteratornodes_end(NodeRefN) {returndf_end(getEntryNode(N)); }
253};
254
255template <>
256structGraphTraits<DomTreeNode *>
257 :publicDomTreeGraphTraitsBase<DomTreeNode, DomTreeNode::const_iterator> {
258};
259
260template <>
261structGraphTraits<constDomTreeNode *>
262 :publicDomTreeGraphTraitsBase<constDomTreeNode,
263DomTreeNode::const_iterator> {};
264
265template <>structGraphTraits<DominatorTree*>
266 :publicGraphTraits<DomTreeNode*> {
267staticNodeRefgetEntryNode(DominatorTree *DT) {return DT->getRootNode(); }
268
269staticnodes_iteratornodes_begin(DominatorTree *N) {
270returndf_begin(getEntryNode(N));
271 }
272
273staticnodes_iteratornodes_end(DominatorTree *N) {
274returndf_end(getEntryNode(N));
275 }
276};
277
278/// Analysis pass which computes a \c DominatorTree.
279classDominatorTreeAnalysis :publicAnalysisInfoMixin<DominatorTreeAnalysis> {
280friendAnalysisInfoMixin<DominatorTreeAnalysis>;
281staticAnalysisKey Key;
282
283public:
284 /// Provide the result typedef for this analysis pass.
285usingResult =DominatorTree;
286
287 /// Run the analysis pass over a function and produce a dominator tree.
288DominatorTreerun(Function &F,FunctionAnalysisManager &);
289};
290
291/// Printer pass for the \c DominatorTree.
292classDominatorTreePrinterPass
293 :publicPassInfoMixin<DominatorTreePrinterPass> {
294raw_ostream &OS;
295
296public:
297explicitDominatorTreePrinterPass(raw_ostream &OS);
298
299PreservedAnalysesrun(Function &F,FunctionAnalysisManager &AM);
300
301staticboolisRequired() {returntrue; }
302};
303
304/// Verifier pass for the \c DominatorTree.
305structDominatorTreeVerifierPass :PassInfoMixin<DominatorTreeVerifierPass> {
306PreservedAnalysesrun(Function &F,FunctionAnalysisManager &AM);
307staticboolisRequired() {returntrue; }
308};
309
310/// Enables verification of dominator trees.
311///
312/// This check is expensive and is disabled by default. `-verify-dom-info`
313/// allows selectively enabling the check without needing to recompile.
314externboolVerifyDomInfo;
315
316/// Legacy analysis pass which computes a \c DominatorTree.
317classDominatorTreeWrapperPass :publicFunctionPass {
318DominatorTree DT;
319
320public:
321staticcharID;
322
323DominatorTreeWrapperPass();
324
325DominatorTree &getDomTree() {return DT; }
326constDominatorTree &getDomTree() const{return DT; }
327
328boolrunOnFunction(Function &F)override;
329
330voidverifyAnalysis()const override;
331
332voidgetAnalysisUsage(AnalysisUsage &AU) const override{
333 AU.setPreservesAll();
334 }
335
336voidreleaseMemory() override{ DT.reset(); }
337
338voidprint(raw_ostream &OS,constModule *M =nullptr)const override;
339};
340}// end namespace llvm
341
342#endif// LLVM_IR_DOMINATORS_H
const
aarch64 promote const
Definition:AArch64PromoteConstant.cpp:230
APInt.h
This file implements a class to represent arbitrary precision integral constant values and operations...
ArrayRef.h
From
BlockVerifier::State From
Definition:BlockVerifier.cpp:57
CFGDiff.h
CFGUpdate.h
DenseMapInfo.h
This file defines DenseMapInfo traits for DenseMap.
DepthFirstIterator.h
This file builds on the ADT/GraphTraits.h file to build generic depth first graph iterator.
Name
std::string Name
Definition:ELFObjHandler.cpp:77
End
bool End
Definition:ELF_riscv.cpp:480
GenericDomTree.h
This file defines a set of templates that efficiently compute a dominator tree over a generic graph.
Hashing.h
BasicBlock.h
CFG.h
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
PassManager.h
This header defines various interfaces for pass management in LLVM.
Use.h
This defines the Use class.
F
#define F(x, y, z)
Definition:MD5.cpp:55
Module
Machine Check Debug Module
Definition:MachineCheckDebugify.cpp:124
Pass.h
PointerIntPair.h
This file defines the PointerIntPair class.
dominates
static bool dominates(InstrPosIndexes &PosIndexes, const MachineInstr &A, const MachineInstr &B)
Definition:RegAllocFast.cpp:485
OS
raw_pwrite_stream & OS
Definition:SampleProfWriter.cpp:51
SmallVector.h
This file defines the SmallVector class.
Twine.h
RHS
Value * RHS
Definition:X86PartialReduction.cpp:74
LHS
Value * LHS
Definition:X86PartialReduction.cpp:73
Node
Definition:ItaniumDemangle.h:163
llvm::AnalysisManager::Invalidator
API to communicate dependencies between analyses during invalidation.
Definition:PassManager.h:292
llvm::AnalysisManager
A container for analyses that lazily runs them and caches their results.
Definition:PassManager.h:253
llvm::AnalysisUsage
Represent the analysis usage information of a pass.
Definition:PassAnalysisSupport.h:47
llvm::AnalysisUsage::setPreservesAll
void setPreservesAll()
Set by analyses that do not transform their input at all.
Definition:PassAnalysisSupport.h:130
llvm::ArrayRef
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition:ArrayRef.h:41
llvm::BasicBlockEdge
Definition:Dominators.h:94
llvm::BasicBlockEdge::getEnd
const BasicBlock * getEnd() const
Definition:Dominators.h:112
llvm::BasicBlockEdge::getStart
const BasicBlock * getStart() const
Definition:Dominators.h:108
llvm::BasicBlockEdge::BasicBlockEdge
BasicBlockEdge(const std::pair< const BasicBlock *, const BasicBlock * > &Pair)
Definition:Dominators.h:105
llvm::BasicBlockEdge::BasicBlockEdge
BasicBlockEdge(const BasicBlock *Start_, const BasicBlock *End_)
Definition:Dominators.h:99
llvm::BasicBlockEdge::BasicBlockEdge
BasicBlockEdge(const std::pair< BasicBlock *, BasicBlock * > &Pair)
Definition:Dominators.h:102
llvm::BasicBlock
LLVM Basic Block Representation.
Definition:BasicBlock.h:61
llvm::BasicBlock::iterator
InstListType::iterator iterator
Instruction iterators...
Definition:BasicBlock.h:177
llvm::DomTreeNodeBase< BasicBlock >
llvm::DomTreeNodeBase< BasicBlock >::const_iterator
typename SmallVector< DomTreeNodeBase *, 4 >::const_iterator const_iterator
Definition:GenericDomTree.h:74
llvm::DominatorTreeAnalysis
Analysis pass which computes a DominatorTree.
Definition:Dominators.h:279
llvm::DominatorTreeAnalysis::run
DominatorTree run(Function &F, FunctionAnalysisManager &)
Run the analysis pass over a function and produce a dominator tree.
Definition:Dominators.cpp:371
llvm::DominatorTreeBase
Core dominator tree base class.
Definition:GenericDomTree.h:237
llvm::DominatorTreeBase::getRootNode
DomTreeNodeBase< NodeT > * getRootNode()
getRootNode - This returns the entry node for the CFG of the function.
Definition:GenericDomTree.h:421
llvm::DominatorTreeBase::VerificationLevel
VerificationLevel
Definition:GenericDomTree.h:255
llvm::DominatorTreeBase::Parent
ParentPtr Parent
Definition:GenericDomTree.h:270
llvm::DominatorTreePrinterPass
Printer pass for the DominatorTree.
Definition:Dominators.h:293
llvm::DominatorTreePrinterPass::run
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Definition:Dominators.cpp:382
llvm::DominatorTreePrinterPass::isRequired
static bool isRequired()
Definition:Dominators.h:301
llvm::DominatorTreeWrapperPass
Legacy analysis pass which computes a DominatorTree.
Definition:Dominators.h:317
llvm::DominatorTreeWrapperPass::runOnFunction
bool runOnFunction(Function &F) override
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass.
llvm::DominatorTreeWrapperPass::DominatorTreeWrapperPass
DominatorTreeWrapperPass()
Definition:Dominators.cpp:409
llvm::DominatorTreeWrapperPass::print
void print(raw_ostream &OS, const Module *M=nullptr) const override
print - Print out the internal state of the pass.
Definition:Dominators.cpp:428
llvm::DominatorTreeWrapperPass::getDomTree
DominatorTree & getDomTree()
Definition:Dominators.h:325
llvm::DominatorTreeWrapperPass::getAnalysisUsage
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
Definition:Dominators.h:332
llvm::DominatorTreeWrapperPass::getDomTree
const DominatorTree & getDomTree() const
Definition:Dominators.h:326
llvm::DominatorTreeWrapperPass::releaseMemory
void releaseMemory() override
releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memo...
Definition:Dominators.h:336
llvm::DominatorTreeWrapperPass::ID
static char ID
Definition:Dominators.h:321
llvm::DominatorTreeWrapperPass::verifyAnalysis
void verifyAnalysis() const override
verifyAnalysis() - This member can be implemented by a analysis pass to check state of analysis infor...
Definition:Dominators.cpp:421
llvm::DominatorTree
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition:Dominators.h:162
llvm::DominatorTree::dominates
bool dominates(const Value *Def, BasicBlock::iterator User) const
Definition:Dominators.h:196
llvm::DominatorTree::DominatorTree
DominatorTree()=default
llvm::DominatorTree::DominatorTree
DominatorTree(Function &F)
Definition:Dominators.h:167
llvm::DominatorTree::DominatorTree
DominatorTree(DominatorTree &DT, DomTreeBuilder::BBUpdates U)
Definition:Dominators.h:168
llvm::FunctionPass
FunctionPass class - This class is used to implement most global optimizations.
Definition:Pass.h:310
llvm::Function
Definition:Function.h:63
llvm::GraphDiff
Definition:CFGDiff.h:57
llvm::Instruction
Definition:Instruction.h:68
llvm::Module
A Module instance is used to store all the information related to an LLVM module.
Definition:Module.h:65
llvm::PreservedAnalyses
A set of analyses that are preserved following a run of a transformation pass.
Definition:Analysis.h:111
llvm::Twine
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition:Twine.h:81
llvm::Use
A Use represents the edge between a Value definition and its users.
Definition:Use.h:43
llvm::User
Definition:User.h:44
llvm::Value
LLVM Value Representation.
Definition:Value.h:74
llvm::df_iterator
Definition:DepthFirstIterator.h:86
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition:raw_ostream.h:52
ilist_iterator.h
llvm::TargetStackID::Value
Value
Definition:TargetFrameLowering.h:29
llvm::codeview::PublicSymFlags::Function
@ Function
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::df_begin
df_iterator< T > df_begin(const T &G)
Definition:DepthFirstIterator.h:222
llvm::DomTreeNode
DomTreeNodeBase< BasicBlock > DomTreeNode
Definition:Dominators.h:92
llvm::VerifyDomInfo
bool VerifyDomInfo
Enables verification of dominator trees.
Definition:Dominators.cpp:40
llvm::df_end
df_iterator< T > df_end(const T &G)
Definition:DepthFirstIterator.h:227
llvm::hash_combine
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
Definition:Hashing.h:590
N
#define N
llvm::AnalysisInfoMixin
A CRTP mix-in that provides informational APIs needed for analysis passes.
Definition:PassManager.h:92
llvm::AnalysisKey
A special type used by analysis passes to provide an address that identifies that particular analysis...
Definition:Analysis.h:28
llvm::DenseMapInfo< BasicBlockEdge >::getEmptyKey
static BasicBlockEdge getEmptyKey()
Definition:Dominators.h:125
llvm::DenseMapInfo< BasicBlockEdge >::getTombstoneKey
static BasicBlockEdge getTombstoneKey()
Definition:Dominators.h:129
llvm::DenseMapInfo< BasicBlockEdge >::getHashValue
static unsigned getHashValue(const BasicBlockEdge *V)
llvm::DenseMapInfo< BasicBlockEdge >::getHashValue
static unsigned getHashValue(const BasicBlockEdge &Edge)
Definition:Dominators.h:133
llvm::DenseMapInfo< BasicBlockEdge >::isEqual
static bool isEqual(const BasicBlockEdge &LHS, const BasicBlockEdge &RHS)
Definition:Dominators.h:138
llvm::DenseMapInfo
An information struct used to provide DenseMap with the various necessary components for a given valu...
Definition:DenseMapInfo.h:52
llvm::DomTreeGraphTraitsBase
Definition:Dominators.h:239
llvm::DomTreeGraphTraitsBase::child_end
static ChildIteratorType child_end(NodeRef N)
Definition:Dominators.h:246
llvm::DomTreeGraphTraitsBase::getEntryNode
static NodeRef getEntryNode(NodeRef N)
Definition:Dominators.h:244
llvm::DomTreeGraphTraitsBase::ChildIteratorType
ChildIterator ChildIteratorType
Definition:Dominators.h:241
llvm::DomTreeGraphTraitsBase::nodes_begin
static nodes_iterator nodes_begin(NodeRef N)
Definition:Dominators.h:248
llvm::DomTreeGraphTraitsBase::nodes_end
static nodes_iterator nodes_end(NodeRef N)
Definition:Dominators.h:252
llvm::DomTreeGraphTraitsBase::child_begin
static ChildIteratorType child_begin(NodeRef N)
Definition:Dominators.h:245
llvm::DominatorTreeVerifierPass
Verifier pass for the DominatorTree.
Definition:Dominators.h:305
llvm::DominatorTreeVerifierPass::run
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Definition:Dominators.cpp:390
llvm::DominatorTreeVerifierPass::isRequired
static bool isRequired()
Definition:Dominators.h:307
llvm::GraphTraits< DominatorTree * >::nodes_end
static nodes_iterator nodes_end(DominatorTree *N)
Definition:Dominators.h:273
llvm::GraphTraits< DominatorTree * >::getEntryNode
static NodeRef getEntryNode(DominatorTree *DT)
Definition:Dominators.h:267
llvm::GraphTraits< DominatorTree * >::nodes_begin
static nodes_iterator nodes_begin(DominatorTree *N)
Definition:Dominators.h:269
llvm::GraphTraits
Definition:GraphTraits.h:38
llvm::PassInfoMixin
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition:PassManager.h:69

Generated on Thu Jul 17 2025 10:05:10 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp