14 #ifndef LLVM_CLANG_ANALYSIS_ANALYSES_POSTORDERCFGVIEW_H 15 #define LLVM_CLANG_ANALYSIS_ANALYSES_POSTORDERCFGVIEW_H 20 #include "llvm/ADT/PostOrderIterator.h" 21 #include "llvm/ADT/DenseMap.h" 22 #include "llvm/ADT/BitVector.h" 30 virtual void anchor();
39 llvm::BitVector VisitedBlockIDs;
56 return std::make_pair(
None,
false);
58 return std::make_pair(
None,
false);
60 return std::make_pair(
None,
true);
67 return VisitedBlockIDs.test(Block->
getBlockID());
72 typedef llvm::po_iterator<const CFG*, CFGBlockSet, true> po_iterator;
73 std::vector<const CFGBlock*> Blocks;
75 typedef llvm::DenseMap<const CFGBlock *, unsigned> BlockOrderTy;
76 BlockOrderTy BlockOrder;
79 typedef std::vector<const CFGBlock *>::reverse_iterator
iterator;
80 typedef std::vector<const CFGBlock *>::const_reverse_iterator
const_iterator;
84 iterator
begin() {
return Blocks.rbegin(); }
85 iterator
end() {
return Blocks.rend(); }
87 const_iterator
begin()
const {
return Blocks.rbegin(); }
88 const_iterator
end()
const {
return Blocks.rend(); }
107 static const void *
getTag();
The base class of a hierarchy of objects representing analyses tied to AnalysisDeclContext.
friend struct BlockOrderCompare
unsigned getBlockID() const
AnalysisDeclContext contains the context data for the function or method under analysis.
static PostOrderCFGView * create(AnalysisDeclContext &analysisContext)
std::vector< const CFGBlock * >::const_reverse_iterator const_iterator
bool alreadySet(const CFGBlock *Block)
Check if the bit for a CFGBlock has been already set.
Implements a set of CFGBlocks using a BitVector.
const_iterator end() const
const CFGBlock * value_type
CFGBlock - Represents a single basic block in a source-level CFG.
CFG - Represents a source-level, intra-procedural CFG that represents the control-flow of a Stmt...
const_iterator begin() const
std::pair< llvm::NoneType, bool > insert(const CFGBlock *Block)
Set the bit associated with a particular CFGBlock.
const PostOrderCFGView & POV
BlockOrderCompare getComparator() const
Dataflow Directional Tag Classes.
CFGBlockSet(const CFG *G)
BlockOrderCompare(const PostOrderCFGView &pov)
std::vector< const CFGBlock * >::reverse_iterator iterator
static const void * getTag()
PostOrderCFGView(const CFG *cfg)