P4C
The P4 Compiler
graphs::Graph_visitor Class Reference
Inheritance diagram for graphs::Graph_visitor:
[legend]

Public Member Functions

 Graph_visitor (const cstring &graphsDir, const bool graphs, const bool fullGraph, const bool jsonOut, const cstring &filename)
 
const char * getPrevType (const PrevType &prev_type)
 Maps PrevType to string. More...
 
const char * getType (const VertexType &v_type)
 Maps VertexType to string. More...
 
void process (std::vector< Graph * > &controlGraphsArray, std::vector< Graph * > &parserGraphsArray)
 main function More...
 
void writeGraphToFile (const Graph &g, const cstring &name)
 Writes boost graph "g" in dot format to file given by "name". More...
 
- Public Member Functions inherited from graphs::Graphs
vertex_t add_and_connect_vertex (const cstring &name, VertexType type)
 
void add_edge (const vertex_t &from, const vertex_t &to, const cstring &name)
 
void add_edge (const vertex_t &from, const vertex_t &to, const cstring &name, unsigned cluster_id)
 used to connect subgraphs More...
 
vertex_t add_vertex (const cstring &name, VertexType type)
 
std::optional< vertex_t > merge_other_statements_into_vertex ()
 
- Public Member Functions inherited from Inspector
const IR::Nodeapply_visitor (const IR::Node *, const char *name=0) override
 
profile_t init_apply (const IR::Node *root) override
 
virtual void loop_revisit (const IR::Node *)
 
virtual void postorder (const IR::Node *)
 
virtual bool preorder (const IR::Node *)
 
virtual void revisit (const IR::Node *)
 
void revisit_visited ()
 
bool visit_in_progress (const IR::Node *n) const
 
void visitAgain () const override
 
void visitOnce () const override
 
- Public Member Functions inherited from Visitor
virtual bool check_global (cstring)
 
virtual void clear_globals ()
 
virtual Visitorclone () const
 
virtual void end_apply ()
 
virtual void end_apply (const IR::Node *root)
 
virtual void erase_global (cstring)
 
template<class T >
const T * findContext () const
 
template<class T >
const T * findContext (const Context *&c) const
 
template<class T >
const T * findOrigCtxt () const
 
template<class T >
const T * findOrigCtxt (const Context *&c) const
 
virtual Visitorflow_clone ()
 
virtual void flow_merge (Visitor &)
 
virtual void flow_merge_global_from (cstring)
 
virtual void flow_merge_global_to (cstring)
 
const ContextgetChildContext () const
 
int getChildrenVisited () const
 
const ContextgetContext () const
 
int getContextDepth () const
 
const IR::NodegetCurrentNode () const
 
template<class T >
const T * getCurrentNode () const
 
const IR::NodegetOriginal () const
 
template<class T >
const T * getOriginal () const
 
template<class T >
const T * getParent () const
 
virtual bool has_flow_joins () const
 
profile_t init_apply (const IR::Node *root, const Context *parent_context)
 
bool isInContext (const IR::Node *n) const
 
virtual const char * name () const
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name=0)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name=0)
 
void print_context () const
 
const VisitorsetCalledBy (const Visitor *visitor)
 
void setName (const char *name)
 
void visit (const IR::Node &n, const char *name, int cidx)
 
void visit (const IR::Node &n, const char *name=0)
 
void visit (const IR::Node *&n, const char *name, int cidx)
 
void visit (const IR::Node *&n, const char *name=0)
 
void visit (const IR::Node *const &n, const char *name, int cidx)
 
void visit (const IR::Node *const &n, const char *name=0)
 
void visit (IR::Node &n, const char *name, int cidx)
 
void visit (IR::Node &n, const char *name=0)
 
void visit (IR::Node *&, const char *=0, int=0)
 
template<class T , typename = typename std::enable_if<std::is_base_of<Util::IHasSourceInfo, T>::value>::type, class... Args>
void warn (const int kind, const char *format, const T &node, Args... args)
 The const ref variant of the above.
 
template<class T , typename = typename std::enable_if<std::is_base_of<Util::IHasSourceInfo, T>::value>::type, class... Args>
void warn (const int kind, const char *format, const T *node, Args... args)
 
bool warning_enabled (int warning_kind) const
 

Additional Inherited Members

- Public Types inherited from graphs::Graphs
using edgeProperties = boost::property< boost::edge_attribute_t, GraphvizAttributes, boost::property< boost::edge_name_t, cstring, boost::property< boost::edge_index_t, int > >>
 
using Graph = boost::subgraph< Graph_ >
 
using Graph_ = boost::adjacency_list< boost::vecS, boost::vecS, boost::directedS, vertexProperties, edgeProperties, graphProperties >
 
using graphProperties = boost::property< boost::graph_name_t, cstring, boost::property< boost::graph_graph_attribute_t, GraphvizAttributes, boost::property< boost::graph_vertex_attribute_t, GraphvizAttributes, boost::property< boost::graph_edge_attribute_t, GraphvizAttributes > >> >
 
using GraphvizAttributes = std::map< cstring, cstring >
 
using Parents = std::vector< std::pair< vertex_t, EdgeTypeIface * > >
 
using vertex_t = boost::graph_traits< Graph >::vertex_descriptor
 
using vertexProperties = boost::property< boost::vertex_attribute_t, GraphvizAttributes, Vertex >
 
enum class  VertexType {
  TABLE , KEY , ACTION , CONDITION ,
  SWITCH , STATEMENTS , CONTROL , OTHER ,
  STATE , EMPTY
}
 
- Public Types inherited from Visitor
typedef Visitor_Context Context
 
- Static Public Member Functions inherited from Visitor
static cstring demangle (const char *)
 
static bool warning_enabled (const Visitor *visitor, int warning_kind)
 
- Public Attributes inherited from Visitor
const Visitorcalled_by = nullptr
 
cstring internalName
 
SplitFlowVisit_base *& split_link
 
SplitFlowVisit_basesplit_link_mem = nullptr
 
- Protected Member Functions inherited from Visitor
virtual void init_join_flows (const IR::Node *)
 
virtual bool join_flows (const IR::Node *)
 
virtual void post_join_flows (const IR::Node *, const IR::Node *)
 
void visit_children (const IR::Node *, std::function< void()> fn)
 
- Protected Attributes inherited from graphs::Graphs
vertex_t exit_v {}
 
Graph * g {nullptr}
 
Parents parents {}
 
vertex_t start_v {}
 
std::vector< const IR::Statement * > statementsStack {}
 
- Protected Attributes inherited from Visitor
bool dontForwardChildrenBeforePreorder = false
 
bool joinFlows = false
 
bool visitDagOnce = true
 

Detailed Description

"process" function of class is dependent on previous aplication of visitor classes Controls and Parsers onto IR, and can only be run after them

Constructor & Destructor Documentation

◆ Graph_visitor()

graphs::Graph_visitor::Graph_visitor ( const cstring graphsDir,
const bool  graphs,
const bool  fullGraph,
const bool  jsonOut,
const cstring filename 
)
inline
Parameters
graphsDirdirectory where graphs will be stored
graphsoption to output graph for each function block
fullGraphoption to create fullGraph
jsonOutoption to create json fullGraph

Member Function Documentation

◆ getPrevType()

const char * graphs::Graph_visitor::getPrevType ( const PrevType &  prev_type)

Maps PrevType to string.

Parameters
prev_typePrevType to map
Returns
string representation of prev_type

◆ getType()

const char * graphs::Graph_visitor::getType ( const VertexType &  v_type)

Maps VertexType to string.

Parameters
v_typeVertexType to map
Returns
string representation of v_type

◆ process()

void graphs::Graph_visitor::process ( std::vector< Graph * > &  controlGraphsArray,
std::vector< Graph * > &  parserGraphsArray 
)

main function

based on the value of boolean class variables "graphs", "fullGraph", "jsonOut" executes: "graphs" - outputs boost graphs to files "fullGraph" - merges boost graphs into one CFG, and outputs to file "jsonOut" - iterates over boost graphs, and creates json representation of these graphs

Parameters
controlGraphsArrayvector with boost graphs of control blocks
parserGraphsArrayvector with boost graphs of control parsers

◆ writeGraphToFile()

void graphs::Graph_visitor::writeGraphToFile ( const Graph &  g,
const cstring name 
)

Writes boost graph "g" in dot format to file given by "name".

Parameters
gboost graph
namefile name