clang: include/clang/Analysis/Analyses/PostOrderCFGView.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_POSTORDERCFGVIEW_H
14#define LLVM_CLANG_ANALYSIS_ANALYSES_POSTORDERCFGVIEW_H
15
19#include "llvm/ADT/BitVector.h"
20#include "llvm/ADT/DenseMap.h"
21#include "llvm/ADT/PostOrderIterator.h"
22#include
23#include
24
26
28 virtual void anchor();
29
30public:
31
32
33
34
35
36
38 llvm::BitVector VisitedBlockIDs;
39
40 public:
41
42
44
47
48
49
51
52
53
54
56 return std::make_pair(std::nullopt,
57 false);
58 if (VisitedBlockIDs.test(Block->getBlockID()))
59 return std::make_pair(std::nullopt, false);
60 VisitedBlockIDs.set(Block->getBlockID());
61 return std::make_pair(std::nullopt, true);
62 }
63
64
65
66
68 return VisitedBlockIDs.test(Block->getBlockID());
69 }
70 };
71
72private:
73
74
75
76
77
78
79
80
81
82
83 struct CFGLoopBodyFirstTraits {
84 using NodeRef = const ::clang::CFGBlock *;
86
87 static ChildIteratorType child_begin(NodeRef N) { return N->succ_rbegin(); }
88 static ChildIteratorType child_end(NodeRef N) { return N->succ_rend(); }
89
91
92 static NodeRef getEntryNode(const ::clang::CFG *F) {
93 return &F->getEntry();
94 }
95
96 static nodes_iterator nodes_begin(const ::clang::CFG *F) {
97 return F->nodes_begin();
98 }
99
100 static nodes_iterator nodes_end(const ::clang::CFG *F) {
101 return F->nodes_end();
102 }
103
104 static unsigned size(const ::clang::CFG *F) { return F->size(); }
105 };
106 using po_iterator =
107 llvm::po_iterator<const CFG *, CFGBlockSet, true, CFGLoopBodyFirstTraits>;
108 std::vector<const CFGBlock *> Blocks;
109
110 using BlockOrderTy = llvm::DenseMap<const CFGBlock *, unsigned>;
111 BlockOrderTy BlockOrder;
112
113public:
115
116 using iterator = std::vector<const CFGBlock *>::reverse_iterator;
117 using const_iterator = std::vector<const CFGBlock *>::const_reverse_iterator;
118
120
123
126
128
131
132 public:
134
136 };
137
141
142
143 static const void *getTag();
144
145 static std::unique_ptr
147};
148
149}
150
151#endif
This file defines AnalysisDeclContext, a class that manages the analysis context data for context sen...
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
AnalysisDeclContext contains the context data for the function, method or block under analysis.
Represents a single basic block in a source-level CFG.
AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator
Represents a source-level, intra-procedural CFG that represents the control-flow of a Stmt.
CFGBlockListTy::const_iterator const_iterator
ManagedAnalysis()=default
CFGBlockSet(const CFG *G)
Definition PostOrderCFGView.h:46
std::pair< std::nullopt_t, bool > insert(const CFGBlock *Block)
Set the bit associated with a particular CFGBlock.
Definition PostOrderCFGView.h:50
bool alreadySet(const CFGBlock *Block)
Check if the bit for a CFGBlock has been already set.
Definition PostOrderCFGView.h:67
BlockOrderCompare getComparator() const
Definition PostOrderCFGView.h:138
iterator begin()
Definition PostOrderCFGView.h:121
const_iterator begin() const
Definition PostOrderCFGView.h:124
PostOrderCFGView(const CFG *cfg)
bool empty() const
Definition PostOrderCFGView.h:127
std::vector< const CFGBlock * >::reverse_iterator iterator
Definition PostOrderCFGView.h:116
static std::unique_ptr< PostOrderCFGView > create(AnalysisDeclContext &analysisContext)
friend struct BlockOrderCompare
Definition PostOrderCFGView.h:114
iterator end()
Definition PostOrderCFGView.h:122
std::vector< const CFGBlock * >::const_reverse_iterator const_iterator
Definition PostOrderCFGView.h:117
const_iterator end() const
Definition PostOrderCFGView.h:125
static const void * getTag()
The JSON file list parser is used to communicate input to InstallAPI.
Definition PostOrderCFGView.h:129
BlockOrderCompare(const PostOrderCFGView &pov)
Definition PostOrderCFGView.h:133
bool operator()(const CFGBlock *b1, const CFGBlock *b2) const
const PostOrderCFGView & POV
Definition PostOrderCFGView.h:130
Definition PostOrderCFGView.h:43
const CFGBlock * value_type
Definition PostOrderCFGView.h:43