![]() |
P4C
The P4 Compiler
|
Classes | |
| struct | flow_join_info_t |
| class | GuardGlobal |
| RAII class to ensure global key is only used in one place. More... | |
| class | SaveGlobal |
| RAII class to save and restore one or more global keys. More... | |
| class | SetupJoinPoints |
Public Member Functions | |
| bool | check_global (cstring key) override |
| void | clear_globals () override |
| ControlFlowVisitor * | controlFlowVisitor () override |
| void | erase_global (cstring key) override |
| ControlFlowVisitor & | flow_clone () override |
| virtual void | flow_copy (ControlFlowVisitor &)=0 |
| const flow_join_info_t * | flow_join_status (const IR::Node *n) const |
| void | flow_merge (Visitor &) override=0 |
| void | flow_merge_global_from (cstring key) override |
| void | flow_merge_global_to (cstring key) override |
| bool | has_flow_joins () const override |
| bool | isUnreachable () |
| bool | operator!= (const ControlFlowVisitor &v) const |
| virtual bool | operator== (const ControlFlowVisitor &) const |
| void | restore_global (std::pair< cstring, ControlFlowVisitor * > saved) |
| std::pair< cstring, ControlFlowVisitor * > | save_global (cstring key) |
| void | setUnreachable () |
Public Member Functions inherited from P4::Visitor | |
| virtual const IR::Node * | apply_visitor (const IR::Node *n, const char *name=0)=0 |
| virtual bool | check_clone (const Visitor *a) |
| virtual void | end_apply () |
| virtual void | end_apply (const IR::Node *root) |
| 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 bool | flow_merge_closure (Visitor &) |
| const Context * | getChildContext () const |
| int | getChildrenVisited () const |
| const Context * | getContext () const |
| int | getContextDepth () const |
| const IR::Node * | getCurrentNode () const |
| template<class T> | |
| const T * | getCurrentNode () const |
| const IR::Node * | getOriginal () const |
| template<class T> | |
| const T * | getOriginal () const |
| template<class T> | |
| const T * | getParent () const |
| virtual profile_t | init_apply (const IR::Node *root) |
| 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 Visitor & | setCalledBy (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 = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_pointer_v<T>>, 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 = std::enable_if_t<Util::has_SourceInfo_v<T>>, class... Args> | |
| void | warn (const int kind, const char *format, const T *node, Args &&...args) |
| bool | warning_enabled (int warning_kind) const |
Protected Types | |
| typedef std::map< const IR::Node *, flow_join_info_t > | flow_join_points_t |
Protected Member Functions | |
| virtual void | applySetupJoinPoints (const IR::Node *root) |
| ControlFlowVisitor * | clone () const override=0 |
| virtual bool | filter_join_point (const IR::Node *) |
| void | init_join_flows (const IR::Node *root) override |
| bool | join_flows (const IR::Node *n) override |
| void | post_join_flows (const IR::Node *, const IR::Node *) override |
Protected Member Functions inherited from P4::Visitor | |
| void | visit_children (const IR::Node *, std::function< void()> fn) |
| virtual void | visitAgain () const |
| virtual void | visitOnce () const |
Protected Attributes | |
| bool | BackwardsCompatibleBroken = false |
| flow_join_points_t * | flow_join_points = 0 |
| bool | unreachable = false |
Protected Attributes inherited from P4::Visitor | |
| bool | dontForwardChildrenBeforePreorder = false |
| bool | joinFlows = false |
| bool | visitDagOnce = true |
Friends | |
| void | dump (const flow_join_info_t &info) |
| void | dump (const flow_join_info_t *info) |
| void | dump (const flow_join_points_t &fjp) |
| void | dump (const flow_join_points_t *fjp) |
| std::ostream & | operator<< (std::ostream &out, const flow_join_info_t &info) |
| std::ostream & | operator<< (std::ostream &out, const flow_join_points_t &fjp) |
Additional Inherited Members | |
Public Types inherited from P4::Visitor | |
| typedef Visitor_Context | Context |
Static Public Member Functions inherited from P4::Visitor | |
| static cstring | demangle (const char *) |
| static bool | warning_enabled (const Visitor *visitor, int warning_kind) |
Public Attributes inherited from P4::Visitor | |
| const Visitor * | called_by = nullptr |
| cstring | internalName |
| SplitFlowVisit_base *& | split_link |
| SplitFlowVisit_base * | split_link_mem = nullptr |
| struct P4::ControlFlowVisitor::flow_join_info_t |
| Class Members | ||
|---|---|---|
| int | count = 0 | |
| bool | done = false | |
| ControlFlowVisitor * | vclone = nullptr | |
|
inlineoverridevirtual |
Reimplemented from P4::Visitor.
|
inlineoverridevirtual |
Reimplemented from P4::Visitor.
|
overrideprotectedpure virtual |
Reimplemented from P4::Visitor.
|
inlineoverridevirtual |
Reimplemented from P4::Visitor.
|
inlineoverridevirtual |
Reimplemented from P4::Visitor.
|
inlineprotectedvirtual |
This will be called for all nodes with multiple incoming edges, and should return 'false' if the node should be considered a join point, and 'true' if if should not be considered one. Nodes with only one incoming edge are never join points.
|
overridevirtual |
Reimplemented from P4::Visitor.
|
overridepure virtual |
Merge the given visitor into this visitor at a joint point in the control flow graph. Should update @this and leave the other unchanged.
Reimplemented from P4::Visitor.
|
inlineoverridevirtual |
Reimplemented from P4::Visitor.
|
inlineoverridevirtual |
Support methods for non-local ControlFlow computations
Reimplemented from P4::Visitor.
|
inlineoverridevirtual |
Reimplemented from P4::Visitor.
|
overrideprotectedvirtual |
Reimplemented from P4::Visitor.
|
overrideprotectedvirtual |
If
is a join point in the control flow graph (i.e. has multiple incoming edges) and is not filtered out by filter_join_point, then:
join_flows(n) is invoked in apply_visitor(n, name), and
is only visited if this method returns false.
Reimplemented from P4::Visitor.
|
overrideprotectedvirtual |
Called from apply_visitor after visiting the node (pre- and postorder) and its children after join_flows returned false
Reimplemented from P4::Visitor.