34 struct CFGLoopBodyFirstTraits {
35 using NodeRef = const ::clang::CFGBlock *;
38 static ChildIteratorType child_begin(NodeRef N) {
return N->succ_rbegin(); }
39 static ChildIteratorType child_end(NodeRef N) {
return N->succ_rend(); }
43 : llvm::PostOrderTraversalBase<POTraversal, CFGLoopBodyFirstTraits> {
46 POTraversal(
const CFG *cfg) : BSet(cfg) { this->init(&cfg->
getEntry()); }
47 bool insertEdge(std::optional<const CFGBlock *>,
const CFGBlock *To) {
50 return BSet.
insert(To).second;
55 BlockOrder[
Block] = Blocks.size() + 1;
56 Blocks.push_back(
Block);
This file defines AnalysisDeclContext, a class that manages the analysis context data for context sen...
AnalysisDeclContext contains the context data for the function, method or block under analysis.
Implements a set of CFGBlocks using a BitVector.
std::pair< std::nullopt_t, bool > insert(const CFGBlock *Block)
Set the bit associated with a particular CFGBlock.
PostOrderCFGView(const CFG *cfg)
static std::unique_ptr< PostOrderCFGView > create(AnalysisDeclContext &analysisContext)
static const void * getTag()
bool operator()(const CFGBlock *b1, const CFGBlock *b2) const
const PostOrderCFGView & POV