diff --git a/backends_2dpdk_2options_8h_source.html b/backends_2dpdk_2options_8h_source.html index ec304d4248c..2d916460ede 100644 --- a/backends_2dpdk_2options_8h_source.html +++ b/backends_2dpdk_2options_8h_source.html @@ -245,7 +245,7 @@
P4::P4CContextWithOptions
Definition parser_options.h:174
P4::ParserOptions::file
std::filesystem::path file
file to compile (- for stdin)
Definition parser_options.h:81
P4::Util::Options::Hide
@ Hide
Hide this option from –help message.
Definition lib/options.h:41
-
P4::DPDK
Definition dpdk/backend.cpp:36
+
P4::DPDK
Definition dpdk/backend.cpp:37
diff --git a/bmv2_2common_2lower_8h_source.html b/bmv2_2common_2lower_8h_source.html index ba641581aef..2f2fbcf6dff 100644 --- a/bmv2_2common_2lower_8h_source.html +++ b/bmv2_2common_2lower_8h_source.html @@ -180,9 +180,9 @@
55class RemoveComplexExpressions : public P4::RemoveComplexExpressions {
56 public:
-
57 RemoveComplexExpressions(P4::ReferenceMap *refMap, P4::TypeMap *typeMap,
-
58 P4::RemoveComplexExpressionsPolicy *policy = nullptr)
-
59 : P4::RemoveComplexExpressions(refMap, typeMap, policy) {}
+
57 explicit RemoveComplexExpressions(P4::TypeMap *typeMap,
+
58 P4::RemoveComplexExpressionsPolicy *policy = nullptr)
+
59 : P4::RemoveComplexExpressions(typeMap, policy) {}
60
61 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
62};
@@ -194,7 +194,6 @@
This pass rewrites expressions which are not supported natively on BMv2.
Definition bmv2/common/lower.h:28
Definition bmv2/common/lower.h:55
Definition node.h:95
-
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition removeComplexExpressions.h:45
Definition removeComplexExpressions.h:30
Definition visitor.h:424
diff --git a/check_extern_invocation_common_8h_source.html b/check_extern_invocation_common_8h_source.html index 375979ef659..2e715bfd218 100644 --- a/check_extern_invocation_common_8h_source.html +++ b/check_extern_invocation_common_8h_source.html @@ -142,109 +142,107 @@
17#ifndef MIDEND_CHECKEXTERNINVOCATIONCOMMON_H_
18#define MIDEND_CHECKEXTERNINVOCATIONCOMMON_H_
19
-
20#include "frontends/p4/methodInstance.h"
-
21#include "ir/ir.h"
-
22#include "ir/visitor.h"
-
23#include "lib/bitvec.h"
-
24
-
25namespace P4 {
-
26
-
27class ReferenceMap;
+
20#include "frontends/common/resolveReferences/resolveReferences.h"
+
21#include "frontends/p4/methodInstance.h"
+
22#include "ir/ir.h"
+
23#include "ir/visitor.h"
+
24#include "lib/bitvec.h"
+
25
+
26namespace P4 {
+
27
28class TypeMap;
29
- +
42 protected:
-
43 ReferenceMap *refMap;
-
44 TypeMap *typeMap;
-
45 std::map<cstring /* extType */, bitvec> pipeConstraints;
-
46
-
55 virtual void initPipeConstraints() = 0;
-
56
-
64 virtual cstring getBlockName(int bit) = 0;
-
65
-
-
75 virtual void checkExtern(const ExternMethod *extMethod, const IR::MethodCallExpression *expr) {
-
76 (void)extMethod;
-
77 (void)expr;
-
78 }
+
43 TypeMap *typeMap;
+
44 std::map<cstring /* extType */, bitvec> pipeConstraints;
+
45
+
54 virtual void initPipeConstraints() = 0;
+
55
+
63 virtual cstring getBlockName(int bit) = 0;
+
64
+
+
74 virtual void checkExtern(const ExternMethod *extMethod, const IR::MethodCallExpression *expr) {
+
75 (void)extMethod;
+
76 (void)expr;
+
77 }
-
79
-
-
89 virtual void checkExtern(const ExternFunction *extFunction,
-
90 const IR::MethodCallExpression *expr) {
-
91 (void)extFunction;
-
92 (void)expr;
-
93 }
+
78
+
+
88 virtual void checkExtern(const ExternFunction *extFunction,
+
89 const IR::MethodCallExpression *expr) {
+
90 (void)extFunction;
+
91 (void)expr;
+
92 }
-
94
-
- -
102 int bit = vec.ffs(0);
-
103 BUG_CHECK(vec.ffs(bit), "Trying to extract multiple block encodings");
-
104 return getBlockName(bit);
-
105 }
+
93
+
+ +
101 int bit = vec.ffs(0);
+
102 BUG_CHECK(vec.ffs(bit), "Trying to extract multiple block encodings");
+
103 return getBlockName(bit);
+
104 }
-
106
-
-
116 void setPipeConstraints(cstring extType, bitvec vec) {
-
117 if (!pipeConstraints.count(extType)) {
-
118 pipeConstraints.emplace(extType, vec);
-
119 } else {
-
120 auto &cons = pipeConstraints.at(extType);
-
121 cons |= vec;
-
122 }
-
123 }
+
105
+
+
115 void setPipeConstraints(cstring extType, bitvec vec) {
+
116 if (!pipeConstraints.count(extType)) {
+
117 pipeConstraints.emplace(extType, vec);
+
118 } else {
+
119 auto &cons = pipeConstraints.at(extType);
+
120 cons |= vec;
+
121 }
+
122 }
-
124
-
-
138 void checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr,
-
139 cstring extName, cstring pipe) {
-
140 BUG_CHECK(pipeConstraints.count(extType), "pipe constraints not defined for %1%", extType);
-
141 auto constraint = pipeConstraints.at(extType) & bv;
-
142 if (!bv.empty() && constraint.empty()) {
-
143 if (extName != "")
-
144 ::P4::error(ErrorType::ERR_UNSUPPORTED, "%s %s %s cannot be used in the %s %s",
-
145 expr->srcInfo, extType, extName, pipe, extractBlock(bv));
-
146 else
-
147 ::P4::error(ErrorType::ERR_UNSUPPORTED, "%s %s cannot be used in the %s %s",
-
148 expr->srcInfo, extType, pipe, extractBlock(bv));
-
149 }
-
150 }
+
123
+
+
137 void checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr,
+
138 cstring extName, cstring pipe) {
+
139 BUG_CHECK(pipeConstraints.count(extType), "pipe constraints not defined for %1%", extType);
+
140 auto constraint = pipeConstraints.at(extType) & bv;
+
141 if (!bv.empty() && constraint.empty()) {
+
142 if (extName != "")
+
143 ::P4::error(ErrorType::ERR_UNSUPPORTED, "%s %s %s cannot be used in the %s %s",
+
144 expr->srcInfo, extType, extName, pipe, extractBlock(bv));
+
145 else
+
146 ::P4::error(ErrorType::ERR_UNSUPPORTED, "%s %s cannot be used in the %s %s",
+
147 expr->srcInfo, extType, pipe, extractBlock(bv));
+
148 }
+
149 }
-
151
- -
153 : refMap(refMap), typeMap(typeMap) {}
-
154
-
155 public:
-
156 bool preorder(const IR::MethodCallExpression *expr) override {
-
157 auto mi = MethodInstance::resolve(expr, refMap, typeMap);
-
158 if (auto extMethod = mi->to<ExternMethod>()) {
-
159 checkExtern(extMethod, expr);
-
160 } else if (auto extFunction = mi->to<ExternFunction>()) {
-
161 checkExtern(extFunction, expr);
-
162 }
-
163 return false;
-
164 }
-
165};
+
150
+
151 explicit CheckExternInvocationCommon(TypeMap *typeMap) : typeMap(typeMap) {}
+
152
+
153 public:
+
154 bool preorder(const IR::MethodCallExpression *expr) override {
+
155 auto mi = MethodInstance::resolve(expr, this, typeMap);
+
156 if (auto extMethod = mi->to<ExternMethod>()) {
+
157 checkExtern(extMethod, expr);
+
158 } else if (auto extFunction = mi->to<ExternFunction>()) {
+
159 checkExtern(extFunction, expr);
+
160 }
+
161 return false;
+
162 }
+
163};
+
164
+
165} // namespace P4
166
-
167} // namespace P4
-
168
-
169#endif /* MIDEND_CHECKEXTERNINVOCATIONCOMMON_H_ */
+
167#endif /* MIDEND_CHECKEXTERNINVOCATIONCOMMON_H_ */
Base class which can be used to prepare classes for checking constraints for invocations of externs (...
Definition checkExternInvocationCommon.h:41
-
void setPipeConstraints(cstring extType, bitvec vec)
Set the pipe (parser/control block) constraints.
Definition checkExternInvocationCommon.h:116
-
cstring extractBlock(bitvec vec)
Get the name of the block which is represented by bit set in the bitvec.
Definition checkExternInvocationCommon.h:101
+
void setPipeConstraints(cstring extType, bitvec vec)
Set the pipe (parser/control block) constraints.
Definition checkExternInvocationCommon.h:115
+
cstring extractBlock(bitvec vec)
Get the name of the block which is represented by bit set in the bitvec.
Definition checkExternInvocationCommon.h:100
virtual cstring getBlockName(int bit)=0
Get the name of the block which is represented in bit vector (bitvec) by bit with index given by 'bit...
virtual void initPipeConstraints()=0
Method used to initialize the constraints.
-
virtual void checkExtern(const ExternMethod *extMethod, const IR::MethodCallExpression *expr)
Method for checking constraints of extern method given by parameters.
Definition checkExternInvocationCommon.h:75
-
virtual void checkExtern(const ExternFunction *extFunction, const IR::MethodCallExpression *expr)
Method for checking constraints of extern functions given by parameters.
Definition checkExternInvocationCommon.h:89
-
void checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)
Check if the invocation of extern object method or extern function is valid in the block where it is ...
Definition checkExternInvocationCommon.h:138
+
virtual void checkExtern(const ExternMethod *extMethod, const IR::MethodCallExpression *expr)
Method for checking constraints of extern method given by parameters.
Definition checkExternInvocationCommon.h:74
+
virtual void checkExtern(const ExternFunction *extFunction, const IR::MethodCallExpression *expr)
Method for checking constraints of extern functions given by parameters.
Definition checkExternInvocationCommon.h:88
+
void checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)
Check if the invocation of extern object method or extern function is valid in the block where it is ...
Definition checkExternInvocationCommon.h:137
Definition methodInstance.h:194
Definition methodInstance.h:168
Definition visitor.h:400
static MethodInstance * resolve(const IR::MethodCallExpression *mce, const DeclarationLookup *refMap, TypeMap *typeMap, bool useExpressionType=false, const Visitor::Context *ctxt=nullptr, bool incomplete=false)
Definition methodInstance.cpp:27
-
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
+
Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
Definition resolveReferences.h:33
Definition typeMap.h:41
Definition bitvec.h:120
Definition cstring.h:85
diff --git a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions-members.html b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions-members.html index dfdbfd2889e..1d8ed041e56 100644 --- a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions-members.html +++ b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions-members.html @@ -126,9 +126,11 @@

This is the complete list of members for P4::BMV2::RemoveComplexExpressions, including all inherited members.

- - - + + + + + @@ -155,18 +157,26 @@ + + + + - + + + - + + + @@ -188,41 +198,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Transform)P4::Transformvirtual
assignments (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
called_by (defined in P4::Visitor)P4::Visitor
anyOrder (defined in P4::ResolutionContext)P4::ResolutionContextprotected
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Transform)P4::Transformvirtual
assignments (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
called_by (defined in P4::Visitor)P4::Visitor
check_clone(const Visitor *a) (defined in P4::Visitor)P4::Visitorinlinevirtual
check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
clone() const (defined in P4::Visitor)P4::Visitorinlinevirtual
getContext() const (defined in P4::Visitor)P4::Visitorinline
getContextDepth() const (defined in P4::Visitor)P4::Visitorinline
getCurrentNode() constP4::Visitorinline
getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline
getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual
init_apply(const IR::Node *node) override (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressionsinlinevirtual
init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
internalName (defined in P4::Visitor)P4::Visitormutable
isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline
join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
joinFlows (defined in P4::Visitor)P4::Visitorprotected
lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
loop_revisit(const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
methodArguments(cstring name) constP4::ResolutionContextprotected
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
nameGen (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
newDecls (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
preorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
prune() (defined in P4::Transform)P4::Transforminline
refMap (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
RemoveComplexExpressions(P4::ReferenceMap *refMap, P4::TypeMap *typeMap, P4::RemoveComplexExpressionsPolicy *policy=nullptr) (defined in P4::BMV2::RemoveComplexExpressions)P4::BMV2::RemoveComplexExpressionsinline
revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
revisit_visited() (defined in P4::Transform)P4::Transform
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
setName(const char *name) (defined in P4::Visitor)P4::Visitorinline
simpleStatement(IR::Statement *statement) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpression(const IR::Expression *expression, bool force) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Expression > *vec, bool force=false) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Argument > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::IndexedVector< IR::NamedExpression > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
split_link (defined in P4::Visitor)P4::Visitor
split_link_mem (defined in P4::Visitor)P4::Visitor
transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected
typeMap (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected
visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform
visitAgain() const override (defined in P4::Transform)P4::Transformvirtual
visitDagOnce (defined in P4::Visitor)P4::Visitorprotected
visitOnce() const override (defined in P4::Transform)P4::Transformvirtual
Visitor() (defined in P4::Visitor)P4::Visitorinline
warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline
P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline
warning_enabled(int warning_kind) constP4::Visitorinline
P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic
~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual
RemoveComplexExpressions(P4::TypeMap *typeMap, P4::RemoveComplexExpressionsPolicy *policy=nullptr) (defined in P4::BMV2::RemoveComplexExpressions)P4::BMV2::RemoveComplexExpressionsinlineexplicit
ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected
ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected
resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext
resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual
resolveType(const IR::Type *type) constP4::ResolutionContext
resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext
revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
revisit_visited() (defined in P4::Transform)P4::Transform
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
setName(const char *name) (defined in P4::Visitor)P4::Visitorinline
simpleStatement(IR::Statement *statement) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpression(const IR::Expression *expression, bool force) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Expression > *vec, bool force=false) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Argument > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::IndexedVector< IR::NamedExpression > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
split_link (defined in P4::Visitor)P4::Visitor
split_link_mem (defined in P4::Visitor)P4::Visitor
transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected
typeMap (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected
visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform
visitAgain() const override (defined in P4::Transform)P4::Transformvirtual
visitDagOnce (defined in P4::Visitor)P4::Visitorprotected
visitOnce() const override (defined in P4::Transform)P4::Transformvirtual
Visitor() (defined in P4::Visitor)P4::Visitorinline
warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline
P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline
warning_enabled(int warning_kind) constP4::Visitorinline
P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic
~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual
diff --git a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions.html b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions.html index 9c5dd440356..f56c94ea294 100644 --- a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions.html +++ b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions.html @@ -129,24 +129,26 @@
Inheritance diagram for P4::BMV2::RemoveComplexExpressions:
-
+
[legend]
- - + + - - + + + + @@ -376,6 +378,34 @@ + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

RemoveComplexExpressions (P4::ReferenceMap *refMap, P4::TypeMap *typeMap, P4::RemoveComplexExpressionsPolicy *policy=nullptr)
 
RemoveComplexExpressions (P4::TypeMap *typeMap, P4::RemoveComplexExpressionsPolicy *policy=nullptr)
 
const IR::Nodepostorder (IR::MethodCallExpression *expression) override
 
- Public Member Functions inherited from P4::RemoveComplexExpressions
RemoveComplexExpressions (P4::ReferenceMap *refMap, P4::TypeMap *typeMap, RemoveComplexExpressionsPolicy *policy=nullptr)
 
RemoveComplexExpressions (P4::TypeMap *typeMap, RemoveComplexExpressionsPolicy *policy=nullptr)
 
const IR::PathExpression * createTemporary (const IR::Expression *expression)
 
Visitor::profile_t init_apply (const IR::Node *node) override
 
const IR::Nodepostorder (IR::MethodCallExpression *expression) override
 
 
bool warning_enabled (int warning_kind) const
 
- Public Member Functions inherited from P4::ResolutionContext
const IR::IDeclarationgetDeclaration (const IR::Path *path, bool notNull=false) const
 
const IR::IDeclarationgetDeclaration (const IR::This *, bool notNull=false) const
 
+auto getDeclarations (const IR::INamespace *ns) const
 Returns the set of decls that exist in the given namespace.
 
+auto getDeclsByName (const IR::INamespace *ns, cstring name) const
 Returns the set of decls with the given name that exist in the given namespace.
 
+std::vector< const IR::IDeclaration * > resolve (const IR::ID &name, ResolutionType type) const
 Resolve references for name, restricted to type declarations.
 
virtual const IR::IDeclarationresolvePath (const IR::Path *path, bool isType) const
 
+const IR::Type * resolveType (const IR::Type *type) const
 Resolve a refrence to a type type.
 
+const IR::IDeclarationresolveUnique (const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) const
 Resolve reference for name, restricted to type declarations, and expect one result.
 
- Public Member Functions inherited from P4::DeclarationLookup
@@ -393,15 +423,15 @@ + + - - @@ -433,6 +463,20 @@ + + + + + + + + + + @@ -447,6 +491,10 @@ + + +

Additional Inherited Members

IR::IndexedVector< IR::StatOrDecl > assignments
 
+MinimalNameGenerator nameGen
 
IR::IndexedVector< IR::Declaration > newDecls
 
RemoveComplexExpressionsPolicypolicy
 
-P4::ReferenceMaprefMap
 
P4::TypeMaptypeMap
 
void visit_children (const IR::Node *, std::function< void()> fn)
 
- Protected Member Functions inherited from P4::ResolutionContext
ResolutionContext (bool ao)
 
+std::vector< const IR::IDeclaration * > lookup (const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const
 
+std::vector< const IR::IDeclaration * > lookupMatchKind (const IR::ID &name) const
 
+const IR::Vector< IR::Argument > * methodArguments (cstring name) const
 We are resolving a method call. Find the arguments from the context.
 
- Protected Attributes inherited from P4::Transform
bool forceClone = false
bool visitDagOnce = true
 
- Protected Attributes inherited from P4::ResolutionContext
+bool anyOrder = false
 
diff --git a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.map b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.map index 599d4133552..a0316cdc49f 100644 --- a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.map +++ b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.map @@ -2,8 +2,13 @@ - - - - + + + + + + + + + diff --git a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.md5 b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.md5 index 8fb24fb98af..43aa1139fba 100644 --- a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.md5 +++ b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.md5 @@ -1 +1 @@ -745c5d8a484d001ac5e4c0bddb857ccc \ No newline at end of file +4e44ef6f018aaaed787c8d2aa8b3f96c \ No newline at end of file diff --git a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.svg b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.svg index fe62f7a2896..50964a7ef67 100644 --- a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.svg +++ b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph.svg @@ -4,8 +4,8 @@ - + @@ -50,8 +50,8 @@ Node3 - -P4::Transform + +P4::Transform @@ -59,8 +59,8 @@ Node3->Node2 - - + + @@ -68,8 +68,8 @@ Node4 - -P4::Visitor + +P4::Visitor @@ -77,8 +77,53 @@ Node4->Node3 - - + + + + + + + +Node5 + + +P4::ResolutionContext + + + + + +Node4->Node5 + + + + + + + + +Node5->Node2 + + + + + + + + +Node6 + + +P4::DeclarationLookup + + + + + +Node6->Node5 + + + diff --git a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph_org.svg b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph_org.svg index 9f6b355c1be..8aa870da155 100644 --- a/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph_org.svg +++ b/class_p4_1_1_b_m_v2_1_1_remove_complex_expressions__inherit__graph_org.svg @@ -4,8 +4,8 @@ - + P4::BMV2::RemoveComplexExpressions @@ -39,8 +39,8 @@ Node3 - -P4::Transform + +P4::Transform @@ -48,8 +48,8 @@ Node3->Node2 - - + + @@ -57,8 +57,8 @@ Node4 - -P4::Visitor + +P4::Visitor @@ -66,8 +66,53 @@ Node4->Node3 - - + + + + + + + +Node5 + + +P4::ResolutionContext + + + + + +Node4->Node5 + + + + + + + + +Node5->Node2 + + + + + + + + +Node6 + + +P4::DeclarationLookup + + + + + +Node6->Node5 + + + diff --git a/class_p4_1_1_check_extern_invocation_common-members.html b/class_p4_1_1_check_extern_invocation_common-members.html index 297b0be9b0f..3b1620a73cc 100644 --- a/class_p4_1_1_check_extern_invocation_common-members.html +++ b/class_p4_1_1_check_extern_invocation_common-members.html @@ -126,12 +126,14 @@

This is the complete list of members for P4::CheckExternInvocationCommon, including all inherited members.

- - + + + + - + @@ -158,6 +160,10 @@ + + + + @@ -169,19 +175,27 @@ + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/class_p4_1_1_check_extern_invocation_common.html b/class_p4_1_1_check_extern_invocation_common.html index aaed383c07f..77dc55c9856 100644 --- a/class_p4_1_1_check_extern_invocation_common.html +++ b/class_p4_1_1_check_extern_invocation_common.html @@ -136,7 +136,7 @@
Inheritance diagram for P4::CheckExternInvocationCommon:
-
+
[legend]
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Inspector)P4::Inspectorvirtual
called_by (defined in P4::Visitor)P4::Visitor
anyOrder (defined in P4::ResolutionContext)P4::ResolutionContextprotected
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Inspector)P4::Inspectorvirtual
called_by (defined in P4::Visitor)P4::Visitor
check_clone(const Visitor *a) (defined in P4::Visitor)P4::Visitorinlinevirtual
check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
checkExtern(const ExternMethod *extMethod, const IR::MethodCallExpression *expr)P4::CheckExternInvocationCommoninlineprotectedvirtual
checkExtern(const ExternFunction *extFunction, const IR::MethodCallExpression *expr)P4::CheckExternInvocationCommoninlineprotectedvirtual
CheckExternInvocationCommon(ReferenceMap *refMap, TypeMap *typeMap) (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninlineprotected
CheckExternInvocationCommon(TypeMap *typeMap) (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninlineexplicitprotected
checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)P4::CheckExternInvocationCommoninlineprotected
clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
clone() const (defined in P4::Visitor)P4::Visitorinlinevirtual
getContext() const (defined in P4::Visitor)P4::Visitorinline
getContextDepth() const (defined in P4::Visitor)P4::Visitorinline
getCurrentNode() constP4::Visitorinline
getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline
getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline
join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
joinFlows (defined in P4::Visitor)P4::Visitorprotected
lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
loop_revisit(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
pipeConstraints (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommonprotected
post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual
postorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
preorder(const IR::MethodCallExpression *expr) override (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninline
preorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
refMap (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommonprotected
methodArguments(cstring name) constP4::ResolutionContextprotected
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
pipeConstraints (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommonprotected
post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual
postorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
preorder(const IR::MethodCallExpression *expr) override (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninline
preorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected
ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected
resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext
resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual
resolveType(const IR::Type *type) constP4::ResolutionContext
resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext
revisit(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
revisit_visited() (defined in P4::Inspector)P4::Inspector
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
+ + + + + + + + + + + + + + + + + + + + + + +

@@ -325,12 +325,40 @@

 
bool warning_enabled (int warning_kind) const
 
- Public Member Functions inherited from P4::ResolutionContext
const IR::IDeclarationgetDeclaration (const IR::Path *path, bool notNull=false) const
 
const IR::IDeclarationgetDeclaration (const IR::This *, bool notNull=false) const
 
+auto getDeclarations (const IR::INamespace *ns) const
 Returns the set of decls that exist in the given namespace.
 
+auto getDeclsByName (const IR::INamespace *ns, cstring name) const
 Returns the set of decls with the given name that exist in the given namespace.
 
+std::vector< const IR::IDeclaration * > resolve (const IR::ID &name, ResolutionType type) const
 Resolve references for name, restricted to type declarations.
 
virtual const IR::IDeclarationresolvePath (const IR::Path *path, bool isType) const
 
+const IR::Type * resolveType (const IR::Type *type) const
 Resolve a refrence to a type type.
 
+const IR::IDeclarationresolveUnique (const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) const
 Resolve reference for name, restricted to type declarations, and expect one result.
 
- Public Member Functions inherited from P4::DeclarationLookup
- - + + @@ -363,15 +391,26 @@ + + + + + + + + + +

Protected Member Functions

CheckExternInvocationCommon (ReferenceMap *refMap, TypeMap *typeMap)
 
CheckExternInvocationCommon (TypeMap *typeMap)
 
virtual void checkExtern (const ExternFunction *extFunction, const IR::MethodCallExpression *expr)
 Method for checking constraints of extern functions given by parameters.
 
void visit_children (const IR::Node *, std::function< void()> fn)
 
- Protected Member Functions inherited from P4::ResolutionContext
ResolutionContext (bool ao)
 
+std::vector< const IR::IDeclaration * > lookup (const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const
 
+std::vector< const IR::IDeclaration * > lookupMatchKind (const IR::ID &name) const
 
+const IR::Vector< IR::Argument > * methodArguments (cstring name) const
 We are resolving a method call. Find the arguments from the context.
 
- - @@ -385,6 +424,10 @@ + + +

Protected Attributes

std::map< cstring, bitvecpipeConstraints
 
-ReferenceMaprefMap
 
TypeMaptypeMap
 
bool visitDagOnce = true
 
- Protected Attributes inherited from P4::ResolutionContext
+bool anyOrder = false
 
diff --git a/class_p4_1_1_check_extern_invocation_common__inherit__graph.map b/class_p4_1_1_check_extern_invocation_common__inherit__graph.map index 51cd9d18ef5..80a14f53172 100644 --- a/class_p4_1_1_check_extern_invocation_common__inherit__graph.map +++ b/class_p4_1_1_check_extern_invocation_common__inherit__graph.map @@ -1,9 +1,14 @@ - - - - - - - + + + + + + + + + + + + diff --git a/class_p4_1_1_check_extern_invocation_common__inherit__graph.md5 b/class_p4_1_1_check_extern_invocation_common__inherit__graph.md5 index f7cf7e5afd9..1a9888557cf 100644 --- a/class_p4_1_1_check_extern_invocation_common__inherit__graph.md5 +++ b/class_p4_1_1_check_extern_invocation_common__inherit__graph.md5 @@ -1 +1 @@ -ef3909250470aa5ea7bb99d40eaf3618 \ No newline at end of file +b994267e417160550e9bc89256b2925b \ No newline at end of file diff --git a/class_p4_1_1_check_extern_invocation_common__inherit__graph.svg b/class_p4_1_1_check_extern_invocation_common__inherit__graph.svg index d868f1ccedf..6d14df2302e 100644 --- a/class_p4_1_1_check_extern_invocation_common__inherit__graph.svg +++ b/class_p4_1_1_check_extern_invocation_common__inherit__graph.svg @@ -4,8 +4,8 @@ - + @@ -23,28 +23,28 @@ Node1 - -P4::CheckExternInvocation -Common + +P4::CheckExternInvocation +Common - - -Node4 - - -P4::DPDK::CheckPNAExtern -Invocation + + +Node6 + + +P4::DPDK::CheckPNAExtern +Invocation - - -Node1->Node4 - - - + + +Node1->Node6 + + + @@ -52,8 +52,8 @@ Node2 - -P4::Inspector + +P4::Inspector @@ -61,8 +61,8 @@ Node2->Node1 - - + + @@ -70,8 +70,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -79,8 +79,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/class_p4_1_1_check_extern_invocation_common__inherit__graph_org.svg b/class_p4_1_1_check_extern_invocation_common__inherit__graph_org.svg index 3ada97bedbb..e7afe34fe2a 100644 --- a/class_p4_1_1_check_extern_invocation_common__inherit__graph_org.svg +++ b/class_p4_1_1_check_extern_invocation_common__inherit__graph_org.svg @@ -4,36 +4,36 @@ - + P4::CheckExternInvocationCommon Node1 - -P4::CheckExternInvocation -Common + +P4::CheckExternInvocation +Common - - -Node4 - - -P4::DPDK::CheckPNAExtern -Invocation + + +Node6 + + +P4::DPDK::CheckPNAExtern +Invocation - - -Node1->Node4 - - - + + +Node1->Node6 + + + @@ -41,8 +41,8 @@ Node2 - -P4::Inspector + +P4::Inspector @@ -50,8 +50,8 @@ Node2->Node1 - - + + @@ -59,8 +59,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -68,8 +68,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/class_p4_1_1_complex_values-members.html b/class_p4_1_1_complex_values-members.html index e3d2a79cd97..7007b9f0fa1 100644 --- a/class_p4_1_1_complex_values-members.html +++ b/class_p4_1_1_complex_values-members.html @@ -126,12 +126,12 @@

This is the complete list of members for P4::ComplexValues, including all inherited members.

Additional Inherited Members

- - - - - - + + + + + + diff --git a/class_p4_1_1_complex_values.html b/class_p4_1_1_complex_values.html index 94cf7ce43a2..cc67e764a66 100644 --- a/class_p4_1_1_complex_values.html +++ b/class_p4_1_1_complex_values.html @@ -140,33 +140,33 @@
ComplexValues(ReferenceMap *refMap, TypeMap *typeMap) (defined in P4::ComplexValues)P4::ComplexValuesinline
explode(cstring prefix, const IR::Type_Struct *type, FieldsMap *map, IR::Vector< T > *result)P4::ComplexValues
getTranslation(const IR::IDeclaration *decl) (defined in P4::ComplexValues)P4::ComplexValuesinline
getTranslation(const IR::Expression *expression) (defined in P4::ComplexValues)P4::ComplexValuesinline
isNestedStruct(const IR::Type *type)P4::ComplexValues
refMap (defined in P4::ComplexValues)P4::ComplexValues
ComplexValues(TypeMap *typeMap, NameGenerator &nameGen) (defined in P4::ComplexValues)P4::ComplexValuesinline
explode(std::string_view prefix, const IR::Type_Struct *type, FieldsMap *map, IR::Vector< T > *result)P4::ComplexValues
getTranslation(const IR::IDeclaration *decl) const (defined in P4::ComplexValues)P4::ComplexValuesinline
getTranslation(const IR::Expression *expression) const (defined in P4::ComplexValues)P4::ComplexValuesinline
isNestedStruct(const IR::Type *type) constP4::ComplexValues
nameGen (defined in P4::ComplexValues)P4::ComplexValues
setTranslation(const IR::Expression *expression, Component *comp) (defined in P4::ComplexValues)P4::ComplexValuesinline
translation (defined in P4::ComplexValues)P4::ComplexValues
typeMap (defined in P4::ComplexValues)P4::ComplexValues
- - - + + - - - - - - - - - - + + + + + + + + + +

Public Member Functions

ComplexValues (ReferenceMap *refMap, TypeMap *typeMap)
 
+
ComplexValues (TypeMap *typeMap, NameGenerator &nameGen)
 
template<class T >
void explode (cstring prefix, const IR::Type_Struct *type, FieldsMap *map, IR::Vector< T > *result)
 Flatten a nested struct to only contain field declaration or non-nested struct.
 
-ComponentgetTranslation (const IR::Expression *expression)
 
-ComponentgetTranslation (const IR::IDeclaration *decl)
 
-bool isNestedStruct (const IR::Type *type)
 Helper function that test if a struct is nested.
 
void explode (std::string_view prefix, const IR::Type_Struct *type, FieldsMap *map, IR::Vector< T > *result)
 Flatten a nested struct to only contain field declaration or non-nested struct.
 
+ComponentgetTranslation (const IR::Expression *expression) const
 
+ComponentgetTranslation (const IR::IDeclaration *decl) const
 
+bool isNestedStruct (const IR::Type *type) const
 Helper function that test if a struct is nested.
 
void setTranslation (const IR::Expression *expression, Component *comp)
 
- - + + diff --git a/class_p4_1_1_complex_values.js b/class_p4_1_1_complex_values.js index c442df37e34..334f60311f8 100644 --- a/class_p4_1_1_complex_values.js +++ b/class_p4_1_1_complex_values.js @@ -3,6 +3,6 @@ var class_p4_1_1_complex_values = [ "Component", "struct_p4_1_1_complex_values_1_1_component.html", null ], [ "FieldsMap", "struct_p4_1_1_complex_values_1_1_fields_map.html", null ], [ "FinalName", "struct_p4_1_1_complex_values_1_1_final_name.html", null ], - [ "explode", "class_p4_1_1_complex_values.html#ac7bb9bf97bd5448607f463b21495da77", null ], - [ "isNestedStruct", "class_p4_1_1_complex_values.html#ac291c7ad90bf1d1061c79ddfdf08366f", null ] + [ "explode", "class_p4_1_1_complex_values.html#af0e65a2e15aeff14b9979f398cb48feb", null ], + [ "isNestedStruct", "class_p4_1_1_complex_values.html#af1df18a2d0d8ab84bc1d8664296dd538", null ] ]; \ No newline at end of file diff --git a/class_p4_1_1_constant_folding-members.html b/class_p4_1_1_constant_folding-members.html index f71b1051535..77a770b8efe 100644 --- a/class_p4_1_1_constant_folding-members.html +++ b/class_p4_1_1_constant_folding-members.html @@ -136,8 +136,6 @@ - - diff --git a/class_p4_1_1_constant_folding.html b/class_p4_1_1_constant_folding.html index cd00f0fabb9..94d3b95ac92 100644 --- a/class_p4_1_1_constant_folding.html +++ b/class_p4_1_1_constant_folding.html @@ -139,12 +139,6 @@ - - - - diff --git a/class_p4_1_1_copy_structures-members.html b/class_p4_1_1_copy_structures-members.html index 89d7e6ac083..0c53c5c5c84 100644 --- a/class_p4_1_1_copy_structures-members.html +++ b/class_p4_1_1_copy_structures-members.html @@ -138,7 +138,7 @@ - + diff --git a/class_p4_1_1_copy_structures.html b/class_p4_1_1_copy_structures.html index 86f9ae882f8..73ed45f6ea3 100644 --- a/class_p4_1_1_copy_structures.html +++ b/class_p4_1_1_copy_structures.html @@ -134,9 +134,9 @@

Public Attributes

-ReferenceMaprefMap
 
+NameGeneratornameGen
 
std::map< const IR::Expression *, Component * > translation
 
check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
clone() const override (defined in P4::PassManager)P4::PassManagerinlinevirtual
ConstantFolding(ReferenceMap *refMap, TypeMap *typeMap, ConstantFoldingPolicy *policy) (defined in P4::ConstantFolding)P4::ConstantFoldinginline
ConstantFolding(ReferenceMap *refMap, TypeMap *typeMap, bool warnings=true, TypeChecking *typeChecking=nullptr, ConstantFoldingPolicy *policy=nullptr) (defined in P4::ConstantFolding)P4::ConstantFoldinginline
ConstantFolding(TypeMap *typeMap, ConstantFoldingPolicy *policy) (defined in P4::ConstantFolding)P4::ConstantFoldinginline
ConstantFolding(ConstantFoldingPolicy *policy) (defined in P4::ConstantFolding)P4::ConstantFoldinginlineexplicit
ConstantFolding(TypeMap *typeMap, bool warnings=true, TypeChecking *typeChecking=nullptr, ConstantFoldingPolicy *policy=nullptr) (defined in P4::ConstantFolding)P4::ConstantFoldinginlineexplicit
 ConstantFolding (ConstantFoldingPolicy *policy)
 
ConstantFolding (ReferenceMap *refMap, TypeMap *typeMap, bool warnings=true, TypeChecking *typeChecking=nullptr, ConstantFoldingPolicy *policy=nullptr)
 
ConstantFolding (ReferenceMap *refMap, TypeMap *typeMap, ConstantFoldingPolicy *policy)
 
 ConstantFolding (TypeMap *typeMap, bool warnings=true, TypeChecking *typeChecking=nullptr, ConstantFoldingPolicy *policy=nullptr)
 
clone() const override (defined in P4::PassRepeated)P4::PassRepeatedinlinevirtual
Context typedef (defined in P4::Visitor)P4::Visitor
controlFlowVisitor() (defined in P4::Visitor)P4::Visitorinlinevirtual
CopyStructures(ReferenceMap *refMap, TypeMap *typeMap, bool errorOnMethodCall=true, bool copyHeaders=false, TypeChecking *typeChecking=nullptr) (defined in P4::CopyStructures)P4::CopyStructuresinlineexplicit
CopyStructures(TypeMap *typeMap, bool errorOnMethodCall=true, bool copyHeaders=false, TypeChecking *typeChecking=nullptr) (defined in P4::CopyStructures)P4::CopyStructuresinlineexplicit
debugHooks (defined in P4::PassManager)P4::PassManagerprotected
demangle(const char *) (defined in P4::Visitor)P4::Visitorstatic
dontForwardChildrenBeforePreorder (defined in P4::Visitor)P4::Visitorprotected
- - + + diff --git a/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation-members.html b/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation-members.html index e143b6d17b7..ff69c489df0 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation-members.html +++ b/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation-members.html @@ -129,7 +129,7 @@ - + diff --git a/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation.html b/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation.html index 06ea1a1c478..7a3fdf9c60a 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation.html +++ b/class_p4_1_1_d_p_d_k_1_1_check_extern_invocation.html @@ -139,9 +139,9 @@

Public Member Functions

CopyStructures (ReferenceMap *refMap, TypeMap *typeMap, bool errorOnMethodCall=true, bool copyHeaders=false, TypeChecking *typeChecking=nullptr)
 
CopyStructures (TypeMap *typeMap, bool errorOnMethodCall=true, bool copyHeaders=false, TypeChecking *typeChecking=nullptr)
 
- Public Member Functions inherited from P4::PassRepeated
 PassRepeated (const PassManager &other, unsigned repeats=0)
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Inspector)P4::Inspectorvirtual
called_by (defined in P4::Visitor)P4::Visitor
check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
CheckExternInvocation(P4::ReferenceMap *refMap, P4::TypeMap *typeMap, DpdkProgramStructure *structure) (defined in P4::DPDK::CheckExternInvocation)P4::DPDK::CheckExternInvocationinline
CheckExternInvocation(P4::TypeMap *typeMap, DpdkProgramStructure *structure) (defined in P4::DPDK::CheckExternInvocation)P4::DPDK::CheckExternInvocationinline
clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
clone() const (defined in P4::Visitor)P4::Visitorinlinevirtual
Context typedef (defined in P4::Visitor)P4::Visitor
- - + + diff --git a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation-members.html b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation-members.html index 1e77ae2b306..dd289475f86 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation-members.html +++ b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation-members.html @@ -126,12 +126,14 @@

This is the complete list of members for P4::DPDK::CheckPNAExternInvocation, including all inherited members.

Public Member Functions

CheckExternInvocation (P4::ReferenceMap *refMap, P4::TypeMap *typeMap, DpdkProgramStructure *structure)
 
CheckExternInvocation (P4::TypeMap *typeMap, DpdkProgramStructure *structure)
 
bool preorder (const IR::P4Program *program)
 
- - + + + + - + - + @@ -156,6 +158,10 @@ + + + + @@ -166,19 +172,27 @@ + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation.html b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation.html index 913c7d6b6a0..0b6594568ac 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation.html +++ b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation.html @@ -134,14 +134,14 @@
Inheritance diagram for P4::DPDK::CheckPNAExternInvocation:
-
+
[legend]
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Inspector)P4::Inspectorvirtual
called_by (defined in P4::Visitor)P4::Visitor
anyOrder (defined in P4::ResolutionContext)P4::ResolutionContextprotected
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Inspector)P4::Inspectorvirtual
called_by (defined in P4::Visitor)P4::Visitor
check_clone(const Visitor *a) (defined in P4::Visitor)P4::Visitorinlinevirtual
check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
CheckExternInvocationCommon(ReferenceMap *refMap, TypeMap *typeMap) (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninlineprotected
CheckExternInvocationCommon(TypeMap *typeMap) (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninlineexplicitprotected
checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)P4::CheckExternInvocationCommoninlineprotected
CheckPNAExternInvocation(P4::ReferenceMap *refMap, P4::TypeMap *typeMap, DpdkProgramStructure *structure) (defined in P4::DPDK::CheckPNAExternInvocation)P4::DPDK::CheckPNAExternInvocationinline
CheckPNAExternInvocation(P4::TypeMap *typeMap, DpdkProgramStructure *structure) (defined in P4::DPDK::CheckPNAExternInvocation)P4::DPDK::CheckPNAExternInvocationinline
clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
clone() const (defined in P4::Visitor)P4::Visitorinlinevirtual
Context typedef (defined in P4::Visitor)P4::Visitor
getContext() const (defined in P4::Visitor)P4::Visitorinline
getContextDepth() const (defined in P4::Visitor)P4::Visitorinline
getCurrentNode() constP4::Visitorinline
getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline
getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline
join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
joinFlows (defined in P4::Visitor)P4::Visitorprotected
lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
loop_revisit(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
pipeConstraints (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommonprotected
post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual
postorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
preorder(const IR::MethodCallExpression *expr) override (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninline
preorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
refMap (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommonprotected
methodArguments(cstring name) constP4::ResolutionContextprotected
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
pipeConstraints (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommonprotected
post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual
postorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
preorder(const IR::MethodCallExpression *expr) override (defined in P4::CheckExternInvocationCommon)P4::CheckExternInvocationCommoninline
preorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected
ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected
resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext
resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual
resolveType(const IR::Type *type) constP4::ResolutionContext
resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext
revisit(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
revisit_visited() (defined in P4::Inspector)P4::Inspector
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
- - + + @@ -327,6 +327,34 @@ + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

CheckPNAExternInvocation (P4::ReferenceMap *refMap, P4::TypeMap *typeMap, DpdkProgramStructure *structure)
 
CheckPNAExternInvocation (P4::TypeMap *typeMap, DpdkProgramStructure *structure)
 
- Public Member Functions inherited from P4::CheckExternInvocationCommon
bool preorder (const IR::MethodCallExpression *expr) override
 
bool warning_enabled (int warning_kind) const
 
- Public Member Functions inherited from P4::ResolutionContext
const IR::IDeclarationgetDeclaration (const IR::Path *path, bool notNull=false) const
 
const IR::IDeclarationgetDeclaration (const IR::This *, bool notNull=false) const
 
+auto getDeclarations (const IR::INamespace *ns) const
 Returns the set of decls that exist in the given namespace.
 
+auto getDeclsByName (const IR::INamespace *ns, cstring name) const
 Returns the set of decls with the given name that exist in the given namespace.
 
+std::vector< const IR::IDeclaration * > resolve (const IR::ID &name, ResolutionType type) const
 Resolve references for name, restricted to type declarations.
 
virtual const IR::IDeclarationresolvePath (const IR::Path *path, bool isType) const
 
+const IR::Type * resolveType (const IR::Type *type) const
 Resolve a refrence to a type type.
 
+const IR::IDeclarationresolveUnique (const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) const
 Resolve reference for name, restricted to type declarations, and expect one result.
 
- Public Member Functions inherited from P4::DeclarationLookup
@@ -354,9 +382,9 @@ SplitFlowVisit_base *  - - + + @@ -377,13 +405,24 @@ + + + + + + + + + + - - @@ -397,6 +436,10 @@ + + +

Additional Inherited Members

split_link_mem = nullptr
 
- Protected Member Functions inherited from P4::CheckExternInvocationCommon
CheckExternInvocationCommon (ReferenceMap *refMap, TypeMap *typeMap)
 
CheckExternInvocationCommon (TypeMap *typeMap)
 
void checkPipeConstraints (cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)
 Check if the invocation of extern object method or extern function is valid in the block where it is invoked.
 
void visit_children (const IR::Node *, std::function< void()> fn)
 
- Protected Member Functions inherited from P4::ResolutionContext
ResolutionContext (bool ao)
 
+std::vector< const IR::IDeclaration * > lookup (const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const
 
+std::vector< const IR::IDeclaration * > lookupMatchKind (const IR::ID &name) const
 
+const IR::Vector< IR::Argument > * methodArguments (cstring name) const
 We are resolving a method call. Find the arguments from the context.
 
- Protected Attributes inherited from P4::CheckExternInvocationCommon
std::map< cstring, bitvecpipeConstraints
 
-ReferenceMaprefMap
 
TypeMaptypeMap
 
bool visitDagOnce = true
 
- Protected Attributes inherited from P4::ResolutionContext
+bool anyOrder = false
 

Detailed Description

Class for checking constraints for invocations of PNA architecture extern methods and functions.

diff --git a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.map b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.map index c78ea0c3f0e..c7522b7dd3f 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.map +++ b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.map @@ -1,9 +1,14 @@ - - - - - - - + + + + + + + + + + + + diff --git a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.md5 b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.md5 index 74b612aa9ac..b673ea14307 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.md5 +++ b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.md5 @@ -1 +1 @@ -4e98a1e0101e8de6a5492326b5090672 \ No newline at end of file +8f198ba73e991a9c088dadac0b7d59b5 \ No newline at end of file diff --git a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.svg b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.svg index d2c6da25669..9acb6389c2c 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.svg +++ b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph.svg @@ -4,8 +4,8 @@ - + @@ -23,9 +23,9 @@ Node1 - -P4::DPDK::CheckPNAExtern -Invocation + +P4::DPDK::CheckPNAExtern +Invocation @@ -33,9 +33,9 @@ Node2 - -P4::CheckExternInvocation -Common + +P4::CheckExternInvocation +Common @@ -43,8 +43,8 @@ Node2->Node1 - - + + @@ -52,8 +52,8 @@ Node3 - -P4::Inspector + +P4::Inspector @@ -61,8 +61,8 @@ Node3->Node2 - - + + @@ -70,8 +70,8 @@ Node4 - -P4::Visitor + +P4::Visitor @@ -79,8 +79,53 @@ Node4->Node3 - - + + + + + + + +Node5 + + +P4::ResolutionContext + + + + + +Node4->Node5 + + + + + + + + +Node5->Node2 + + + + + + + + +Node6 + + +P4::DeclarationLookup + + + + + +Node6->Node5 + + + diff --git a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph_org.svg b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph_org.svg index 3d512e70fd1..c7e47074929 100644 --- a/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph_org.svg +++ b/class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation__inherit__graph_org.svg @@ -4,17 +4,17 @@ - + P4::DPDK::CheckPNAExternInvocation Node1 - -P4::DPDK::CheckPNAExtern -Invocation + +P4::DPDK::CheckPNAExtern +Invocation @@ -22,9 +22,9 @@ Node2 - -P4::CheckExternInvocation -Common + +P4::CheckExternInvocation +Common @@ -32,8 +32,8 @@ Node2->Node1 - - + + @@ -41,8 +41,8 @@ Node3 - -P4::Inspector + +P4::Inspector @@ -50,8 +50,8 @@ Node3->Node2 - - + + @@ -59,8 +59,8 @@ Node4 - -P4::Visitor + +P4::Visitor @@ -68,8 +68,53 @@ Node4->Node3 - - + + + + + + + +Node5 + + +P4::ResolutionContext + + + + + +Node4->Node5 + + + + + + + + +Node5->Node2 + + + + + + + + +Node6 + + +P4::DeclarationLookup + + + + + +Node6->Node5 + + + diff --git a/class_p4_1_1_declaration_lookup__inherit__graph.map b/class_p4_1_1_declaration_lookup__inherit__graph.map index f47503f4ee0..28f45941dbd 100644 --- a/class_p4_1_1_declaration_lookup__inherit__graph.map +++ b/class_p4_1_1_declaration_lookup__inherit__graph.map @@ -1,99 +1,99 @@ - - - - - + + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/class_p4_1_1_declaration_lookup__inherit__graph.md5 b/class_p4_1_1_declaration_lookup__inherit__graph.md5 index 43955bed875..07377ab05af 100644 --- a/class_p4_1_1_declaration_lookup__inherit__graph.md5 +++ b/class_p4_1_1_declaration_lookup__inherit__graph.md5 @@ -1 +1 @@ -db4fbe6d783f004afd5ed5ec513c9a62 \ No newline at end of file +6049fea659f5879c5b9374d7ac599728 \ No newline at end of file diff --git a/class_p4_1_1_declaration_lookup__inherit__graph.svg b/class_p4_1_1_declaration_lookup__inherit__graph.svg index c67980eae6f..89fb038a3b6 100644 --- a/class_p4_1_1_declaration_lookup__inherit__graph.svg +++ b/class_p4_1_1_declaration_lookup__inherit__graph.svg @@ -4,7 +4,7 @@ - + @@ -48,7 +48,7 @@ @@ -104,10 +104,10 @@ var sectionId = 'dynsection-0'; Node4 - -P4::AbstractInliner -< ActionsInlineList, - AInlineWorkList > + +P4::AbstractInliner +< ActionsInlineList, + AInlineWorkList > @@ -115,7 +115,7 @@ var sectionId = 'dynsection-0'; Node3->Node4 - + @@ -124,10 +124,10 @@ var sectionId = 'dynsection-0'; Node6 - -P4::AbstractInliner -< FunctionsInlineList, - FunctionsInlineWorkList > + +P4::AbstractInliner +< FunctionsInlineList, + FunctionsInlineWorkList > @@ -135,7 +135,7 @@ var sectionId = 'dynsection-0'; Node3->Node6 - + @@ -144,9 +144,9 @@ var sectionId = 'dynsection-0'; Node8 - -P4::AbstractInliner -< InlineList, InlineSummary > + +P4::AbstractInliner +< InlineList, InlineSummary > @@ -154,7 +154,7 @@ var sectionId = 'dynsection-0'; Node3->Node8 - + @@ -163,10 +163,10 @@ var sectionId = 'dynsection-0'; Node10 - -P4::AbstractInliner -< P4::InlineList, InlineWork -List > + +P4::AbstractInliner +< P4::InlineList, InlineWork +List > @@ -174,8 +174,8 @@ var sectionId = 'dynsection-0'; Node3->Node10 - - + + @@ -183,9 +183,9 @@ var sectionId = 'dynsection-0'; Node11 - -P4::AbstractInliner -< InlineList, InlineWorkList > + +P4::AbstractInliner +< InlineList, InlineWorkList > @@ -193,7 +193,7 @@ var sectionId = 'dynsection-0'; Node3->Node11 - + @@ -201,9 +201,10 @@ var sectionId = 'dynsection-0'; Node12 - - -P4::ComputeDefUse + + +P4::CheckExternInvocation +Common @@ -211,621 +212,621 @@ var sectionId = 'dynsection-0'; Node3->Node12 - + - - -Node13 - - -P4::ComputeDefUse:: -SetupJoinPoints - - - - - -Node3->Node13 - - - - - - Node14 - - -P4::ComputeParserCG + + +P4::ComputeDefUse - + Node3->Node14 - - - + + + Node15 - - -P4::ConstantTypeSubstitution + + +P4::ComputeDefUse:: +SetupJoinPoints - + Node3->Node15 - - - + + + Node16 - - -P4::CreateStructInitializers + + +P4::ComputeParserCG - + Node3->Node16 - - - + + + Node17 - - -P4::Deprecated + + +P4::ConstantTypeSubstitution - + Node3->Node17 - - - + + + Node18 - - -P4::DiscoverActionsInlining + + +P4::CreateStructInitializers - + Node3->Node18 - - - + + + Node19 - - -P4::DiscoverFunctionsInlining + + +P4::Deprecated - + Node3->Node19 - - - + + + Node20 - - -P4::DoCheckConstants + + +P4::DiscoverActionsInlining - + Node3->Node20 - - - + + + Node21 - - -P4::DoCheckCoreMethods + + +P4::DiscoverFunctionsInlining - + Node3->Node21 - - - + + + Node22 - - -P4::DoConstantFolding + + +P4::DoCheckConstants - + Node3->Node22 - - - + + + Node23 - - -P4::DoDefaultArguments + + +P4::DoCheckCoreMethods - + Node3->Node23 - - - + + + Node24 - - -P4::DoExpandEmit + + +P4::DoConstantFolding - + Node3->Node24 - - - + + + Node25 - - -P4::DoExpandLookahead + + +P4::DoDefaultArguments - + Node3->Node25 - - - + + + Node26 - - -P4::DoOrderArguments + + +P4::DoExpandEmit - + Node3->Node26 - - - + + + Node27 - - -P4::DoRemoveAssertAssume + + +P4::DoExpandLookahead - + Node3->Node27 - - - + + + Node28 - - -P4::DoRemoveExits + + +P4::DoLocalCopyPropagation - + Node3->Node28 - - - + + + Node29 - - -P4::DoRemoveMiss + + +P4::DoOrderArguments - + Node3->Node29 - - - + + + Node30 - - -P4::DoReplaceTypedef + + +P4::DoRemoveAssertAssume - + Node3->Node30 - - - + + + Node31 - - -P4::DoSimplifyControlFlow + + +P4::DoRemoveExits - + Node3->Node31 - - - + + + Node32 - - -P4::DoSimplifyExpressions + + +P4::DoRemoveMiss - + Node3->Node32 - - - + + + Node33 - - -P4::DoStaticAssert + + +P4::DoReplaceTypedef - + Node3->Node33 - - - + + + Node34 - - -P4::DoTableHit + + +P4::DoSimplifyControlFlow - + Node3->Node34 - - - + + + Node35 - - -P4::DontcareArgs + + +P4::DoSimplifyExpressions - + Node3->Node35 - - - + + + Node36 - - -P4::EntryPriorities + + +P4::DoStaticAssert - + Node3->Node36 - - - + + + Node37 - - -P4::FindActionParameters + + +P4::DoTableHit - + Node3->Node37 - - - + + + Node38 - - -P4::FindFunctionSpecializations + + +P4::DontcareArgs - + Node3->Node38 - - - + + + Node39 - - -P4::FindGlobalActionUses + + +P4::EntryPriorities - + Node3->Node39 - - - + + + Node40 - - -P4::FindRepeatedActionUses + + +P4::FindActionParameters - + Node3->Node40 - - - + + + Node41 - - -P4::FindSpecializations + + +P4::FindFunctionSpecializations - + Node3->Node41 - - - + + + Node42 - - -P4::FunctionsInliner -::isLocalExpression + + +P4::FindGlobalActionUses - + Node3->Node42 - - - + + + Node43 - - -P4::HasTableApply + + +P4::FindRepeatedActionUses - + Node3->Node43 - - - + + + Node44 - - -P4::InstantiateDirectCalls + + +P4::FindSpecializations - + Node3->Node44 - - - + + + Node45 - - -P4::IsValid + + +P4::FunctionsInliner +::isLocalExpression - + Node3->Node45 - - - + + + Node46 - - -P4::KeySideEffect + + +P4::HasTableApply - + Node3->Node46 - - + + + + + + + + +Node47 + + +P4::InstantiateDirectCalls + + + + + +Node3->Node47 + + @@ -833,9 +834,9 @@ var sectionId = 'dynsection-0'; Node48 - - -P4::LocalizeActions + + +P4::IsValid @@ -843,7 +844,7 @@ var sectionId = 'dynsection-0'; Node3->Node48 - + @@ -851,9 +852,9 @@ var sectionId = 'dynsection-0'; Node49 - - -P4::MoveInitializers + + +P4::KeySideEffect @@ -861,80 +862,80 @@ var sectionId = 'dynsection-0'; Node3->Node49 - + - - -Node50 - - -P4::P4Fmt::P4Formatter - - - - - -Node3->Node50 - - - - - - Node51 - - -P4::P4Tools::P4ProgramDCGCreator + + +P4::LocalizeActions - + Node3->Node51 - - - + + + Node52 - - -P4::ReadsWrites + + +P4::MoveInitializers - + Node3->Node52 - - - + + + Node53 - - -P4::RenameSymbols + + +P4::P4Fmt::P4Formatter - + Node3->Node53 - - - + + + + + + + + +Node54 + + +P4::P4Tools::P4ProgramDCGCreator + + + + + +Node3->Node54 + + + diff --git a/class_p4_1_1_declaration_lookup__inherit__graph_org.svg b/class_p4_1_1_declaration_lookup__inherit__graph_org.svg index c788020492f..55e0d9b1519 100644 --- a/class_p4_1_1_declaration_lookup__inherit__graph_org.svg +++ b/class_p4_1_1_declaration_lookup__inherit__graph_org.svg @@ -4,9 +4,9 @@ - - + + P4::DeclarationLookup @@ -57,10 +57,10 @@ Node4 - -P4::AbstractInliner -< ActionsInlineList, - AInlineWorkList > + +P4::AbstractInliner +< ActionsInlineList, + AInlineWorkList > @@ -68,7 +68,7 @@ Node3->Node4 - + @@ -77,10 +77,10 @@ Node6 - -P4::AbstractInliner -< FunctionsInlineList, - FunctionsInlineWorkList > + +P4::AbstractInliner +< FunctionsInlineList, + FunctionsInlineWorkList > @@ -88,7 +88,7 @@ Node3->Node6 - + @@ -97,9 +97,9 @@ Node8 - -P4::AbstractInliner -< InlineList, InlineSummary > + +P4::AbstractInliner +< InlineList, InlineSummary > @@ -107,7 +107,7 @@ Node3->Node8 - + @@ -116,10 +116,10 @@ Node10 - -P4::AbstractInliner -< P4::InlineList, InlineWork -List > + +P4::AbstractInliner +< P4::InlineList, InlineWork +List > @@ -127,8 +127,8 @@ Node3->Node10 - - + + @@ -136,9 +136,9 @@ Node11 - -P4::AbstractInliner -< InlineList, InlineWorkList > + +P4::AbstractInliner +< InlineList, InlineWorkList > @@ -146,7 +146,7 @@ Node3->Node11 - + @@ -154,9 +154,10 @@ Node12 - - -P4::ComputeDefUse + + +P4::CheckExternInvocation +Common @@ -164,621 +165,621 @@ Node3->Node12 - + - - -Node13 - - -P4::ComputeDefUse:: -SetupJoinPoints - - - - - -Node3->Node13 - - - - - - Node14 - - -P4::ComputeParserCG + + +P4::ComputeDefUse - + Node3->Node14 - - - + + + Node15 - - -P4::ConstantTypeSubstitution + + +P4::ComputeDefUse:: +SetupJoinPoints - + Node3->Node15 - - - + + + Node16 - - -P4::CreateStructInitializers + + +P4::ComputeParserCG - + Node3->Node16 - - - + + + Node17 - - -P4::Deprecated + + +P4::ConstantTypeSubstitution - + Node3->Node17 - - - + + + Node18 - - -P4::DiscoverActionsInlining + + +P4::CreateStructInitializers - + Node3->Node18 - - - + + + Node19 - - -P4::DiscoverFunctionsInlining + + +P4::Deprecated - + Node3->Node19 - - - + + + Node20 - - -P4::DoCheckConstants + + +P4::DiscoverActionsInlining - + Node3->Node20 - - - + + + Node21 - - -P4::DoCheckCoreMethods + + +P4::DiscoverFunctionsInlining - + Node3->Node21 - - - + + + Node22 - - -P4::DoConstantFolding + + +P4::DoCheckConstants - + Node3->Node22 - - - + + + Node23 - - -P4::DoDefaultArguments + + +P4::DoCheckCoreMethods - + Node3->Node23 - - - + + + Node24 - - -P4::DoExpandEmit + + +P4::DoConstantFolding - + Node3->Node24 - - - + + + Node25 - - -P4::DoExpandLookahead + + +P4::DoDefaultArguments - + Node3->Node25 - - - + + + Node26 - - -P4::DoOrderArguments + + +P4::DoExpandEmit - + Node3->Node26 - - - + + + Node27 - - -P4::DoRemoveAssertAssume + + +P4::DoExpandLookahead - + Node3->Node27 - - - + + + Node28 - - -P4::DoRemoveExits + + +P4::DoLocalCopyPropagation - + Node3->Node28 - - - + + + Node29 - - -P4::DoRemoveMiss + + +P4::DoOrderArguments - + Node3->Node29 - - - + + + Node30 - - -P4::DoReplaceTypedef + + +P4::DoRemoveAssertAssume - + Node3->Node30 - - - + + + Node31 - - -P4::DoSimplifyControlFlow + + +P4::DoRemoveExits - + Node3->Node31 - - - + + + Node32 - - -P4::DoSimplifyExpressions + + +P4::DoRemoveMiss - + Node3->Node32 - - - + + + Node33 - - -P4::DoStaticAssert + + +P4::DoReplaceTypedef - + Node3->Node33 - - - + + + Node34 - - -P4::DoTableHit + + +P4::DoSimplifyControlFlow - + Node3->Node34 - - - + + + Node35 - - -P4::DontcareArgs + + +P4::DoSimplifyExpressions - + Node3->Node35 - - - + + + Node36 - - -P4::EntryPriorities + + +P4::DoStaticAssert - + Node3->Node36 - - - + + + Node37 - - -P4::FindActionParameters + + +P4::DoTableHit - + Node3->Node37 - - - + + + Node38 - - -P4::FindFunctionSpecializations + + +P4::DontcareArgs - + Node3->Node38 - - - + + + Node39 - - -P4::FindGlobalActionUses + + +P4::EntryPriorities - + Node3->Node39 - - - + + + Node40 - - -P4::FindRepeatedActionUses + + +P4::FindActionParameters - + Node3->Node40 - - - + + + Node41 - - -P4::FindSpecializations + + +P4::FindFunctionSpecializations - + Node3->Node41 - - - + + + Node42 - - -P4::FunctionsInliner -::isLocalExpression + + +P4::FindGlobalActionUses - + Node3->Node42 - - - + + + Node43 - - -P4::HasTableApply + + +P4::FindRepeatedActionUses - + Node3->Node43 - - - + + + Node44 - - -P4::InstantiateDirectCalls + + +P4::FindSpecializations - + Node3->Node44 - - - + + + Node45 - - -P4::IsValid + + +P4::FunctionsInliner +::isLocalExpression - + Node3->Node45 - - - + + + Node46 - - -P4::KeySideEffect + + +P4::HasTableApply - + Node3->Node46 - - + + + + + + + + +Node47 + + +P4::InstantiateDirectCalls + + + + + +Node3->Node47 + + @@ -786,9 +787,9 @@ Node48 - - -P4::LocalizeActions + + +P4::IsValid @@ -796,7 +797,7 @@ Node3->Node48 - + @@ -804,9 +805,9 @@ Node49 - - -P4::MoveInitializers + + +P4::KeySideEffect @@ -814,80 +815,80 @@ Node3->Node49 - + - - -Node50 - - -P4::P4Fmt::P4Formatter - - - - - -Node3->Node50 - - - - - - Node51 - - -P4::P4Tools::P4ProgramDCGCreator + + +P4::LocalizeActions - + Node3->Node51 - - - + + + Node52 - - -P4::ReadsWrites + + +P4::MoveInitializers - + Node3->Node52 - - - + + + Node53 - - -P4::RenameSymbols + + +P4::P4Fmt::P4Formatter - + Node3->Node53 - - - + + + + + + + + +Node54 + + +P4::P4Tools::P4ProgramDCGCreator + + + + + +Node3->Node54 + + + diff --git a/class_p4_1_1_do_constant_folding-members.html b/class_p4_1_1_do_constant_folding-members.html index 5b585351632..cc6b66bc9c2 100644 --- a/class_p4_1_1_do_constant_folding-members.html +++ b/class_p4_1_1_do_constant_folding-members.html @@ -143,135 +143,136 @@
demangle(const char *) (defined in P4::Visitor)P4::Visitorstatic DoConstantFolding(const DeclarationLookup *refMap, const TypeMap *typeMap, bool warnings=true, ConstantFoldingPolicy *policy=nullptr) (defined in P4::DoConstantFolding)P4::DoConstantFoldinginline DoConstantFolding(const TypeMap *typeMap, bool warnings=true, ConstantFoldingPolicy *policy=nullptr) (defined in P4::DoConstantFolding)P4::DoConstantFoldinginlineexplicit - dontForwardChildrenBeforePreorder (defined in P4::Visitor)P4::Visitorprotected - end_apply() (defined in P4::Visitor)P4::Visitorvirtual - end_apply(const IR::Node *root) (defined in P4::Visitor)P4::Visitorvirtual - erase_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual - findContext(const Context *&c) const (defined in P4::Visitor)P4::Visitorinline - findContext() const (defined in P4::Visitor)P4::Visitorinline - findOrigCtxt(const Context *&c) const (defined in P4::Visitor)P4::Visitorinline - findOrigCtxt() const (defined in P4::Visitor)P4::Visitorinline - flow_clone() (defined in P4::Visitor)P4::Visitorinlinevirtual - flow_merge(Visitor &)P4::Visitorinlinevirtual - flow_merge_closure(Visitor &) (defined in P4::Visitor)P4::Visitorinlinevirtual - flow_merge_global_from(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual - flow_merge_global_to(cstring)P4::Visitorinlinevirtual - forceClone (defined in P4::Transform)P4::Transformprotected - getChildContext() const (defined in P4::Visitor)P4::Visitorinline - getChildrenVisited() const (defined in P4::Visitor)P4::Visitorinline - getConstant(const IR::Expression *expr) constP4::DoConstantFoldingprotected - getContext() const (defined in P4::Visitor)P4::Visitorinline - getContextDepth() const (defined in P4::Visitor)P4::Visitorinline - getCurrentNode() constP4::Visitorinline - getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual - getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual - getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline - getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline - getOriginal() const (defined in P4::Visitor)P4::Visitorinline - getParent() const (defined in P4::Visitor)P4::Visitorinline - has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual - init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual - init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor - init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual - internalName (defined in P4::Visitor)P4::Visitormutable - isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline - join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual - joinFlows (defined in P4::Visitor)P4::Visitorprotected - lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected - lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected - loop_revisit(const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual - methodArguments(cstring name) constP4::ResolutionContextprotected - name() const (defined in P4::Visitor)P4::Visitorinlinevirtual - parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline - parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline - parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline - parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline - policy (defined in P4::DoConstantFolding)P4::DoConstantFoldingprotected - post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual - postorder(IR::Declaration_Constant *d) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::PathExpression *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Cmpl *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Neg *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::UPlus *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::LNot *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::LAnd *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::LOr *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Slice *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::PlusSlice *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Add *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::AddSat *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Sub *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::SubSat *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Mul *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Div *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Mod *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::BXor *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::BAnd *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::BOr *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Equ *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Neq *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Lss *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Grt *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Leq *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Geq *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Shl *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Shr *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Concat *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Member *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Cast *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Mux *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Type_Bits *type) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Type_Varbits *type) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::SelectExpression *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::IfStatement *statement) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - postorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual - preorder(IR::AssignmentStatement *statement) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - preorder(IR::ArrayIndex *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - preorder(IR::SwitchCase *c) override (defined in P4::DoConstantFolding)P4::DoConstantFolding - preorder(IR::BlockStatement *bs) override (defined in P4::DoConstantFolding)P4::DoConstantFoldinginline - preorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual - print_context() const (defined in P4::Visitor)P4::Visitor - prune() (defined in P4::Transform)P4::Transforminline - refMapP4::DoConstantFoldingprotected - ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected - ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected - resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext - resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual - resolveType(const IR::Type *type) constP4::ResolutionContext - resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext - Result enum nameP4::DoConstantFoldingprotected - revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual - revisit_visited() (defined in P4::Transform)P4::Transform - setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline - setContains(const IR::Expression *keySet, const IR::Expression *constant) constP4::DoConstantFoldingprotected - setName(const char *name) (defined in P4::Visitor)P4::Visitorinline - shift(const IR::Operation_Binary *op)P4::DoConstantFoldingprotected - split_link (defined in P4::Visitor)P4::Visitor - split_link_mem (defined in P4::Visitor)P4::Visitor - transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected - typeMapP4::DoConstantFoldingprotected - typesKnownP4::DoConstantFoldingprotected - visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline - visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline - visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline - visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline - visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline - visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline - visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline - visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline - visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline - visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected - visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform - visitAgain() const override (defined in P4::Transform)P4::Transformvirtual - visitDagOnce (defined in P4::Visitor)P4::Visitorprotected - visitOnce() const override (defined in P4::Transform)P4::Transformvirtual - Visitor() (defined in P4::Visitor)P4::Visitorinline - warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline - P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline - warning_enabled(int warning_kind) constP4::Visitorinline - P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic - warningsP4::DoConstantFoldingprotected - ~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual + DoConstantFolding() (defined in P4::DoConstantFolding)P4::DoConstantFoldinginline + dontForwardChildrenBeforePreorder (defined in P4::Visitor)P4::Visitorprotected + end_apply() (defined in P4::Visitor)P4::Visitorvirtual + end_apply(const IR::Node *root) (defined in P4::Visitor)P4::Visitorvirtual + erase_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual + findContext(const Context *&c) const (defined in P4::Visitor)P4::Visitorinline + findContext() const (defined in P4::Visitor)P4::Visitorinline + findOrigCtxt(const Context *&c) const (defined in P4::Visitor)P4::Visitorinline + findOrigCtxt() const (defined in P4::Visitor)P4::Visitorinline + flow_clone() (defined in P4::Visitor)P4::Visitorinlinevirtual + flow_merge(Visitor &)P4::Visitorinlinevirtual + flow_merge_closure(Visitor &) (defined in P4::Visitor)P4::Visitorinlinevirtual + flow_merge_global_from(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual + flow_merge_global_to(cstring)P4::Visitorinlinevirtual + forceClone (defined in P4::Transform)P4::Transformprotected + getChildContext() const (defined in P4::Visitor)P4::Visitorinline + getChildrenVisited() const (defined in P4::Visitor)P4::Visitorinline + getConstant(const IR::Expression *expr) constP4::DoConstantFoldingprotected + getContext() const (defined in P4::Visitor)P4::Visitorinline + getContextDepth() const (defined in P4::Visitor)P4::Visitorinline + getCurrentNode() constP4::Visitorinline + getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual + getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual + getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline + getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline + getOriginal() const (defined in P4::Visitor)P4::Visitorinline + getParent() const (defined in P4::Visitor)P4::Visitorinline + has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual + init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual + init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor + init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual + internalName (defined in P4::Visitor)P4::Visitormutable + isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline + join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual + joinFlows (defined in P4::Visitor)P4::Visitorprotected + lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected + lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected + loop_revisit(const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual + methodArguments(cstring name) constP4::ResolutionContextprotected + name() const (defined in P4::Visitor)P4::Visitorinlinevirtual + parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline + parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline + parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline + parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline + policy (defined in P4::DoConstantFolding)P4::DoConstantFoldingprotected + post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual + postorder(IR::Declaration_Constant *d) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::PathExpression *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Cmpl *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Neg *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::UPlus *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::LNot *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::LAnd *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::LOr *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Slice *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::PlusSlice *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Add *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::AddSat *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Sub *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::SubSat *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Mul *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Div *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Mod *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::BXor *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::BAnd *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::BOr *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Equ *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Neq *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Lss *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Grt *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Leq *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Geq *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Shl *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Shr *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Concat *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Member *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Cast *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Mux *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Type_Bits *type) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Type_Varbits *type) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::SelectExpression *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::IfStatement *statement) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + postorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual + preorder(IR::AssignmentStatement *statement) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + preorder(IR::ArrayIndex *e) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + preorder(IR::SwitchCase *c) override (defined in P4::DoConstantFolding)P4::DoConstantFolding + preorder(IR::BlockStatement *bs) override (defined in P4::DoConstantFolding)P4::DoConstantFoldinginline + preorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual + print_context() const (defined in P4::Visitor)P4::Visitor + prune() (defined in P4::Transform)P4::Transforminline + refMapP4::DoConstantFoldingprotected + ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected + ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected + resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext + resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual + resolveType(const IR::Type *type) constP4::ResolutionContext + resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext + Result enum nameP4::DoConstantFoldingprotected + revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual + revisit_visited() (defined in P4::Transform)P4::Transform + setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline + setContains(const IR::Expression *keySet, const IR::Expression *constant) constP4::DoConstantFoldingprotected + setName(const char *name) (defined in P4::Visitor)P4::Visitorinline + shift(const IR::Operation_Binary *op)P4::DoConstantFoldingprotected + split_link (defined in P4::Visitor)P4::Visitor + split_link_mem (defined in P4::Visitor)P4::Visitor + transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected + typeMapP4::DoConstantFoldingprotected + typesKnownP4::DoConstantFoldingprotected + visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline + visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline + visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline + visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline + visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline + visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline + visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline + visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline + visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline + visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected + visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform + visitAgain() const override (defined in P4::Transform)P4::Transformvirtual + visitDagOnce (defined in P4::Visitor)P4::Visitorprotected + visitOnce() const override (defined in P4::Transform)P4::Transformvirtual + Visitor() (defined in P4::Visitor)P4::Visitorinline + warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline + P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline + warning_enabled(int warning_kind) constP4::Visitorinline + P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic + warningsP4::DoConstantFoldingprotected + ~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual
diff --git a/class_p4_1_1_do_eliminate_switch-members.html b/class_p4_1_1_do_eliminate_switch-members.html index 4afe0dfc721..bd7bf838bf1 100644 --- a/class_p4_1_1_do_eliminate_switch-members.html +++ b/class_p4_1_1_do_eliminate_switch-members.html @@ -134,7 +134,7 @@ Context typedef (defined in P4::Visitor)P4::Visitor controlFlowVisitor() (defined in P4::Visitor)P4::Visitorinlinevirtual demangle(const char *) (defined in P4::Visitor)P4::Visitorstatic - DoEliminateSwitch(ReferenceMap *refMap, const TypeMap *typeMap) (defined in P4::DoEliminateSwitch)P4::DoEliminateSwitchinline + DoEliminateSwitch(const TypeMap *typeMap) (defined in P4::DoEliminateSwitch)P4::DoEliminateSwitchinlineexplicit dontForwardChildrenBeforePreorder (defined in P4::Visitor)P4::Visitorprotected end_apply() (defined in P4::Visitor)P4::Visitorvirtual end_apply(const IR::Node *root) (defined in P4::Visitor)P4::Visitorvirtual @@ -158,7 +158,7 @@ getOriginal() const (defined in P4::Visitor)P4::Visitorinline getParent() const (defined in P4::Visitor)P4::Visitorinline has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual - init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual + init_apply(const IR::Node *node) override (defined in P4::DoEliminateSwitch)P4::DoEliminateSwitchinlinevirtual init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual internalName (defined in P4::Visitor)P4::Visitormutable diff --git a/class_p4_1_1_do_eliminate_switch.html b/class_p4_1_1_do_eliminate_switch.html index a43f6f38711..7946cfbd7ae 100644 --- a/class_p4_1_1_do_eliminate_switch.html +++ b/class_p4_1_1_do_eliminate_switch.html @@ -137,9 +137,11 @@ - - + + + + @@ -402,7 +404,35 @@

ExpressionType switch1_key;

@hidden action switch1_case_1 () { no statements here, by design } @hidden action switch1_case_23 () {} @hidden action switch1_case_4 () {} @hidden action switch1_case_default () {} @hidden table switch1_table { key = { switch1_key : exact; } actions = { switch1_case_1; switch1_case_23; switch1_case_4; switch1_case_default; } const entries = { 1 : switch1_case_1; 2 : switch1_case_23; 3 : switch1_case_23; 4 : switch1_case_4; } const default_action = switch1_case_default; }

later in the control's apply block, where the original switch statement appeared: switch1_key = expression; switch (switch1_table.apply().action_run) { switch1_case_1: { ... } switch1_case_23: { ... } switch1_case_4: { ... } switch1_case_default: { ... } }

- +

Member Function Documentation

+ +

◆ init_apply()

+ +
+
+

Public Member Functions

DoEliminateSwitch (ReferenceMap *refMap, const TypeMap *typeMap)
 
DoEliminateSwitch (const TypeMap *typeMap)
 
Visitor::profile_t init_apply (const IR::Node *node) override
 
const IR::Nodepostorder (IR::P4Control *control) override
 
+ + + + +
+ + + + + + + +
Visitor::profile_t P4::DoEliminateSwitch::init_apply (const IR::Node * node)
+
+inlineoverridevirtual
+
+ +

Reimplemented from P4::Visitor.

+ +
+ + diff --git a/class_p4_1_1_do_local_copy_propagation-members.html b/class_p4_1_1_do_local_copy_propagation-members.html index 2406f556851..17018d9259f 100644 --- a/class_p4_1_1_do_local_copy_propagation-members.html +++ b/class_p4_1_1_do_local_copy_propagation-members.html @@ -137,7 +137,7 @@ ControlFlowVisitor() (defined in P4::ControlFlowVisitor)P4::ControlFlowVisitorinlineprotected controlFlowVisitor() override (defined in P4::ControlFlowVisitor)P4::ControlFlowVisitorinlinevirtual demangle(const char *) (defined in P4::Visitor)P4::Visitorstatic - DoLocalCopyPropagation(ReferenceMap *refMap, TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy, bool eut) (defined in P4::DoLocalCopyPropagation)P4::DoLocalCopyPropagationinline + DoLocalCopyPropagation(TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy, bool eut) (defined in P4::DoLocalCopyPropagation)P4::DoLocalCopyPropagationinline dontForwardChildrenBeforePreorder (defined in P4::Visitor)P4::Visitorprotected end_apply() (defined in P4::Visitor)P4::Visitorvirtual end_apply(const IR::Node *root) (defined in P4::Visitor)P4::Visitorvirtual diff --git a/class_p4_1_1_do_local_copy_propagation.html b/class_p4_1_1_do_local_copy_propagation.html index 972d4fcc167..cc02f34e503 100644 --- a/class_p4_1_1_do_local_copy_propagation.html +++ b/class_p4_1_1_do_local_copy_propagation.html @@ -132,7 +132,7 @@
Inheritance diagram for P4::DoLocalCopyPropagation:
-
+
[legend]

@@ -144,9 +144,9 @@

- - + + diff --git a/class_p4_1_1_do_local_copy_propagation__inherit__graph.map b/class_p4_1_1_do_local_copy_propagation__inherit__graph.map index a2dc5c5f738..31685cc4f6f 100644 --- a/class_p4_1_1_do_local_copy_propagation__inherit__graph.map +++ b/class_p4_1_1_do_local_copy_propagation__inherit__graph.map @@ -1,13 +1,18 @@ - + - - - + + + - + - - - + + + + + + + + diff --git a/class_p4_1_1_do_local_copy_propagation__inherit__graph.md5 b/class_p4_1_1_do_local_copy_propagation__inherit__graph.md5 index 34ae92697e5..84ac15f71fa 100644 --- a/class_p4_1_1_do_local_copy_propagation__inherit__graph.md5 +++ b/class_p4_1_1_do_local_copy_propagation__inherit__graph.md5 @@ -1 +1 @@ -d218bd35e539e14173d98e53952ced78 \ No newline at end of file +fb6333e14fd5ada571405f3fb3a98a1e \ No newline at end of file diff --git a/class_p4_1_1_do_local_copy_propagation__inherit__graph.svg b/class_p4_1_1_do_local_copy_propagation__inherit__graph.svg index a0b3f8a14de..8311e04eb98 100644 --- a/class_p4_1_1_do_local_copy_propagation__inherit__graph.svg +++ b/class_p4_1_1_do_local_copy_propagation__inherit__graph.svg @@ -4,10 +4,9 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + P4::DoLocalCopyPropagation Node1 - -P4::DoLocalCopyPropagation + +P4::DoLocalCopyPropagation @@ -41,8 +77,8 @@ Node2->Node1 - - + + @@ -50,8 +86,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -59,8 +95,8 @@ Node3->Node2 - - + + @@ -77,8 +113,8 @@ Node3->Node4 - - + + @@ -95,8 +131,26 @@ Node3->Node5 - - + + + + + + + +Node6 + + +P4::ResolutionContext + + + + + +Node3->Node6 + + + @@ -104,8 +158,8 @@ Node4->Node1 - - + + @@ -113,13 +167,61 @@ Node5->Node1 - - + + + + + + + +Node6->Node1 + + + + + + + + +Node7 + + +P4::DeclarationLookup + + + + + +Node7->Node6 + + + + + + + + + + + + + + + + + + + + + demangle(const char *) (defined in P4::Visitor) - + diff --git a/class_p4_1_1_eliminate_switch.html b/class_p4_1_1_eliminate_switch.html index bc8327a0e01..e097414c054 100644 --- a/class_p4_1_1_eliminate_switch.html +++ b/class_p4_1_1_eliminate_switch.html @@ -134,9 +134,9 @@

Public Member Functions

DoLocalCopyPropagation (ReferenceMap *refMap, TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy, bool eut)
 
DoLocalCopyPropagation (TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy, bool eut)
 
- Public Member Functions inherited from P4::ControlFlowVisitor
bool check_global (cstring key) override
 
P4::Visitorstatic
dontForwardChildrenBeforePreorder (defined in P4::Visitor)P4::Visitorprotected
early_exit() (defined in P4::PassManager)P4::PassManagerinline
EliminateSwitch(ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking=nullptr) (defined in P4::EliminateSwitch)P4::EliminateSwitchinline
EliminateSwitch(TypeMap *typeMap, TypeChecking *typeChecking=nullptr) (defined in P4::EliminateSwitch)P4::EliminateSwitchinline
end_apply() (defined in P4::Visitor)P4::Visitorvirtual
end_apply(const IR::Node *root) (defined in P4::Visitor)P4::Visitorvirtual
erase_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
- - + + diff --git a/class_p4_1_1_flatten_interface_structs-members.html b/class_p4_1_1_flatten_interface_structs-members.html index 3491a711c4c..2f76f1d0bd1 100644 --- a/class_p4_1_1_flatten_interface_structs-members.html +++ b/class_p4_1_1_flatten_interface_structs-members.html @@ -149,7 +149,7 @@ - + diff --git a/class_p4_1_1_flatten_interface_structs.html b/class_p4_1_1_flatten_interface_structs.html index 73aa0cff57a..09336eb0c5d 100644 --- a/class_p4_1_1_flatten_interface_structs.html +++ b/class_p4_1_1_flatten_interface_structs.html @@ -134,9 +134,9 @@

Public Member Functions

EliminateSwitch (ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking=nullptr)
 
EliminateSwitch (TypeMap *typeMap, TypeChecking *typeChecking=nullptr)
 
- Public Member Functions inherited from P4::PassManager
 PassManager (const PassManager &)=default
findContext() const (defined in P4::Visitor)P4::Visitorinline
findOrigCtxt(const Context *&c) const (defined in P4::Visitor)P4::Visitorinline
findOrigCtxt() const (defined in P4::Visitor)P4::Visitorinline
FlattenInterfaceStructs(ReferenceMap *refMap, TypeMap *typeMap) (defined in P4::FlattenInterfaceStructs)P4::FlattenInterfaceStructsinline
FlattenInterfaceStructs(TypeMap *typeMap) (defined in P4::FlattenInterfaceStructs)P4::FlattenInterfaceStructsinlineexplicit
flow_clone() (defined in P4::Visitor)P4::Visitorinlinevirtual
flow_merge(Visitor &)P4::Visitorinlinevirtual
flow_merge_closure(Visitor &) (defined in P4::Visitor)P4::Visitorinlinevirtual
- - + + diff --git a/class_p4_1_1_flatten_log_msg-members.html b/class_p4_1_1_flatten_log_msg-members.html index 680a7f3fb55..fc2938e07fb 100644 --- a/class_p4_1_1_flatten_log_msg-members.html +++ b/class_p4_1_1_flatten_log_msg-members.html @@ -149,7 +149,7 @@ - + diff --git a/class_p4_1_1_flatten_log_msg.html b/class_p4_1_1_flatten_log_msg.html index 7ca4f010599..3b711970630 100644 --- a/class_p4_1_1_flatten_log_msg.html +++ b/class_p4_1_1_flatten_log_msg.html @@ -134,9 +134,9 @@

Public Member Functions

FlattenInterfaceStructs (ReferenceMap *refMap, TypeMap *typeMap)
 
FlattenInterfaceStructs (TypeMap *typeMap)
 
- Public Member Functions inherited from P4::PassManager
 PassManager (const PassManager &)=default
findContext() const (defined in P4::Visitor)P4::Visitorinline
findOrigCtxt(const Context *&c) const (defined in P4::Visitor)P4::Visitorinline
findOrigCtxt() const (defined in P4::Visitor)P4::Visitorinline
FlattenLogMsg(P4::ReferenceMap *refMap, P4::TypeMap *typeMap) (defined in P4::FlattenLogMsg)P4::FlattenLogMsginline
FlattenLogMsg(P4::TypeMap *typeMap) (defined in P4::FlattenLogMsg)P4::FlattenLogMsginlineexplicit
flow_clone() (defined in P4::Visitor)P4::Visitorinlinevirtual
flow_merge(Visitor &)P4::Visitorinlinevirtual
flow_merge_closure(Visitor &) (defined in P4::Visitor)P4::Visitorinlinevirtual
- - + + diff --git a/class_p4_1_1_h_s_index_contretizer-members.html b/class_p4_1_1_h_s_index_contretizer-members.html index c42821359ae..61f038edb82 100644 --- a/class_p4_1_1_h_s_index_contretizer-members.html +++ b/class_p4_1_1_h_s_index_contretizer-members.html @@ -157,8 +157,8 @@ - - + + diff --git a/class_p4_1_1_h_s_index_contretizer.html b/class_p4_1_1_h_s_index_contretizer.html index d3f7f5b4caf..90f614f6c18 100644 --- a/class_p4_1_1_h_s_index_contretizer.html +++ b/class_p4_1_1_h_s_index_contretizer.html @@ -137,9 +137,11 @@

Public Member Functions

FlattenLogMsg (P4::ReferenceMap *refMap, P4::TypeMap *typeMap)
 
FlattenLogMsg (P4::TypeMap *typeMap)
 
- Public Member Functions inherited from P4::PassManager
 PassManager (const PassManager &)=default
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
HSIndexContretizer(ReferenceMap *refMap, TypeMap *typeMap, IR::IndexedVector< IR::Declaration > *locals=nullptr, GeneratedVariablesMap *generatedVariables=nullptr) (defined in P4::HSIndexContretizer)P4::HSIndexContretizerinline
init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual
HSIndexContretizer(TypeMap *typeMap, std::shared_ptr< MinimalNameGenerator > nameGen=nullptr, IR::IndexedVector< IR::Declaration > *locals=nullptr, GeneratedVariablesMap *generatedVariables=nullptr) (defined in P4::HSIndexContretizer)P4::HSIndexContretizerinlineexplicit
init_apply(const IR::Node *node) override (defined in P4::HSIndexContretizer)P4::HSIndexContretizerinlinevirtual
init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
internalName (defined in P4::Visitor)P4::Visitormutable
- - + + + + @@ -409,7 +411,35 @@

Public Member Functions

HSIndexContretizer (ReferenceMap *refMap, TypeMap *typeMap, IR::IndexedVector< IR::Declaration > *locals=nullptr, GeneratedVariablesMap *generatedVariables=nullptr)
 
HSIndexContretizer (TypeMap *typeMap, std::shared_ptr< MinimalNameGenerator > nameGen=nullptr, IR::IndexedVector< IR::Declaration > *locals=nullptr, GeneratedVariablesMap *generatedVariables=nullptr)
 
Visitor::profile_t init_apply (const IR::Node *node) override
 
IR::Nodepreorder (IR::AssignmentStatement *assignmentStatement) override
 

Detailed Description

This class eliminates all non-concrete indexes of the header stacks in the controls. It generates new variables for all expressions in the header stacks indexes and checks their values for substitution of concrete values. Each new variable is unique in a scope. Restriction : in/out parameters should be replaced by correspondent assignments. Let header h_index { bit<32> index;} header h_stack { bit<32> a;} struct headers { h_stack[2] h; h_index i;} headers hdr; Then the assignment hdr.h[hdr.i] = 1 will be translated into bit<32> hdivr0; hdivr0 = hdr.i; if (hdivr0 == 0) { hdr.h[0] = 1;} else if (hdivr0 == 1){hdr.h[1] = 1;}

-
+

Member Function Documentation

+ +

◆ init_apply()

+ +
+
+ + + + + +
+ + + + + + + +
Visitor::profile_t P4::HSIndexContretizer::init_apply (const IR::Node * node)
+
+inlineoverridevirtual
+
+ +

Reimplemented from P4::Visitor.

+ +
+
+ diff --git a/class_p4_1_1_h_s_index_finder-members.html b/class_p4_1_1_h_s_index_finder-members.html index bfdd678533a..6efe20345e2 100644 --- a/class_p4_1_1_h_s_index_finder-members.html +++ b/class_p4_1_1_h_s_index_finder-members.html @@ -157,7 +157,7 @@ getParent() const (defined in P4::Visitor)P4::Visitorinline has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual HSIndexContretizer (defined in P4::HSIndexFinder)P4::HSIndexFinderfriend - HSIndexFinder(IR::IndexedVector< IR::Declaration > *locals, ReferenceMap *refMap, TypeMap *typeMap, GeneratedVariablesMap *generatedVariables) (defined in P4::HSIndexFinder)P4::HSIndexFinderinline + HSIndexFinder(IR::IndexedVector< IR::Declaration > *locals, std::shared_ptr< NameGenerator > nameGen, TypeMap *typeMap, GeneratedVariablesMap *generatedVariables) (defined in P4::HSIndexFinder)P4::HSIndexFinderinline HSIndexTransform (defined in P4::HSIndexFinder)P4::HSIndexFinderfriend init_apply(const IR::Node *root) override (defined in P4::Inspector)P4::Inspectorvirtual init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor diff --git a/class_p4_1_1_h_s_index_finder.html b/class_p4_1_1_h_s_index_finder.html index 3cb3d287dce..4bce96cce73 100644 --- a/class_p4_1_1_h_s_index_finder.html +++ b/class_p4_1_1_h_s_index_finder.html @@ -138,9 +138,9 @@ - - + + diff --git a/class_p4_1_1_h_s_index_simplifier-members.html b/class_p4_1_1_h_s_index_simplifier-members.html index db3bdfbe090..03c4612bb39 100644 --- a/class_p4_1_1_h_s_index_simplifier-members.html +++ b/class_p4_1_1_h_s_index_simplifier-members.html @@ -162,7 +162,7 @@ - + diff --git a/class_p4_1_1_h_s_index_simplifier.html b/class_p4_1_1_h_s_index_simplifier.html index e41d1d2b82c..3bb200546fa 100644 --- a/class_p4_1_1_h_s_index_simplifier.html +++ b/class_p4_1_1_h_s_index_simplifier.html @@ -134,9 +134,9 @@

Public Member Functions

HSIndexFinder (IR::IndexedVector< IR::Declaration > *locals, ReferenceMap *refMap, TypeMap *typeMap, GeneratedVariablesMap *generatedVariables)
 
HSIndexFinder (IR::IndexedVector< IR::Declaration > *locals, std::shared_ptr< NameGenerator > nameGen, TypeMap *typeMap, GeneratedVariablesMap *generatedVariables)
 
void postorder (const IR::ArrayIndex *curArrayIndex) override
 
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
HSIndexSimplifier(ReferenceMap *refMap, TypeMap *typeMap) (defined in P4::HSIndexSimplifier)P4::HSIndexSimplifierinline
HSIndexSimplifier(TypeMap *typeMap) (defined in P4::HSIndexSimplifier)P4::HSIndexSimplifierinlineexplicit
init_apply(const IR::Node *root) override (defined in P4::PassManager)P4::PassManagerinlineprotectedvirtual
init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
- - + + diff --git a/class_p4_1_1_local_copy_propagation-members.html b/class_p4_1_1_local_copy_propagation-members.html index 3ef59038421..e57ce31f65d 100644 --- a/class_p4_1_1_local_copy_propagation-members.html +++ b/class_p4_1_1_local_copy_propagation-members.html @@ -170,8 +170,8 @@ - - + + diff --git a/class_p4_1_1_local_copy_propagation.html b/class_p4_1_1_local_copy_propagation.html index c4ebf4207a8..a7ec0cedd76 100644 --- a/class_p4_1_1_local_copy_propagation.html +++ b/class_p4_1_1_local_copy_propagation.html @@ -134,12 +134,12 @@

Public Member Functions

HSIndexSimplifier (ReferenceMap *refMap, TypeMap *typeMap)
 
HSIndexSimplifier (TypeMap *typeMap)
 
- Public Member Functions inherited from P4::PassManager
 PassManager (const PassManager &)=default
join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
joinFlows (defined in P4::Visitor)P4::Visitorprotected
listPasses(std::ostream &, cstring sep) const (defined in P4::PassManager)P4::PassManager
LocalCopyPropagation(ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking=nullptr, std::function< bool(const Context *, const IR::Expression *)> policy=[](const Context *, const IR::Expression *) -> bool { return true;}, bool elimUnusedTables=false) (defined in P4::LocalCopyPropagation)P4::LocalCopyPropagationinline
LocalCopyPropagation(ReferenceMap *refMap, TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy) (defined in P4::LocalCopyPropagation)P4::LocalCopyPropagationinline
LocalCopyPropagation(TypeMap *typeMap, TypeChecking *typeChecking=nullptr, std::function< bool(const Context *, const IR::Expression *)> policy=[](const Context *, const IR::Expression *) -> bool { return true;}, bool elimUnusedTables=false) (defined in P4::LocalCopyPropagation)P4::LocalCopyPropagationinline
LocalCopyPropagation(TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy) (defined in P4::LocalCopyPropagation)P4::LocalCopyPropagationinline
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
never_backtracks() override (defined in P4::PassManager)P4::PassManagervirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
- - - - + + + + diff --git a/class_p4_1_1_nested_structs-members.html b/class_p4_1_1_nested_structs-members.html index 169040a77c8..e0735456a23 100644 --- a/class_p4_1_1_nested_structs-members.html +++ b/class_p4_1_1_nested_structs-members.html @@ -171,7 +171,7 @@ - + diff --git a/class_p4_1_1_nested_structs.html b/class_p4_1_1_nested_structs.html index e2d56847008..581735f9d74 100644 --- a/class_p4_1_1_nested_structs.html +++ b/class_p4_1_1_nested_structs.html @@ -134,9 +134,9 @@

Public Member Functions

LocalCopyPropagation (ReferenceMap *refMap, TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy)
 
LocalCopyPropagation (ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking=nullptr, std::function< bool(const Context *, const IR::Expression *)> policy=[](const Context *, const IR::Expression *) -> bool { return true;}, bool elimUnusedTables=false)
 
LocalCopyPropagation (TypeMap *typeMap, std::function< bool(const Context *, const IR::Expression *)> policy)
 
LocalCopyPropagation (TypeMap *typeMap, TypeChecking *typeChecking=nullptr, std::function< bool(const Context *, const IR::Expression *)> policy=[](const Context *, const IR::Expression *) -> bool { return true;}, bool elimUnusedTables=false)
 
- Public Member Functions inherited from P4::PassManager
 PassManager (const PassManager &)=default
joinFlows (defined in P4::Visitor)P4::Visitorprotected
listPasses(std::ostream &, cstring sep) const (defined in P4::PassManager)P4::PassManager
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
NestedStructs(ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking=nullptr) (defined in P4::NestedStructs)P4::NestedStructsinline
NestedStructs(TypeMap *typeMap, TypeChecking *typeChecking=nullptr) (defined in P4::NestedStructs)P4::NestedStructsinlineexplicit
never_backtracks() override (defined in P4::PassManager)P4::PassManagervirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
- - + + diff --git a/class_p4_1_1_remove_aliases-members.html b/class_p4_1_1_remove_aliases-members.html index a9982d72bf7..ffd13122307 100644 --- a/class_p4_1_1_remove_aliases-members.html +++ b/class_p4_1_1_remove_aliases-members.html @@ -156,7 +156,7 @@ - + @@ -177,7 +177,7 @@ - + diff --git a/class_p4_1_1_remove_aliases.html b/class_p4_1_1_remove_aliases.html index 5bc715c3a54..ebf4637900b 100644 --- a/class_p4_1_1_remove_aliases.html +++ b/class_p4_1_1_remove_aliases.html @@ -136,9 +136,11 @@

Public Member Functions

NestedStructs (ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking=nullptr)
 
NestedStructs (TypeMap *typeMap, TypeChecking *typeChecking=nullptr)
 
- Public Member Functions inherited from P4::PassManager
 PassManager (const PassManager &)=default
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual
init_apply(const IR::Node *node) override (defined in P4::RemoveAliases)P4::RemoveAliasesinlinevirtual
init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
internalName (defined in P4::Visitor)P4::Visitormutable
preorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
prune() (defined in P4::Transform)P4::Transforminline
RemoveAliases(ReferenceMap *refMap, TypeMap *typeMap) (defined in P4::RemoveAliases)P4::RemoveAliasesinline
RemoveAliases(TypeMap *typeMap) (defined in P4::RemoveAliases)P4::RemoveAliasesinlineexplicit
revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
revisit_visited() (defined in P4::Transform)P4::Transform
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
- - + + + + @@ -394,7 +396,35 @@

S tmp; tmp = { s.b, s.a }; s = tmp;

Precondition
none
Postcondition
no structure assignment refers on the RHS to fields that appear in the LHS.
- +

Member Function Documentation

+ +

◆ init_apply()

+ +
+
+

Public Member Functions

RemoveAliases (ReferenceMap *refMap, TypeMap *typeMap)
 
RemoveAliases (TypeMap *typeMap)
 
Visitor::profile_t init_apply (const IR::Node *node) override
 
const IR::Nodepostorder (IR::AssignmentStatement *statement) override
 
+ + + + +
+ + + + + + + +
Visitor::profile_t P4::RemoveAliases::init_apply (const IR::Node * node)
+
+inlineoverridevirtual
+
+ +

Reimplemented from P4::Visitor.

+ +
+ + diff --git a/class_p4_1_1_remove_complex_expressions-members.html b/class_p4_1_1_remove_complex_expressions-members.html index 14a34729d72..cdbfafb90f5 100644 --- a/class_p4_1_1_remove_complex_expressions-members.html +++ b/class_p4_1_1_remove_complex_expressions-members.html @@ -126,9 +126,11 @@

This is the complete list of members for P4::RemoveComplexExpressions, including all inherited members.

- - - + + + + + @@ -155,18 +157,26 @@ + + + + - + + + - + + + @@ -188,41 +198,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Transform)P4::Transformvirtual
assignments (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
called_by (defined in P4::Visitor)P4::Visitor
anyOrder (defined in P4::ResolutionContext)P4::ResolutionContextprotected
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Transform)P4::Transformvirtual
assignments (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
called_by (defined in P4::Visitor)P4::Visitor
check_clone(const Visitor *a) (defined in P4::Visitor)P4::Visitorinlinevirtual
check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
clone() const (defined in P4::Visitor)P4::Visitorinlinevirtual
getContext() const (defined in P4::Visitor)P4::Visitorinline
getContextDepth() const (defined in P4::Visitor)P4::Visitorinline
getCurrentNode() constP4::Visitorinline
getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline
getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual
init_apply(const IR::Node *node) override (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressionsinlinevirtual
init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
internalName (defined in P4::Visitor)P4::Visitormutable
isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline
join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
joinFlows (defined in P4::Visitor)P4::Visitorprotected
lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
loop_revisit(const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
methodArguments(cstring name) constP4::ResolutionContextprotected
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
nameGen (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
newDecls (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
preorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
prune() (defined in P4::Transform)P4::Transforminline
refMap (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
RemoveComplexExpressions(P4::ReferenceMap *refMap, P4::TypeMap *typeMap, RemoveComplexExpressionsPolicy *policy=nullptr) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressionsinline
revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
revisit_visited() (defined in P4::Transform)P4::Transform
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
setName(const char *name) (defined in P4::Visitor)P4::Visitorinline
simpleStatement(IR::Statement *statement) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpression(const IR::Expression *expression, bool force) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Expression > *vec, bool force=false) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Argument > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::IndexedVector< IR::NamedExpression > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
split_link (defined in P4::Visitor)P4::Visitor
split_link_mem (defined in P4::Visitor)P4::Visitor
transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected
typeMap (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected
visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform
visitAgain() const override (defined in P4::Transform)P4::Transformvirtual
visitDagOnce (defined in P4::Visitor)P4::Visitorprotected
visitOnce() const override (defined in P4::Transform)P4::Transformvirtual
Visitor() (defined in P4::Visitor)P4::Visitorinline
warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline
P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline
warning_enabled(int warning_kind) constP4::Visitorinline
P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic
~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual
RemoveComplexExpressions(P4::TypeMap *typeMap, RemoveComplexExpressionsPolicy *policy=nullptr) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressionsinlineexplicit
ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected
ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected
resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext
resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual
resolveType(const IR::Type *type) constP4::ResolutionContext
resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext
revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
revisit_visited() (defined in P4::Transform)P4::Transform
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
setName(const char *name) (defined in P4::Visitor)P4::Visitorinline
simpleStatement(IR::Statement *statement) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpression(const IR::Expression *expression, bool force) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Expression > *vec, bool force=false) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::Vector< IR::Argument > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
simplifyExpressions(const IR::IndexedVector< IR::NamedExpression > *vec) (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
split_link (defined in P4::Visitor)P4::Visitor
split_link_mem (defined in P4::Visitor)P4::Visitor
transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected
typeMap (defined in P4::RemoveComplexExpressions)P4::RemoveComplexExpressions
visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected
visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform
visitAgain() const override (defined in P4::Transform)P4::Transformvirtual
visitDagOnce (defined in P4::Visitor)P4::Visitorprotected
visitOnce() const override (defined in P4::Transform)P4::Transformvirtual
Visitor() (defined in P4::Visitor)P4::Visitorinline
warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline
P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline
warning_enabled(int warning_kind) constP4::Visitorinline
P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic
~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual
diff --git a/class_p4_1_1_remove_complex_expressions.html b/class_p4_1_1_remove_complex_expressions.html index b3268e2d5c8..5b30dedf303 100644 --- a/class_p4_1_1_remove_complex_expressions.html +++ b/class_p4_1_1_remove_complex_expressions.html @@ -132,17 +132,19 @@
Inheritance diagram for P4::RemoveComplexExpressions:
-
+
[legend]
- - + + + + @@ -372,21 +374,49 @@ + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

RemoveComplexExpressions (P4::ReferenceMap *refMap, P4::TypeMap *typeMap, RemoveComplexExpressionsPolicy *policy=nullptr)
 
RemoveComplexExpressions (P4::TypeMap *typeMap, RemoveComplexExpressionsPolicy *policy=nullptr)
 
const IR::PathExpression * createTemporary (const IR::Expression *expression)
 
Visitor::profile_t init_apply (const IR::Node *node) override
 
const IR::Nodepostorder (IR::MethodCallExpression *expression) override
 
 
bool warning_enabled (int warning_kind) const
 
- Public Member Functions inherited from P4::ResolutionContext
const IR::IDeclarationgetDeclaration (const IR::Path *path, bool notNull=false) const
 
const IR::IDeclarationgetDeclaration (const IR::This *, bool notNull=false) const
 
+auto getDeclarations (const IR::INamespace *ns) const
 Returns the set of decls that exist in the given namespace.
 
+auto getDeclsByName (const IR::INamespace *ns, cstring name) const
 Returns the set of decls with the given name that exist in the given namespace.
 
+std::vector< const IR::IDeclaration * > resolve (const IR::ID &name, ResolutionType type) const
 Resolve references for name, restricted to type declarations.
 
virtual const IR::IDeclarationresolvePath (const IR::Path *path, bool isType) const
 
+const IR::Type * resolveType (const IR::Type *type) const
 Resolve a refrence to a type type.
 
+const IR::IDeclarationresolveUnique (const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) const
 Resolve reference for name, restricted to type declarations, and expect one result.
 
- Public Member Functions inherited from P4::DeclarationLookup
+ + - - @@ -431,6 +461,20 @@ + + + + + + + + + + @@ -445,10 +489,42 @@ + + +

Public Attributes

IR::IndexedVector< IR::StatOrDecl > assignments
 
+MinimalNameGenerator nameGen
 
IR::IndexedVector< IR::Declaration > newDecls
 
RemoveComplexExpressionsPolicypolicy
 
-P4::ReferenceMaprefMap
 
P4::TypeMaptypeMap
 
void visit_children (const IR::Node *, std::function< void()> fn)
 
- Protected Member Functions inherited from P4::ResolutionContext
ResolutionContext (bool ao)
 
+std::vector< const IR::IDeclaration * > lookup (const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const
 
+std::vector< const IR::IDeclaration * > lookupMatchKind (const IR::ID &name) const
 
+const IR::Vector< IR::Argument > * methodArguments (cstring name) const
 We are resolving a method call. Find the arguments from the context.
 
- Protected Attributes inherited from P4::Transform
bool forceClone = false
bool visitDagOnce = true
 
- Protected Attributes inherited from P4::ResolutionContext
+bool anyOrder = false
 

Detailed Description

Lift complex expressions from a select or as arguments to external functions into temporaries. Convert a statement like lookahead<T>() into tmp = lookahead<T>();

-
+

Member Function Documentation

+ +

◆ init_apply()

+ +
+
+ + + + + +
+ + + + + + + +
Visitor::profile_t P4::RemoveComplexExpressions::init_apply (const IR::Node * node)
+
+inlineoverridevirtual
+
+ +

Reimplemented from P4::Visitor.

+ +
+
+ diff --git a/class_p4_1_1_remove_complex_expressions__inherit__graph.map b/class_p4_1_1_remove_complex_expressions__inherit__graph.map index 060676ba9b2..60d6a44c5ca 100644 --- a/class_p4_1_1_remove_complex_expressions__inherit__graph.map +++ b/class_p4_1_1_remove_complex_expressions__inherit__graph.map @@ -1,9 +1,14 @@ - - - - - - + + + + + + + + + + + diff --git a/class_p4_1_1_remove_complex_expressions__inherit__graph.md5 b/class_p4_1_1_remove_complex_expressions__inherit__graph.md5 index b18591f67e9..2f7eef052c5 100644 --- a/class_p4_1_1_remove_complex_expressions__inherit__graph.md5 +++ b/class_p4_1_1_remove_complex_expressions__inherit__graph.md5 @@ -1 +1 @@ -65e8849d700a34b692300d05d9980c4b \ No newline at end of file +77fa0bbe5d282293b1a71983970ff3b1 \ No newline at end of file diff --git a/class_p4_1_1_remove_complex_expressions__inherit__graph.svg b/class_p4_1_1_remove_complex_expressions__inherit__graph.svg index 610c18b265d..8ac0be559db 100644 --- a/class_p4_1_1_remove_complex_expressions__inherit__graph.svg +++ b/class_p4_1_1_remove_complex_expressions__inherit__graph.svg @@ -4,8 +4,8 @@ - + @@ -28,19 +28,19 @@ - - -Node4 - + + +Node6 + P4::BMV2::RemoveComplexExpressions - - -Node1->Node4 - + + +Node1->Node6 + @@ -50,8 +50,8 @@ Node2 - -P4::Transform + +P4::Transform @@ -59,8 +59,8 @@ Node2->Node1 - - + + @@ -68,8 +68,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -77,8 +77,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/class_p4_1_1_remove_complex_expressions__inherit__graph_org.svg b/class_p4_1_1_remove_complex_expressions__inherit__graph_org.svg index 83cd5f4ffa5..4718413900c 100644 --- a/class_p4_1_1_remove_complex_expressions__inherit__graph_org.svg +++ b/class_p4_1_1_remove_complex_expressions__inherit__graph_org.svg @@ -4,8 +4,8 @@ - + P4::RemoveComplexExpressions @@ -17,19 +17,19 @@ - - -Node4 - + + +Node6 + P4::BMV2::RemoveComplexExpressions - - -Node1->Node4 - + + +Node1->Node6 + @@ -39,8 +39,8 @@ Node2 - -P4::Transform + +P4::Transform @@ -48,8 +48,8 @@ Node2->Node1 - - + + @@ -57,8 +57,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -66,8 +66,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/class_p4_1_1_remove_nested_structs-members.html b/class_p4_1_1_remove_nested_structs-members.html index c4dbd51e357..107e3e828bb 100644 --- a/class_p4_1_1_remove_nested_structs-members.html +++ b/class_p4_1_1_remove_nested_structs-members.html @@ -126,8 +126,10 @@

This is the complete list of members for P4::RemoveNestedStructs, including all inherited members.

- - + + + + @@ -153,59 +155,72 @@ + + + + - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Transform)P4::Transformvirtual
called_by (defined in P4::Visitor)P4::Visitor
anyOrder (defined in P4::ResolutionContext)P4::ResolutionContextprotected
apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Transform)P4::Transformvirtual
called_by (defined in P4::Visitor)P4::Visitor
check_clone(const Visitor *a) (defined in P4::Visitor)P4::Visitorinlinevirtual
check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
clone() const (defined in P4::Visitor)P4::Visitorinlinevirtual
getContext() const (defined in P4::Visitor)P4::Visitorinline
getContextDepth() const (defined in P4::Visitor)P4::Visitorinline
getCurrentNode() constP4::Visitorinline
getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline
getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline
getOriginal() const (defined in P4::Visitor)P4::Visitorinline
getParent() const (defined in P4::Visitor)P4::Visitorinline
has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
init_apply(const IR::Node *root) override (defined in P4::Transform)P4::Transformvirtual
init_apply(const IR::Node *node) override (defined in P4::RemoveNestedStructs)P4::RemoveNestedStructsinlinevirtual
init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
internalName (defined in P4::Visitor)P4::Visitormutable
isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline
join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
joinFlows (defined in P4::Visitor)P4::Visitorprotected
lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
loop_revisit(const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual
postorder(IR::Declaration_Variable *decl) overrideP4::RemoveNestedStructs
postorder(IR::Member *expression) overrideP4::RemoveNestedStructs
postorder(IR::PathExpression *expression) overrideP4::RemoveNestedStructs
postorder(IR::MethodCallExpression *expression) override (defined in P4::RemoveNestedStructs)P4::RemoveNestedStructs
postorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual
preorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
prune() (defined in P4::Transform)P4::Transforminline
RemoveNestedStructs(ComplexValues *values) (defined in P4::RemoveNestedStructs)P4::RemoveNestedStructsinlineexplicit
revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
revisit_visited() (defined in P4::Transform)P4::Transform
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
setName(const char *name) (defined in P4::Visitor)P4::Visitorinline
split_link (defined in P4::Visitor)P4::Visitor
split_link_mem (defined in P4::Visitor)P4::Visitor
transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected
visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected
visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform
visitAgain() const override (defined in P4::Transform)P4::Transformvirtual
visitDagOnce (defined in P4::Visitor)P4::Visitorprotected
visitOnce() const override (defined in P4::Transform)P4::Transformvirtual
Visitor() (defined in P4::Visitor)P4::Visitorinline
warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline
P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline
warning_enabled(int warning_kind) constP4::Visitorinline
P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic
~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual
methodArguments(cstring name) constP4::ResolutionContextprotected
name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
parallel_visit(IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
parallel_visit(const IR::Vector< T > &v, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
post_join_flows(const IR::Node *, const IR::Node *)P4::Visitorinlineprotectedvirtual
postorder(IR::Declaration_Variable *decl) overrideP4::RemoveNestedStructs
postorder(IR::Member *expression) overrideP4::RemoveNestedStructs
postorder(IR::PathExpression *expression) overrideP4::RemoveNestedStructs
postorder(IR::MethodCallExpression *expression) override (defined in P4::RemoveNestedStructs)P4::RemoveNestedStructs
postorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual
preorder(IR::Node *n) (defined in P4::Transform)P4::Transforminlinevirtual
print_context() const (defined in P4::Visitor)P4::Visitor
prune() (defined in P4::Transform)P4::Transforminline
RemoveNestedStructs(TypeMap *typeMap) (defined in P4::RemoveNestedStructs)P4::RemoveNestedStructsinlineexplicit
ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected
ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected
resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext
resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual
resolveType(const IR::Type *type) constP4::ResolutionContext
resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext
revisit(const IR::Node *, const IR::Node *) (defined in P4::Transform)P4::Transforminlinevirtual
revisit_visited() (defined in P4::Transform)P4::Transform
setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
setName(const char *name) (defined in P4::Visitor)P4::Visitorinline
split_link (defined in P4::Visitor)P4::Visitor
split_link_mem (defined in P4::Visitor)P4::Visitor
transform_child(const IR::Node *child) (defined in P4::Transform)P4::Transforminlineprotected
visit(const IR::Node *&n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *&n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node *const &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node *&, const char *=0, int=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name=0) (defined in P4::Visitor)P4::Visitorinline
visit(IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit(const IR::Node &n, const char *name, int cidx) (defined in P4::Visitor)P4::Visitorinline
visit_children(const IR::Node *, std::function< void()> fn) (defined in P4::Visitor)P4::Visitorinlineprotected
visit_in_progress(const IR::Node *) const (defined in P4::Transform)P4::Transform
visitAgain() const override (defined in P4::Transform)P4::Transformvirtual
visitDagOnce (defined in P4::Visitor)P4::Visitorprotected
visitOnce() const override (defined in P4::Transform)P4::Transformvirtual
Visitor() (defined in P4::Visitor)P4::Visitorinline
warn(const int kind, const char *format, const T *node, Args &&...args) (defined in P4::Visitor)P4::Visitorinline
P4::Transform::warn(const int kind, const char *format, const T &node, Args &&...args)P4::Visitorinline
warning_enabled(int warning_kind) constP4::Visitorinline
P4::Transform::warning_enabled(const Visitor *visitor, int warning_kind)P4::Visitorstatic
~Visitor()=default (defined in P4::Visitor)P4::Visitorvirtual
diff --git a/class_p4_1_1_remove_nested_structs.html b/class_p4_1_1_remove_nested_structs.html index f6cb2ebec66..690fb9edcea 100644 --- a/class_p4_1_1_remove_nested_structs.html +++ b/class_p4_1_1_remove_nested_structs.html @@ -131,14 +131,16 @@
Inheritance diagram for P4::RemoveNestedStructs:
-
+
[legend]
- - + + + + @@ -338,6 +340,34 @@ + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

RemoveNestedStructs (ComplexValues *values)
 
RemoveNestedStructs (TypeMap *typeMap)
 
Visitor::profile_t init_apply (const IR::Node *node) override
 
const IR::Nodepostorder (IR::Declaration_Variable *decl) override
 rewrite nested structs to non-nested structs
 
bool warning_enabled (int warning_kind) const
 
- Public Member Functions inherited from P4::ResolutionContext
const IR::IDeclarationgetDeclaration (const IR::Path *path, bool notNull=false) const
 
const IR::IDeclarationgetDeclaration (const IR::This *, bool notNull=false) const
 
+auto getDeclarations (const IR::INamespace *ns) const
 Returns the set of decls that exist in the given namespace.
 
+auto getDeclsByName (const IR::INamespace *ns, cstring name) const
 Returns the set of decls with the given name that exist in the given namespace.
 
+std::vector< const IR::IDeclaration * > resolve (const IR::ID &name, ResolutionType type) const
 Resolve references for name, restricted to type declarations.
 
virtual const IR::IDeclarationresolvePath (const IR::Path *path, bool isType) const
 
+const IR::Type * resolveType (const IR::Type *type) const
 Resolve a refrence to a type type.
 
+const IR::IDeclarationresolveUnique (const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) const
 Resolve reference for name, restricted to type declarations, and expect one result.
 
- Public Member Functions inherited from P4::DeclarationLookup
@@ -379,6 +409,20 @@ + + + + + + + + + + @@ -393,6 +437,10 @@ + + +

Additional Inherited Members

void visit_children (const IR::Node *, std::function< void()> fn)
 
- Protected Member Functions inherited from P4::ResolutionContext
ResolutionContext (bool ao)
 
+std::vector< const IR::IDeclaration * > lookup (const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const
 
+std::vector< const IR::IDeclaration * > lookupMatchKind (const IR::ID &name) const
 
+const IR::Vector< IR::Argument > * methodArguments (cstring name) const
 We are resolving a method call. Find the arguments from the context.
 
- Protected Attributes inherited from P4::Transform
bool forceClone = false
bool visitDagOnce = true
 
- Protected Attributes inherited from P4::ResolutionContext
+bool anyOrder = false
 

Detailed Description

Implements a pass that removes nested structs.

@@ -406,7 +454,35 @@
  • all variables whose types are nested structs are flattened.
  • -
    +

    Member Function Documentation

    + +

    ◆ init_apply()

    + +
    +
    + + + + + +
    + + + + + + + +
    Visitor::profile_t P4::RemoveNestedStructs::init_apply (const IR::Node * node)
    +
    +inlineoverridevirtual
    +
    + +

    Reimplemented from P4::Visitor.

    + +
    +
    + diff --git a/class_p4_1_1_remove_nested_structs__inherit__graph.map b/class_p4_1_1_remove_nested_structs__inherit__graph.map index d6dd94bb4f9..4ee165f4f3c 100644 --- a/class_p4_1_1_remove_nested_structs__inherit__graph.map +++ b/class_p4_1_1_remove_nested_structs__inherit__graph.map @@ -1,7 +1,12 @@ - - - - - + + + + + + + + + + diff --git a/class_p4_1_1_remove_nested_structs__inherit__graph.md5 b/class_p4_1_1_remove_nested_structs__inherit__graph.md5 index a8df7dfe4bb..de487b120b1 100644 --- a/class_p4_1_1_remove_nested_structs__inherit__graph.md5 +++ b/class_p4_1_1_remove_nested_structs__inherit__graph.md5 @@ -1 +1 @@ -44bc0421730199fa9bc9bea1683ca399 \ No newline at end of file +f6466f41d50ba6ec71bb5687118826b3 \ No newline at end of file diff --git a/class_p4_1_1_remove_nested_structs__inherit__graph.svg b/class_p4_1_1_remove_nested_structs__inherit__graph.svg index 7a4b2a015ca..baacdba8ce4 100644 --- a/class_p4_1_1_remove_nested_structs__inherit__graph.svg +++ b/class_p4_1_1_remove_nested_structs__inherit__graph.svg @@ -4,8 +4,8 @@ - + @@ -23,8 +23,8 @@ Node1 - -P4::RemoveNestedStructs + +P4::RemoveNestedStructs @@ -32,8 +32,8 @@ Node2 - -P4::Transform + +P4::Transform @@ -41,8 +41,8 @@ Node2->Node1 - - + + @@ -50,8 +50,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -59,8 +59,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/class_p4_1_1_remove_nested_structs__inherit__graph_org.svg b/class_p4_1_1_remove_nested_structs__inherit__graph_org.svg index 372cc2339ef..edde8db52a5 100644 --- a/class_p4_1_1_remove_nested_structs__inherit__graph_org.svg +++ b/class_p4_1_1_remove_nested_structs__inherit__graph_org.svg @@ -4,16 +4,16 @@ - + P4::RemoveNestedStructs Node1 - -P4::RemoveNestedStructs + +P4::RemoveNestedStructs @@ -21,8 +21,8 @@ Node2 - -P4::Transform + +P4::Transform @@ -30,8 +30,8 @@ Node2->Node1 - - + + @@ -39,8 +39,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -48,8 +48,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/class_p4_1_1_replace_structs.html b/class_p4_1_1_replace_structs.html index 6963b5dcfd1..3fc9839a31a 100644 --- a/class_p4_1_1_replace_structs.html +++ b/class_p4_1_1_replace_structs.html @@ -131,7 +131,7 @@
    Inheritance diagram for P4::ReplaceStructs:
    -
    +
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1328,8 +1336,7 @@ - - + @@ -1677,8 +1684,7 @@ - - + diff --git a/hierarchy.js b/hierarchy.js index 4f05e43ed6d..dc852d76dac 100644 --- a/hierarchy.js +++ b/hierarchy.js @@ -230,6 +230,9 @@ var hierarchy = ] ], [ "P4::AbstractInliner< P4::InlineList, InlineWorkList >", "class_p4_1_1_abstract_inliner.html", null ], [ "P4::AbstractInliner< InlineList, InlineWorkList >", "class_p4_1_1_abstract_inliner.html", null ], + [ "P4::CheckExternInvocationCommon", "class_p4_1_1_check_extern_invocation_common.html", [ + [ "P4::DPDK::CheckPNAExternInvocation", "class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation.html", null ] + ] ], [ "P4::ComputeDefUse", "class_p4_1_1_compute_def_use.html", null ], [ "P4::ComputeDefUse::SetupJoinPoints", "class_p4_1_1_compute_def_use_1_1_setup_join_points.html", null ], [ "P4::ComputeParserCG", "class_p4_1_1_compute_parser_c_g.html", null ], @@ -244,6 +247,7 @@ var hierarchy = [ "P4::DoDefaultArguments", "class_p4_1_1_do_default_arguments.html", null ], [ "P4::DoExpandEmit", "class_p4_1_1_do_expand_emit.html", null ], [ "P4::DoExpandLookahead", "class_p4_1_1_do_expand_lookahead.html", null ], + [ "P4::DoLocalCopyPropagation", "class_p4_1_1_do_local_copy_propagation.html", null ], [ "P4::DoOrderArguments", "class_p4_1_1_do_order_arguments.html", null ], [ "P4::DoRemoveAssertAssume", "class_p4_1_1_do_remove_assert_assume.html", null ], [ "P4::DoRemoveExits", "class_p4_1_1_do_remove_exits.html", null ], @@ -272,7 +276,12 @@ var hierarchy = [ "P4::P4Fmt::P4Formatter", "class_p4_1_1_p4_fmt_1_1_p4_formatter.html", null ], [ "P4::P4Tools::P4ProgramDCGCreator", "class_p4_1_1_p4_tools_1_1_p4_program_d_c_g_creator.html", null ], [ "P4::ReadsWrites", "class_p4_1_1_reads_writes.html", null ], + [ "P4::RemoveComplexExpressions", "class_p4_1_1_remove_complex_expressions.html", [ + [ "P4::BMV2::RemoveComplexExpressions", "class_p4_1_1_b_m_v2_1_1_remove_complex_expressions.html", null ] + ] ], + [ "P4::RemoveNestedStructs", "class_p4_1_1_remove_nested_structs.html", null ], [ "P4::RenameSymbols", "class_p4_1_1_rename_symbols.html", null ], + [ "P4::ReplaceStructs", "class_p4_1_1_replace_structs.html", null ], [ "P4::ResolveReferences", "class_p4_1_1_resolve_references.html", null ], [ "P4::SubstituteParameters", "class_p4_1_1_substitute_parameters.html", null ], [ "P4::ToP4", "class_p4_1_1_to_p4.html", null ], @@ -280,7 +289,8 @@ var hierarchy = [ "P4::ReadOnlyTypeInference", "class_p4_1_1_read_only_type_inference.html", null ], [ "P4::TypeInference", "class_p4_1_1_type_inference.html", null ] ] ], - [ "P4::UnrollLoops", "class_p4_1_1_unroll_loops.html", null ] + [ "P4::UnrollLoops", "class_p4_1_1_unroll_loops.html", null ], + [ "P4::hasSideEffects", "class_p4_1_1has_side_effects.html", null ] ] ] ] ], [ "P4::detail::DbprintDispatchPtr< T >", "struct_p4_1_1detail_1_1_dbprint_dispatch_ptr.html", null ], @@ -1421,9 +1431,7 @@ var hierarchy = [ "P4::BMV2::ParserConverter", "class_p4_1_1_b_m_v2_1_1_parser_converter.html", null ], [ "P4::BMV2::SharedActionSelectorCheck< arch >", "class_p4_1_1_b_m_v2_1_1_shared_action_selector_check.html", null ], [ "P4::BuildResourceMap", "class_p4_1_1_build_resource_map.html", null ], - [ "P4::CheckExternInvocationCommon", "class_p4_1_1_check_extern_invocation_common.html", [ - [ "P4::DPDK::CheckPNAExternInvocation", "class_p4_1_1_d_p_d_k_1_1_check_p_n_a_extern_invocation.html", null ] - ] ], + [ "P4::CheckExternInvocationCommon", "class_p4_1_1_check_extern_invocation_common.html", null ], [ "P4::CheckNamedArgs", "class_p4_1_1_check_named_args.html", null ], [ "P4::ClearTypeMap", "class_p4_1_1_clear_type_map.html", null ], [ "P4::CompileTimeOperations", "class_p4_1_1_compile_time_operations.html", null ], @@ -1799,9 +1807,7 @@ var hierarchy = [ "P4::RemoveAliases", "class_p4_1_1_remove_aliases.html", null ], [ "P4::RemoveBreakContinue", "class_p4_1_1_remove_break_continue.html", null ], [ "P4::RemoveComplexComparisons", "class_p4_1_1_remove_complex_comparisons.html", null ], - [ "P4::RemoveComplexExpressions", "class_p4_1_1_remove_complex_expressions.html", [ - [ "P4::BMV2::RemoveComplexExpressions", "class_p4_1_1_b_m_v2_1_1_remove_complex_expressions.html", null ] - ] ], + [ "P4::RemoveComplexExpressions", "class_p4_1_1_remove_complex_expressions.html", null ], [ "P4::RemoveGenericTypes", "class_p4_1_1_remove_generic_types.html", null ], [ "P4::RemoveHidden", "class_p4_1_1_remove_hidden.html", null ], [ "P4::RemoveNestedStructs", "class_p4_1_1_remove_nested_structs.html", null ], diff --git a/hs_index_simplify_8h_source.html b/hs_index_simplify_8h_source.html index 38cfac81d43..32686a5c1df 100644 --- a/hs_index_simplify_8h_source.html +++ b/hs_index_simplify_8h_source.html @@ -126,111 +126,126 @@
    1#ifndef MIDEND_HSINDEXSIMPLIFY_H_
    2#define MIDEND_HSINDEXSIMPLIFY_H_
    3
    -
    4#include "frontends/common/resolveReferences/referenceMap.h"
    -
    5#include "frontends/p4/typeChecking/typeChecker.h"
    -
    6#include "frontends/p4/typeMap.h"
    -
    7#include "ir/ir.h"
    -
    8
    -
    9namespace P4 {
    -
    10
    -
    11using GeneratedVariablesMap = std::map<cstring, const IR::PathExpression *>;
    -
    12
    -
    -
    16class HSIndexFinder : public Inspector {
    -
    17 friend class HSIndexTransform;
    -
    18 friend class HSIndexContretizer;
    - -
    20 ReferenceMap *refMap;
    -
    21 TypeMap *typeMap;
    -
    22 const IR::ArrayIndex *arrayIndex = nullptr;
    -
    23 const IR::PathExpression *newVariable = nullptr;
    -
    24 GeneratedVariablesMap *generatedVariables;
    -
    25 std::set<cstring> storedMember;
    -
    26 std::list<IR::Member *> dependedMembers;
    -
    27
    -
    28 public:
    - -
    30 TypeMap *typeMap, GeneratedVariablesMap *generatedVariables)
    -
    31 : locals(locals),
    -
    32 refMap(refMap),
    -
    33 typeMap(typeMap),
    -
    34 generatedVariables(generatedVariables) {}
    -
    35 void postorder(const IR::ArrayIndex *curArrayIndex) override;
    -
    36
    -
    37 protected:
    -
    38 void addNewVariable();
    -
    39};
    +
    4#include <memory>
    +
    5
    +
    6#include "frontends/p4/typeChecking/typeChecker.h"
    +
    7#include "frontends/p4/typeMap.h"
    +
    8#include "ir/ir.h"
    +
    9
    +
    10namespace P4 {
    +
    11
    +
    12using GeneratedVariablesMap = std::map<cstring, const IR::PathExpression *>;
    +
    13
    +
    +
    17class HSIndexFinder : public Inspector {
    +
    18 friend class HSIndexTransform;
    +
    19 friend class HSIndexContretizer;
    + +
    21 std::shared_ptr<NameGenerator> nameGen;
    +
    22 TypeMap *typeMap;
    +
    23 const IR::ArrayIndex *arrayIndex = nullptr;
    +
    24 const IR::PathExpression *newVariable = nullptr;
    +
    25 GeneratedVariablesMap *generatedVariables;
    +
    26 std::set<cstring> storedMember;
    +
    27 std::list<IR::Member *> dependedMembers;
    +
    28
    +
    29 public:
    + +
    31 std::shared_ptr<NameGenerator> nameGen, TypeMap *typeMap,
    +
    32 GeneratedVariablesMap *generatedVariables)
    +
    33 : locals(locals),
    +
    34 nameGen(nameGen),
    +
    35 typeMap(typeMap),
    +
    36 generatedVariables(generatedVariables) {}
    +
    37 void postorder(const IR::ArrayIndex *curArrayIndex) override;
    +
    38
    +
    39 protected:
    +
    40 void addNewVariable();
    +
    41};
    -
    40
    -
    - -
    43 friend class HSIndexContretizer;
    -
    44 size_t index;
    -
    45 HSIndexFinder &hsIndexFinder;
    -
    46
    -
    47 public:
    -
    48 HSIndexTransform(HSIndexFinder &finder, size_t index) : index(index), hsIndexFinder(finder) {}
    -
    49 const IR::Node *postorder(IR::ArrayIndex *curArrayIndex) override;
    -
    50};
    +
    42
    +
    + +
    45 friend class HSIndexContretizer;
    +
    46 size_t index;
    +
    47 HSIndexFinder &hsIndexFinder;
    +
    48
    +
    49 public:
    +
    50 HSIndexTransform(HSIndexFinder &finder, size_t index) : index(index), hsIndexFinder(finder) {}
    +
    51 const IR::Node *postorder(IR::ArrayIndex *curArrayIndex) override;
    +
    52};
    -
    51
    -
    - -
    68 ReferenceMap *refMap;
    -
    69 TypeMap *typeMap;
    - -
    71 GeneratedVariablesMap *generatedVariables;
    -
    72
    -
    73 public:
    -
    74 HSIndexContretizer(ReferenceMap *refMap, TypeMap *typeMap,
    -
    75 IR::IndexedVector<IR::Declaration> *locals = nullptr,
    -
    76 GeneratedVariablesMap *generatedVariables = nullptr)
    -
    77 : refMap(refMap), typeMap(typeMap), locals(locals), generatedVariables(generatedVariables) {
    -
    78 if (generatedVariables == nullptr) {
    -
    79 generatedVariables = new GeneratedVariablesMap();
    -
    80 }
    -
    81 }
    -
    82 IR::Node *preorder(IR::IfStatement *ifStatement) override;
    -
    83 IR::Node *preorder(IR::AssignmentStatement *assignmentStatement) override;
    -
    84 IR::Node *preorder(IR::BlockStatement *blockStatement) override;
    -
    85 IR::Node *preorder(IR::MethodCallStatement *methodCallStatement) override;
    -
    86 IR::Node *preorder(IR::P4Control *control) override;
    -
    87 IR::Node *preorder(IR::P4Parser *parser) override;
    -
    88 IR::Node *preorder(IR::SwitchStatement *switchStatement) override;
    -
    89
    -
    90 protected:
    -
    91 IR::Node *eliminateArrayIndexes(HSIndexFinder &aiFinder, IR::Statement *statement,
    -
    92 const IR::Expression *expr);
    -
    93};
    +
    53
    +
    + +
    70 TypeMap *typeMap;
    +
    71 std::shared_ptr<MinimalNameGenerator> nameGen;
    + +
    73 GeneratedVariablesMap *generatedVariables;
    +
    74
    +
    75 public:
    +
    76 explicit HSIndexContretizer(TypeMap *typeMap,
    +
    77 std::shared_ptr<MinimalNameGenerator> nameGen = nullptr,
    +
    78 IR::IndexedVector<IR::Declaration> *locals = nullptr,
    +
    79 GeneratedVariablesMap *generatedVariables = nullptr)
    +
    80 : typeMap(typeMap),
    +
    81 nameGen(nameGen),
    +
    82 locals(locals),
    +
    83 generatedVariables(generatedVariables) {
    +
    84 if (generatedVariables == nullptr) generatedVariables = new GeneratedVariablesMap();
    +
    85 }
    +
    86 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    87 auto rv = Transform::init_apply(node);
    +
    88
    +
    89 if (!nameGen) {
    +
    90 nameGen = std::make_shared<MinimalNameGenerator>();
    +
    91 node->apply(*nameGen);
    +
    92 }
    +
    93
    +
    94 return rv;
    +
    95 }
    +
    96
    +
    97 IR::Node *preorder(IR::IfStatement *ifStatement) override;
    +
    98 IR::Node *preorder(IR::AssignmentStatement *assignmentStatement) override;
    +
    99 IR::Node *preorder(IR::BlockStatement *blockStatement) override;
    +
    100 IR::Node *preorder(IR::MethodCallStatement *methodCallStatement) override;
    +
    101 IR::Node *preorder(IR::P4Control *control) override;
    +
    102 IR::Node *preorder(IR::P4Parser *parser) override;
    +
    103 IR::Node *preorder(IR::SwitchStatement *switchStatement) override;
    +
    104
    +
    105 protected:
    +
    106 IR::Node *eliminateArrayIndexes(HSIndexFinder &aiFinder, IR::Statement *statement,
    +
    107 const IR::Expression *expr);
    +
    108};
    -
    94
    -
    - -
    96 public:
    -
    97 HSIndexSimplifier(ReferenceMap *refMap, TypeMap *typeMap) {
    -
    98 // remove block statements
    -
    99 passes.push_back(new TypeChecking(refMap, typeMap, true));
    -
    100 passes.push_back(new HSIndexContretizer(refMap, typeMap));
    -
    101 setName("HSIndexSimplifier");
    -
    102 }
    -
    103};
    +
    109
    +
    + +
    111 public:
    +
    112 explicit HSIndexSimplifier(TypeMap *typeMap) {
    +
    113 // remove block statements
    +
    114 passes.push_back(new TypeChecking(nullptr, typeMap, true));
    +
    115 passes.push_back(new HSIndexContretizer(typeMap));
    +
    116 setName("HSIndexSimplifier");
    +
    117 }
    +
    118};
    -
    104
    -
    105} // namespace P4
    -
    106
    -
    107#endif /* MIDEND_HSINDEXSIMPLIFY_H_ */
    -
    Definition hsIndexSimplify.h:67
    -
    Definition hsIndexSimplify.h:16
    -
    Definition hsIndexSimplify.h:95
    -
    This class substitutes index of a header stack in all occurences of found header stack.
    Definition hsIndexSimplify.h:42
    +
    119
    +
    120} // namespace P4
    +
    121
    +
    122#endif /* MIDEND_HSINDEXSIMPLIFY_H_ */
    +
    Definition hsIndexSimplify.h:69
    +
    Definition hsIndexSimplify.h:17
    +
    Definition hsIndexSimplify.h:110
    +
    This class substitutes index of a header stack in all occurences of found header stack.
    Definition hsIndexSimplify.h:44
    Definition node.h:52
    Definition node.h:95
    Definition visitor.h:400
    Definition pass_manager.h:40
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    +
    Definition visitor.h:78
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/inherit_graph_118.map b/inherit_graph_118.map index 360902a1ed3..e0f5e286fc4 100644 --- a/inherit_graph_118.map +++ b/inherit_graph_118.map @@ -1,1757 +1,1763 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inherit_graph_118.md5 b/inherit_graph_118.md5 index a25aa7a8135..2049cbd5601 100644 --- a/inherit_graph_118.md5 +++ b/inherit_graph_118.md5 @@ -1 +1 @@ -46fbbc3901dce84f1085a962adbdf74b \ No newline at end of file +b9115be442f8982c38c3e56c5491ba67 \ No newline at end of file diff --git a/inherit_graph_118.svg b/inherit_graph_118.svg index c4258a0c2f0..ee7cda38a57 100644 --- a/inherit_graph_118.svg +++ b/inherit_graph_118.svg @@ -4,16 +4,16 @@ - - + + Graphical Class Hierarchy Node0 - -P4::DeclarationLookup + +P4::DeclarationLookup @@ -21,8 +21,8 @@ Node1 - -P4::ReferenceMap + +P4::ReferenceMap @@ -30,46 +30,85 @@ Node0->Node1 - - + + + + + + + +Node329 + + +P4::ResolutionContext + + + + + +Node0->Node329 + + + + + + + + +Node330 + + +P4::AbstractInliner +< ActionsInlineList, + AInlineWorkList > + + + + + +Node329->Node330 + + + Node333 - - -P4::ResolutionContext + + +P4::AbstractInliner +< FunctionsInlineList, + FunctionsInlineWorkList > - - -Node0->Node333 - - - + + +Node329->Node333 + + + - - -Node334 - - -P4::AbstractInliner -< ActionsInlineList, - AInlineWorkList > + + +Node335 + + +P4::AbstractInliner +< InlineList, InlineSummary > - - -Node333->Node334 - - - + + +Node329->Node335 + + + @@ -77,1061 +116,1168 @@ Node337 - -P4::AbstractInliner -< FunctionsInlineList, - FunctionsInlineWorkList > + +P4::AbstractInliner +< P4::InlineList, InlineWork +List > - - -Node333->Node337 - - - + + +Node329->Node337 + + + - - -Node339 - - -P4::AbstractInliner -< InlineList, InlineSummary > + + +Node338 + + +P4::AbstractInliner +< InlineList, InlineWorkList > - - -Node333->Node339 - - - + + +Node329->Node338 + + + - - -Node341 - - -P4::AbstractInliner -< P4::InlineList, InlineWork -List > + + +Node327 + + +P4::CheckExternInvocation +Common - - -Node333->Node341 - - - + + +Node329->Node327 + + + - - -Node342 - - -P4::AbstractInliner -< InlineList, InlineWorkList > + + +Node406 + + +P4::ComputeDefUse - - -Node333->Node342 - - - + + +Node329->Node406 + + + - - -Node332 - - -P4::ComputeDefUse + + +Node644 + + +P4::ComputeDefUse:: +SetupJoinPoints - - -Node333->Node332 - - - + + +Node329->Node644 + + + - - -Node647 - - -P4::ComputeDefUse:: -SetupJoinPoints + + +Node646 + + +P4::ComputeParserCG - - -Node333->Node647 - - - + + +Node329->Node646 + + + - - -Node649 - - -P4::ComputeParserCG + + +Node347 + + +P4::ConstantTypeSubstitution - - -Node333->Node649 - - - + + +Node329->Node347 + + + Node351 - - -P4::ConstantTypeSubstitution + + +P4::CreateStructInitializers - - -Node333->Node351 - - - + + +Node329->Node351 + + + - - -Node355 - - -P4::CreateStructInitializers + + +Node647 + + +P4::Deprecated - - -Node333->Node355 - - - + + +Node329->Node647 + + + - - -Node650 - - -P4::Deprecated + + +Node648 + + +P4::DiscoverActionsInlining - - -Node333->Node650 - - - + + +Node329->Node648 + + + - - -Node651 - - -P4::DiscoverActionsInlining + + +Node649 + + +P4::DiscoverFunctionsInlining - - -Node333->Node651 - - - + + +Node329->Node649 + + + - - -Node652 - - -P4::DiscoverFunctionsInlining + + +Node650 + + +P4::DoCheckConstants - - -Node333->Node652 - - - + + +Node329->Node650 + + + - - -Node653 - - -P4::DoCheckConstants + + +Node651 + + +P4::DoCheckCoreMethods - - -Node333->Node653 - - - + + +Node329->Node651 + + + - - -Node654 - - -P4::DoCheckCoreMethods + + +Node390 + + +P4::DoConstantFolding - - -Node333->Node654 - - - + + +Node329->Node390 + + + Node394 - - -P4::DoConstantFolding + + +P4::DoDefaultArguments - - -Node333->Node394 - - - + + +Node329->Node394 + + + - - -Node398 - - -P4::DoDefaultArguments + + +Node399 + + +P4::DoExpandEmit - - -Node333->Node398 - - - + + +Node329->Node399 + + + - - -Node403 - - -P4::DoExpandEmit + + +Node400 + + +P4::DoExpandLookahead - - -Node333->Node403 - - - + + +Node329->Node400 + + + Node404 - - -P4::DoExpandLookahead + + +P4::DoLocalCopyPropagation - - -Node333->Node404 - - - + + +Node329->Node404 + + + - - -Node550 - - -P4::DoOrderArguments + + +Node547 + + +P4::DoOrderArguments - - -Node333->Node550 - - - + + +Node329->Node547 + + + - - -Node552 - - -P4::DoRemoveAssertAssume + + +Node549 + + +P4::DoRemoveAssertAssume - - -Node333->Node552 - - - + + +Node329->Node549 + + + - - -Node557 - - -P4::DoRemoveExits + + +Node554 + + +P4::DoRemoveExits - - -Node333->Node557 - - - + + +Node329->Node554 + + + - - -Node554 - - -P4::DoRemoveMiss + + +Node551 + + +P4::DoRemoveMiss - - -Node333->Node554 - - - + + +Node329->Node551 + + + + + + + + +Node558 + + +P4::DoReplaceTypedef + + + + + +Node329->Node558 + + + Node561 - - -P4::DoReplaceTypedef + + +P4::DoSimplifyControlFlow - - -Node333->Node561 - - - + + +Node329->Node561 + + + - - -Node564 - - -P4::DoSimplifyControlFlow + + +Node408 + + +P4::DoSimplifyExpressions - - -Node333->Node564 - - - + + +Node329->Node408 + + + - - -Node537 - - -P4::DoSimplifyExpressions + + +Node566 + + +P4::DoStaticAssert - - -Node333->Node537 - - - + + +Node329->Node566 + + + Node569 - - -P4::DoStaticAssert + + +P4::DoTableHit - - -Node333->Node569 - - - + + +Node329->Node569 + + + - - -Node572 - - -P4::DoTableHit + + +Node571 + + +P4::DontcareArgs - - -Node333->Node572 - - - + + +Node329->Node571 + + + - - -Node574 - - -P4::DontcareArgs + + +Node576 + + +P4::EntryPriorities - - -Node333->Node574 - - - + + +Node329->Node576 + + + - - -Node579 - - -P4::EntryPriorities + + +Node652 + + +P4::FindActionParameters + + + + + +Node329->Node652 + + + + + + + + +Node653 + + +P4::FindFunctionSpecializations + + + + + +Node329->Node653 + + + + + + + + +Node654 + + +P4::FindGlobalActionUses - - -Node333->Node579 - - - + + +Node329->Node654 + + + Node655 - - -P4::FindActionParameters + + +P4::FindRepeatedActionUses - - -Node333->Node655 - - - + + +Node329->Node655 + + + Node656 - - -P4::FindFunctionSpecializations + + +P4::FindSpecializations - - -Node333->Node656 - - - + + +Node329->Node656 + + + Node657 - - -P4::FindGlobalActionUses + + +P4::FunctionsInliner +::isLocalExpression - - -Node333->Node657 - - - + + +Node329->Node657 + + + Node658 - - -P4::FindRepeatedActionUses + + +P4::HasTableApply - - -Node333->Node658 - - - + + +Node329->Node658 + + + - - -Node659 - - -P4::FindSpecializations + + +Node584 + + +P4::InstantiateDirectCalls - - -Node333->Node659 - - - + + +Node329->Node584 + + + - - -Node660 - - -P4::FunctionsInliner -::isLocalExpression + + +Node659 + + +P4::IsValid - - -Node333->Node660 - - - + + +Node329->Node659 + + + - - -Node661 - - -P4::HasTableApply + + +Node585 + + +P4::KeySideEffect - - -Node333->Node661 - - - + + +Node329->Node585 + + + Node587 - - -P4::InstantiateDirectCalls + + +P4::LocalizeActions - - -Node333->Node587 - - - + + +Node329->Node587 + + + - - -Node662 - - -P4::IsValid + + +Node591 + + +P4::MoveInitializers - - -Node333->Node662 - - - + + +Node329->Node591 + + + - - -Node588 - - -P4::KeySideEffect + + +Node665 + + +P4::P4Fmt::P4Formatter - - -Node333->Node588 - - - + + +Node329->Node665 + + + - - -Node590 - - -P4::LocalizeActions + + +Node666 + + +P4::P4Tools::P4ProgramDCGCreator - - -Node333->Node590 - - - + + +Node329->Node666 + + + - - -Node594 - - -P4::MoveInitializers + + +Node667 + + +P4::ReadsWrites - - -Node333->Node594 - - - + + +Node329->Node667 + + + - - -Node668 - - -P4::P4Fmt::P4Formatter + + +Node618 + + +P4::RemoveComplexExpressions - - -Node333->Node668 - - - + + +Node329->Node618 + + + - - -Node669 - - -P4::P4Tools::P4ProgramDCGCreator + + +Node622 + + +P4::RemoveNestedStructs - - -Node333->Node669 - - - + + +Node329->Node622 + + + - - -Node670 - - -P4::ReadsWrites + + +Node627 + + +P4::RenameSymbols - - -Node333->Node670 - - - + + +Node329->Node627 + + + - - -Node630 - - -P4::RenameSymbols + + +Node412 + + +P4::ReplaceStructs - - -Node333->Node630 - - - + + +Node329->Node412 + + + - - -Node671 - - -P4::ResolveReferences + + +Node668 + + +P4::ResolveReferences + + + + + +Node329->Node668 + + + + + + + + +Node640 + + +P4::SubstituteParameters + + + + + +Node329->Node640 + + + - - -Node333->Node671 - - - + + +Node669 + + +P4::ToP4 + + + + + +Node329->Node669 + + + + + + + + +Node540 + + +P4::TypeInferenceBase + + + + + +Node329->Node540 + + + Node643 - - -P4::SubstituteParameters + + +P4::UnrollLoops - - -Node333->Node643 - - - + + +Node329->Node643 + + + - - -Node672 - - -P4::ToP4 + + +Node670 + + +P4::hasSideEffects - - -Node333->Node672 - - - + + +Node329->Node670 + + + - - -Node543 - - -P4::TypeInferenceBase + + +Node331 + + +P4::ActionsInliner - - -Node333->Node543 - - - + + +Node330->Node331 + + + - - -Node646 - - -P4::UnrollLoops + + +Node334 + + +P4::FunctionsInliner - - -Node333->Node646 - - - + + +Node333->Node334 + + + - - -Node335 - - -P4::ActionsInliner + + +Node336 + + +P4::GeneralInliner - - -Node334->Node335 - - - + + +Node335->Node336 + + + - - -Node338 - - -P4::FunctionsInliner + + +Node328 + + +P4::DPDK::CheckPNAExtern +Invocation - - -Node337->Node338 - - - + + +Node327->Node328 + + + - - -Node340 - - -P4::GeneralInliner + + +Node586 + + +P4::DPDK::CopyMatchKeysTo +SingleStruct - - -Node339->Node340 - - - + + +Node585->Node586 + + + - - -Node589 - - -P4::DPDK::CopyMatchKeysTo -SingleStruct + + +Node619 + + +P4::BMV2::RemoveComplexExpressions - - -Node588->Node589 - - - + + +Node618->Node619 + + + - - -Node544 - - -P4::ReadOnlyTypeInference + + +Node541 + + +P4::ReadOnlyTypeInference - - -Node543->Node544 - - - + + +Node540->Node541 + + + - - -Node545 - - -P4::TypeInference + + +Node542 + + +P4::TypeInference - - -Node543->Node545 - - - + + +Node540->Node542 + + + - - -Node450 - - -P4::IHasBlock + + +Node454 + + +P4::IHasBlock - - -Node451 - - -P4::Evaluator + + +Node455 + + +P4::Evaluator - - -Node450->Node451 - - - + + +Node454->Node455 + + + - - -Node449 - - -P4::EvaluatorPass + + +Node453 + + +P4::EvaluatorPass - - -Node450->Node449 - - - + + +Node454->Node453 + + + @@ -1139,8 +1285,8 @@ Node4 - -P4::IHasDbPrint + +P4::IHasDbPrint @@ -1148,18 +1294,18 @@ Node5 - -P4::StructTypeReplacement -< IR::Type_Struct > + +P4::StructTypeReplacement +< IR::Type_Struct > - + Node4->Node5 - - - + + + @@ -1167,18 +1313,18 @@ Node6 - -P4::TypeSubstitution -< const IR::ITypeVar * > + +P4::TypeSubstitution +< const IR::ITypeVar * > - + Node4->Node6 - - - + + + @@ -1186,17 +1332,17 @@ Node8 - -P4::AllDefinitions + +P4::AllDefinitions - + Node4->Node8 - - - + + + @@ -1204,17 +1350,17 @@ Node9 - -P4::BMV2::CFG + +P4::BMV2::CFG - + Node4->Node9 - - - + + + @@ -1222,17 +1368,17 @@ Node10 - -P4::BMV2::CFG::EdgeSet + +P4::BMV2::CFG::EdgeSet - + Node4->Node10 - - - + + + @@ -1240,17 +1386,17 @@ Node11 - -P4::BMV2::CFG::Node + +P4::BMV2::CFG::Node - + Node4->Node11 - - - + + + @@ -1258,17 +1404,17 @@ Node303 - -P4::CallInfo + +P4::CallInfo - + Node4->Node303 - - - + + + @@ -1276,18 +1422,18 @@ Node304 - -P4::ComplexValues:: -Component + +P4::ComplexValues:: +Component - + Node4->Node304 - - - + + + @@ -1295,17 +1441,17 @@ Node307 - -P4::ComputeWriteSet + +P4::ComputeWriteSet - + Node4->Node307 - - - + + + @@ -1313,17 +1459,17 @@ Node817 - -P4::Definitions + +P4::Definitions - + Node4->Node817 - - - + + + @@ -1331,17 +1477,17 @@ Node144 - -P4::IR::ID + +P4::IR::ID - + Node4->Node144 - - - + + + @@ -1349,17 +1495,17 @@ Node105 - -P4::IR::INode + +P4::IR::INode - + Node4->Node105 - - - + + + @@ -1367,17 +1513,17 @@ Node818 - -P4::InlineSummary + +P4::InlineSummary - + Node4->Node818 - - - + + + @@ -1385,17 +1531,17 @@ Node819 - -P4::LocationPath + +P4::LocationPath - + Node4->Node819 - - - + + + @@ -1403,17 +1549,17 @@ Node820 - -P4::LocationSet + +P4::LocationSet - + Node4->Node820 - - - + + + @@ -1421,17 +1567,17 @@ Node821 - -P4::ParameterSubstitution + +P4::ParameterSubstitution - + Node4->Node821 - - - + + + @@ -1439,17 +1585,17 @@ Node2 - -P4::ProgramMap + +P4::ProgramMap - + Node4->Node2 - - - + + + @@ -1457,17 +1603,17 @@ Node822 - -P4::ProgramPoint + +P4::ProgramPoint - + Node4->Node822 - - - + + + @@ -1475,17 +1621,17 @@ Node823 - -P4::ProgramPoints + +P4::ProgramPoints - + Node4->Node823 - - - + + + @@ -1493,17 +1639,17 @@ Node824 - -P4::SetOfLocations + +P4::SetOfLocations - + Node4->Node824 - - - + + + @@ -1511,19 +1657,19 @@ Node825 - -P4::SimpleCallInfo -< CallableT, CallNodeT, - CallExpressionT > + +P4::SimpleCallInfo +< CallableT, CallNodeT, + CallExpressionT > - + Node4->Node825 - - - + + + @@ -1531,18 +1677,18 @@ Node826 - -P4::SimpleInlineWorkList -< CallInfo > + +P4::SimpleInlineWorkList +< CallInfo > - + Node4->Node826 - - - + + + @@ -1550,17 +1696,17 @@ Node267 - -P4::StorageLocation + +P4::StorageLocation - + Node4->Node267 - - - + + + @@ -1568,17 +1714,17 @@ Node827 - -P4::StorageMap + +P4::StorageMap - + Node4->Node827 - - - + + + @@ -1586,17 +1732,17 @@ Node828 - -P4::StructTypeReplacement< T > + +P4::StructTypeReplacement< T > - + Node4->Node828 - - - + + + @@ -1604,17 +1750,17 @@ Node274 - -P4::SymbolicValue + +P4::SymbolicValue - + Node4->Node274 - - - + + + @@ -1622,17 +1768,17 @@ Node293 - -P4::TypeConstraint + +P4::TypeConstraint - + Node4->Node293 - - - + + + @@ -1640,17 +1786,17 @@ Node829 - -P4::TypeConstraints + +P4::TypeConstraints - + Node4->Node829 - - - + + + @@ -1658,17 +1804,17 @@ Node830 - -P4::TypeSpecialization + +P4::TypeSpecialization - + Node4->Node830 - - - + + + @@ -1676,17 +1822,17 @@ Node831 - -P4::TypeSpecializationMap + +P4::TypeSpecializationMap - + Node4->Node831 - - - + + + @@ -1694,17 +1840,17 @@ Node832 - -P4::TypeSubstitution< T > + +P4::TypeSubstitution< T > - + Node4->Node832 - - - + + + @@ -1712,17 +1858,17 @@ Node833 - -P4::Util::Comment + +P4::Util::Comment - + Node4->Node833 - - - + + + @@ -1730,17 +1876,17 @@ Node834 - -P4::ValueMap + +P4::ValueMap - + Node4->Node834 - - - + + + @@ -1748,17 +1894,17 @@ Node7 - -P4::TypeVariableSubstitution + +P4::TypeVariableSubstitution - + Node6->Node7 - - - + + + @@ -1766,17 +1912,17 @@ Node12 - -P4::BMV2::CFG::DummyNode + +P4::BMV2::CFG::DummyNode - + Node11->Node12 - - - + + + @@ -1784,17 +1930,17 @@ Node13 - -P4::BMV2::CFG::IfNode + +P4::BMV2::CFG::IfNode - + Node11->Node13 - - - + + + @@ -1802,17 +1948,17 @@ Node14 - -P4::BMV2::CFG::TableNode + +P4::BMV2::CFG::TableNode - + Node11->Node14 - - - + + + @@ -1820,18 +1966,18 @@ Node305 - -P4::ComplexValues:: -FieldsMap + +P4::ComplexValues:: +FieldsMap - + Node304->Node305 - - - + + + @@ -1839,18 +1985,18 @@ Node306 - -P4::ComplexValues:: -FinalName + +P4::ComplexValues:: +FinalName - + Node304->Node306 - - - + + + @@ -1858,17 +2004,17 @@ Node106 - -P4::IR::IDeclaration + +P4::IR::IDeclaration - + Node105->Node106 - - - + + + @@ -1876,17 +2022,17 @@ Node107 - -P4::IR::Node + +P4::IR::Node - + Node105->Node107 - - - + + + @@ -1894,18 +2040,18 @@ Node108 - -P4::IR::NameMap< T, - MAP, COMP, ALLOC > + +P4::IR::NameMap< T, + MAP, COMP, ALLOC > - + Node107->Node108 - - - + + + @@ -1913,18 +2059,18 @@ Node109 - -P4::IR::NodeMap< KEY, - VALUE, MAP, COMP, ALLOC > + +P4::IR::NodeMap< KEY, + VALUE, MAP, COMP, ALLOC > - + Node107->Node109 - - - + + + @@ -1932,17 +2078,17 @@ Node110 - -P4::IR::VectorBase + +P4::IR::VectorBase - + Node107->Node110 - - - + + + @@ -1950,18 +2096,18 @@ Node111 - -P4::IR::Vector< IR -::Type > + +P4::IR::Vector< IR +::Type > - + Node110->Node111 - - - + + + @@ -1969,18 +2115,18 @@ Node112 - -P4::IR::Vector< IR -::Argument > + +P4::IR::Vector< IR +::Argument > - + Node110->Node112 - - - + + + @@ -1988,18 +2134,18 @@ Node113 - -P4::IR::Vector< IR -::DpdkAsmStatement > + +P4::IR::Vector< IR +::DpdkAsmStatement > - + Node110->Node113 - - - + + + @@ -2007,18 +2153,18 @@ Node115 - -P4::IR::Vector< P4 -::IR::Node > + +P4::IR::Vector< P4 +::IR::Node > - + Node110->Node115 - - - + + + @@ -2026,18 +2172,18 @@ Node117 - -P4::IR::Vector< IR -::Declaration > + +P4::IR::Vector< IR +::Declaration > - + Node110->Node117 - - - + + + @@ -2045,18 +2191,18 @@ Node119 - -P4::IR::Vector< IR -::StatOrDecl > + +P4::IR::Vector< IR +::StatOrDecl > - + Node110->Node119 - - - + + + @@ -2064,18 +2210,18 @@ Node121 - -P4::IR::Vector< IR -::DpdkTable > + +P4::IR::Vector< IR +::DpdkTable > - + Node110->Node121 - - - + + + @@ -2083,18 +2229,18 @@ Node123 - -P4::IR::Vector< IR -::DpdkSelector > + +P4::IR::Vector< IR +::DpdkSelector > - + Node110->Node123 - - - + + + @@ -2102,18 +2248,18 @@ Node125 - -P4::IR::Vector< IR -::DpdkLearner > + +P4::IR::Vector< IR +::DpdkLearner > - + Node110->Node125 - - - + + + @@ -2121,18 +2267,18 @@ Node127 - -P4::IR::Vector< IR -::DpdkAction > + +P4::IR::Vector< IR +::DpdkAction > - + Node110->Node127 - - - + + + @@ -2140,18 +2286,18 @@ Node129 - -P4::IR::Vector< IR -::Parameter > + +P4::IR::Vector< IR +::Parameter > - + Node110->Node129 - - - + + + @@ -2159,18 +2305,18 @@ Node131 - -P4::IR::Vector< IR -::DpdkDeclaration > + +P4::IR::Vector< IR +::DpdkDeclaration > - + Node110->Node131 - - - + + + @@ -2178,18 +2324,18 @@ Node133 - -P4::IR::Vector< IR -::StructField > + +P4::IR::Vector< IR +::StructField > - + Node110->Node133 - - - + + + @@ -2197,18 +2343,18 @@ Node135 - -P4::IR::Vector< IR -::ParserState > + +P4::IR::Vector< IR +::ParserState > - + Node110->Node135 - - - + + + @@ -2216,18 +2362,18 @@ Node137 - -P4::IR::Vector< IR -::SelectCase > + +P4::IR::Vector< IR +::SelectCase > - + Node110->Node137 - - - + + + @@ -2235,18 +2381,18 @@ Node138 - -P4::IR::Vector< IR -::Expression > + +P4::IR::Vector< IR +::Expression > - + Node110->Node138 - - - + + + @@ -2254,17 +2400,17 @@ Node139 - -P4::IR::Vector< N > + +P4::IR::Vector< N > - + Node110->Node139 - - - + + + @@ -2272,18 +2418,18 @@ Node140 - -P4::IR::Vector< IR -::Annotation > + +P4::IR::Vector< IR +::Annotation > - + Node110->Node140 - - - + + + @@ -2291,17 +2437,17 @@ Node141 - -P4::IR::Vector< T > + +P4::IR::Vector< T > - + Node110->Node141 - - - + + + @@ -2309,18 +2455,18 @@ Node114 - -P4::IR::IndexedVector -< IR::DpdkAsmStatement > + +P4::IR::IndexedVector +< IR::DpdkAsmStatement > - + Node113->Node114 - - - + + + @@ -2328,18 +2474,18 @@ Node116 - -P4::IR::IndexedVector -< P4::IR::Node > + +P4::IR::IndexedVector +< P4::IR::Node > - + Node115->Node116 - - - + + + @@ -2347,18 +2493,18 @@ Node118 - -P4::IR::IndexedVector -< IR::Declaration > + +P4::IR::IndexedVector +< IR::Declaration > - + Node117->Node118 - - - + + + @@ -2366,18 +2512,18 @@ Node120 - -P4::IR::IndexedVector -< IR::StatOrDecl > + +P4::IR::IndexedVector +< IR::StatOrDecl > - + Node119->Node120 - - - + + + @@ -2385,18 +2531,18 @@ Node122 - -P4::IR::IndexedVector -< IR::DpdkTable > + +P4::IR::IndexedVector +< IR::DpdkTable > - + Node121->Node122 - - - + + + @@ -2404,18 +2550,18 @@ Node124 - -P4::IR::IndexedVector -< IR::DpdkSelector > + +P4::IR::IndexedVector +< IR::DpdkSelector > - + Node123->Node124 - - - + + + @@ -2423,18 +2569,18 @@ Node126 - -P4::IR::IndexedVector -< IR::DpdkLearner > + +P4::IR::IndexedVector +< IR::DpdkLearner > - + Node125->Node126 - - - + + + @@ -2442,18 +2588,18 @@ Node128 - -P4::IR::IndexedVector -< IR::DpdkAction > + +P4::IR::IndexedVector +< IR::DpdkAction > - + Node127->Node128 - - - + + + @@ -2461,18 +2607,18 @@ Node130 - -P4::IR::IndexedVector -< IR::Parameter > + +P4::IR::IndexedVector +< IR::Parameter > - + Node129->Node130 - - - + + + @@ -2480,18 +2626,18 @@ Node132 - -P4::IR::IndexedVector -< IR::DpdkDeclaration > + +P4::IR::IndexedVector +< IR::DpdkDeclaration > - + Node131->Node132 - - - + + + @@ -2499,18 +2645,18 @@ Node134 - -P4::IR::IndexedVector -< IR::StructField > + +P4::IR::IndexedVector +< IR::StructField > - + Node133->Node134 - - - + + + @@ -2518,18 +2664,18 @@ Node136 - -P4::IR::IndexedVector -< IR::ParserState > + +P4::IR::IndexedVector +< IR::ParserState > - + Node135->Node136 - - - + + + @@ -2537,26 +2683,26 @@ Node142 - -P4::IR::IndexedVector< T > + +P4::IR::IndexedVector< T > - + Node141->Node142 - - - + + + - + Node2->Node1 - - - + + + @@ -2564,17 +2710,17 @@ Node3 - -P4::TypeMap + +P4::TypeMap - + Node2->Node3 - - - + + + @@ -2582,17 +2728,17 @@ Node268 - -P4::BaseLocation + +P4::BaseLocation - + Node267->Node268 - - - + + + @@ -2600,17 +2746,17 @@ Node269 - -P4::IndexedLocation + +P4::IndexedLocation - + Node267->Node269 - - - + + + @@ -2618,17 +2764,17 @@ Node272 - -P4::WithFieldsLocation + +P4::WithFieldsLocation - + Node267->Node272 - - - + + + @@ -2636,17 +2782,17 @@ Node270 - -P4::ArrayLocation + +P4::ArrayLocation - + Node269->Node270 - - - + + + @@ -2654,17 +2800,17 @@ Node271 - -P4::TupleLocation + +P4::TupleLocation - + Node269->Node271 - - - + + + @@ -2672,17 +2818,17 @@ Node273 - -P4::StructLocation + +P4::StructLocation - + Node272->Node273 - - - + + + @@ -2690,17 +2836,17 @@ Node275 - -P4::ScalarValue + +P4::ScalarValue - + Node274->Node275 - - - + + + @@ -2708,17 +2854,17 @@ Node281 - -P4::SymbolicArray + +P4::SymbolicArray - + Node274->Node281 - - - + + + @@ -2726,17 +2872,17 @@ Node282 - -P4::SymbolicError + +P4::SymbolicError - + Node274->Node282 - - - + + + @@ -2744,17 +2890,17 @@ Node285 - -P4::SymbolicExtern + +P4::SymbolicExtern - + Node274->Node285 - - - + + + @@ -2762,17 +2908,17 @@ Node287 - -P4::SymbolicStruct + +P4::SymbolicStruct - + Node274->Node287 - - - + + + @@ -2780,17 +2926,17 @@ Node291 - -P4::SymbolicTuple + +P4::SymbolicTuple - + Node274->Node291 - - - + + + @@ -2798,17 +2944,17 @@ Node292 - -P4::SymbolicVoid + +P4::SymbolicVoid - + Node274->Node292 - - - + + + @@ -2816,17 +2962,17 @@ Node276 - -P4::SymbolicBool + +P4::SymbolicBool - + Node275->Node276 - - - + + + @@ -2834,17 +2980,17 @@ Node277 - -P4::SymbolicEnum + +P4::SymbolicEnum - + Node275->Node277 - - - + + + @@ -2852,17 +2998,17 @@ Node278 - -P4::SymbolicInteger + +P4::SymbolicInteger - + Node275->Node278 - - - + + + @@ -2870,17 +3016,17 @@ Node279 - -P4::SymbolicString + +P4::SymbolicString - + Node275->Node279 - - - + + + @@ -2888,17 +3034,17 @@ Node280 - -P4::SymbolicVarbit + +P4::SymbolicVarbit - + Node275->Node280 - - - + + + @@ -2906,17 +3052,17 @@ Node283 - -P4::SymbolicException + +P4::SymbolicException - + Node282->Node283 - - - + + + @@ -2924,17 +3070,17 @@ Node284 - -P4::SymbolicStaticError + +P4::SymbolicStaticError - + Node282->Node284 - - - + + + @@ -2942,17 +3088,17 @@ Node286 - -P4::SymbolicPacketIn + +P4::SymbolicPacketIn - + Node285->Node286 - - - + + + @@ -2960,17 +3106,17 @@ Node288 - -P4::SymbolicHeader + +P4::SymbolicHeader - + Node287->Node288 - - - + + + @@ -2978,17 +3124,17 @@ Node290 - -P4::SymbolicHeaderUnion + +P4::SymbolicHeaderUnion - + Node287->Node290 - - - + + + @@ -2996,17 +3142,17 @@ Node289 - -P4::AnyElement + +P4::AnyElement - + Node288->Node289 - - - + + + @@ -3014,17 +3160,17 @@ Node294 - -P4::BinaryConstraint + +P4::BinaryConstraint - + Node293->Node294 - - - + + + @@ -3032,17 +3178,17 @@ Node295 - -P4::CanBeImplicitlyCastConstraint + +P4::CanBeImplicitlyCastConstraint - + Node294->Node295 - - - + + + @@ -3050,143 +3196,143 @@ Node296 - -P4::EqualityConstraint + +P4::EqualityConstraint - + Node294->Node296 - - - + + + - - -Node663 - - -P4::KeyIsSimple + + +Node660 + + +P4::KeyIsSimple - - -Node663->Node662 - - - + + +Node660->Node659 + + + - - -Node664 - - -P4::IsLikeLeftValue + + +Node661 + + +P4::IsLikeLeftValue - - -Node663->Node664 - - - + + +Node660->Node661 + + + - - -Node666 - - -P4::IsNonConstantArrayIndex + + +Node663 + + +P4::IsNonConstantArrayIndex - - -Node663->Node666 - - - + + +Node660->Node663 + + + - - -Node667 - - -P4::OrPolicy + + +Node664 + + +P4::OrPolicy - - -Node663->Node667 - - - + + +Node660->Node664 + + + - - -Node665 - - -P4::IsMask + + +Node662 + + +P4::IsMask - - -Node664->Node665 - - - + + +Node661->Node662 + + + - - -Node760 - - -P4::NameGenerator + + +Node761 + + +P4::NameGenerator - - -Node760->Node1 - - - + + +Node761->Node1 + + + - - -Node759 - - -P4::MinimalNameGenerator + + +Node760 + + +P4::MinimalNameGenerator - - -Node760->Node759 - - - + + +Node761->Node760 + + + @@ -3194,9 +3340,9 @@ Node170 - -P4::ordered_map< std -::string, JsonData * > + +P4::ordered_map< std +::string, JsonData * > @@ -3204,17 +3350,17 @@ Node169 - -P4::JsonObject + +P4::JsonObject - + Node170->Node169 - - - + + + @@ -3222,8 +3368,8 @@ Node302 - -P4::RTTI::Base + +P4::RTTI::Base @@ -3231,62 +3377,62 @@ Node15 - -P4::ICastable + +P4::ICastable - + Node302->Node15 - - - + + + - + Node15->Node11 - - - + + + - + Node15->Node105 - - - + + + - + Node15->Node267 - - - + + + - + Node15->Node274 - - - + + + - + Node15->Node293 - - - + + + @@ -3294,17 +3440,17 @@ Node16 - -P4::AbstractSolver + +P4::AbstractSolver - + Node15->Node16 - - - + + + @@ -3312,17 +3458,17 @@ Node18 - -P4::Backtrack::trigger + +P4::Backtrack::trigger - + Node15->Node18 - - - + + + @@ -3330,17 +3476,17 @@ Node19 - -P4::EBPF::EBPFObject + +P4::EBPF::EBPFObject - + Node15->Node19 - - - + + + @@ -3348,17 +3494,17 @@ Node88 - -P4::EBPF::IHasWidth + +P4::EBPF::IHasWidth - + Node15->Node88 - - - + + + @@ -3366,17 +3512,17 @@ Node145 - -P4::InstanceBase + +P4::InstanceBase - + Node15->Node145 - - - + + + @@ -3384,17 +3530,17 @@ Node165 - -P4::JsonData + +P4::JsonData - + Node15->Node165 - - - + + + @@ -3402,18 +3548,18 @@ Node214 - -P4::P4Tools::AbstractRep -CheckedNode< Self, Node > + +P4::P4Tools::AbstractRep +CheckedNode< Self, Node > - + Node15->Node214 - - - + + + @@ -3421,17 +3567,17 @@ Node215 - -P4::P4Tools::CompilerResult + +P4::P4Tools::CompilerResult - + Node15->Node215 - - - + + + @@ -3439,18 +3585,18 @@ Node218 - -P4::P4Tools::P4Testgen -::AbstractTest + +P4::P4Tools::P4Testgen +::AbstractTest - + Node15->Node218 - - - + + + @@ -3458,18 +3604,18 @@ Node221 - -P4::P4Tools::P4Testgen -::ProgramInfo + +P4::P4Tools::P4Testgen +::ProgramInfo - + Node15->Node221 - - - + + + @@ -3477,18 +3623,18 @@ Node226 - -P4::P4Tools::P4Testgen -::TestObject + +P4::P4Tools::P4Testgen +::TestObject - + Node15->Node226 - - - + + + @@ -3496,17 +3642,17 @@ Node254 - -P4::P4Tools::TraceEvent + +P4::P4Tools::TraceEvent - + Node15->Node254 - - - + + + @@ -3514,17 +3660,17 @@ Node209 - -P4::Util::IJson + +P4::Util::IJson - + Node15->Node209 - - - + + + @@ -3532,17 +3678,17 @@ Node297 - -P4::Util::NamedSymbol + +P4::Util::NamedSymbol - + Node15->Node297 - - - + + + @@ -3550,17 +3696,17 @@ Node17 - -P4::P4Tools::Z3Solver + +P4::P4Tools::Z3Solver - + Node16->Node17 - - - + + + @@ -3568,17 +3714,17 @@ Node20 - -P4::EBPF::EBPFChecksumPSA + +P4::EBPF::EBPFChecksumPSA - + Node19->Node20 - - - + + + @@ -3586,17 +3732,17 @@ Node25 - -P4::EBPF::EBPFControl + +P4::EBPF::EBPFControl - + Node19->Node25 - - - + + + @@ -3604,17 +3750,17 @@ Node39 - -P4::EBPF::EBPFDigestPSA + +P4::EBPF::EBPFDigestPSA - + Node19->Node39 - - - + + + @@ -3622,17 +3768,17 @@ Node41 - -P4::EBPF::EBPFHashAlgorithmPSA + +P4::EBPF::EBPFHashAlgorithmPSA - + Node19->Node41 - - - + + + @@ -3640,17 +3786,17 @@ Node50 - -P4::EBPF::EBPFMethodDeclaration + +P4::EBPF::EBPFMethodDeclaration - + Node19->Node50 - - - + + + @@ -3658,17 +3804,17 @@ Node51 - -P4::EBPF::EBPFParser + +P4::EBPF::EBPFParser - + Node19->Node51 - - - + + + @@ -3676,17 +3822,17 @@ Node55 - -P4::EBPF::EBPFParserState + +P4::EBPF::EBPFParserState - + Node19->Node55 - - - + + + @@ -3694,17 +3840,17 @@ Node57 - -P4::EBPF::EBPFProgram + +P4::EBPF::EBPFProgram - + Node19->Node57 - - - + + + @@ -3712,17 +3858,17 @@ Node69 - -P4::EBPF::EBPFRandomPSA + +P4::EBPF::EBPFRandomPSA - + Node19->Node69 - - - + + + @@ -3730,17 +3876,17 @@ Node70 - -P4::EBPF::EBPFTableBase + +P4::EBPF::EBPFTableBase - + Node19->Node70 - - - + + + @@ -3748,17 +3894,17 @@ Node85 - -P4::EBPF::EBPFType + +P4::EBPF::EBPFType - + Node19->Node85 - - - + + + @@ -3766,17 +3912,17 @@ Node101 - -P4::UBPF::UBPFDeparser + +P4::UBPF::UBPFDeparser - + Node19->Node101 - - - + + + @@ -3784,17 +3930,17 @@ Node102 - -P4::UBPF::UBPFTableBase + +P4::UBPF::UBPFTableBase - + Node19->Node102 - - - + + + @@ -3802,17 +3948,17 @@ Node21 - -P4::EBPF::EBPFHashPSA + +P4::EBPF::EBPFHashPSA - + Node20->Node21 - - - + + + @@ -3820,17 +3966,17 @@ Node22 - -P4::EBPF::EBPFInternetChecksumPSA + +P4::EBPF::EBPFInternetChecksumPSA - + Node20->Node22 - - - + + + @@ -3838,17 +3984,17 @@ Node23 - -P4::TC::EBPFChecksumPNA + +P4::TC::EBPFChecksumPNA - + Node20->Node23 - - - + + + @@ -3856,17 +4002,17 @@ Node24 - -P4::TC::EBPFInternetChecksumPNA + +P4::TC::EBPFInternetChecksumPNA - + Node23->Node24 - - - + + + @@ -3874,17 +4020,17 @@ Node26 - -P4::EBPF::EBPFControlPSA + +P4::EBPF::EBPFControlPSA - + Node25->Node26 - - - + + + @@ -3892,17 +4038,17 @@ Node28 - -P4::EBPF::EBPFDeparser + +P4::EBPF::EBPFDeparser - + Node25->Node28 - - - + + + @@ -3910,17 +4056,17 @@ Node38 - -P4::UBPF::UBPFControl + +P4::UBPF::UBPFControl - + Node25->Node38 - - - + + + @@ -3928,17 +4074,17 @@ Node27 - -P4::TC::EBPFControlPNA + +P4::TC::EBPFControlPNA - + Node26->Node27 - - - + + + @@ -3946,17 +4092,17 @@ Node29 - -P4::EBPF::EBPFDeparserPSA + +P4::EBPF::EBPFDeparserPSA - + Node28->Node29 - - - + + + @@ -3964,17 +4110,17 @@ Node30 - -P4::EBPF::EgressDeparserPSA + +P4::EBPF::EgressDeparserPSA - + Node29->Node30 - - - + + + @@ -3982,17 +4128,17 @@ Node33 - -P4::EBPF::IngressDeparserPSA + +P4::EBPF::IngressDeparserPSA - + Node29->Node33 - - - + + + @@ -4000,17 +4146,17 @@ Node37 - -P4::TC::IngressDeparserPNA + +P4::TC::IngressDeparserPNA - + Node29->Node37 - - - + + + @@ -4018,17 +4164,17 @@ Node31 - -P4::EBPF::TCEgressDeparserPSA + +P4::EBPF::TCEgressDeparserPSA - + Node30->Node31 - - - + + + @@ -4036,17 +4182,17 @@ Node32 - -P4::EBPF::XDPEgressDeparserPSA + +P4::EBPF::XDPEgressDeparserPSA - + Node30->Node32 - - - + + + @@ -4054,17 +4200,17 @@ Node34 - -P4::EBPF::TCIngressDeparserPSA + +P4::EBPF::TCIngressDeparserPSA - + Node33->Node34 - - - + + + @@ -4072,17 +4218,17 @@ Node36 - -P4::EBPF::XDPIngressDeparserPSA + +P4::EBPF::XDPIngressDeparserPSA - + Node33->Node36 - - - + + + @@ -4090,18 +4236,18 @@ Node35 - -P4::EBPF::TCIngressDeparser -ForTrafficManagerPSA + +P4::EBPF::TCIngressDeparser +ForTrafficManagerPSA - + Node34->Node35 - - - + + + @@ -4109,17 +4255,17 @@ Node40 - -P4::TC::EBPFDigestPNA + +P4::TC::EBPFDigestPNA - + Node39->Node40 - - - + + + @@ -4127,17 +4273,17 @@ Node42 - -P4::EBPF::CRCChecksumAlgorithm + +P4::EBPF::CRCChecksumAlgorithm - + Node41->Node42 - - - + + + @@ -4145,18 +4291,18 @@ Node48 - -P4::EBPF::InternetChecksum -Algorithm + +P4::EBPF::InternetChecksum +Algorithm - + Node41->Node48 - - - + + + @@ -4164,18 +4310,18 @@ Node49 - -P4::TC::InternetChecksum -AlgorithmPNA + +P4::TC::InternetChecksum +AlgorithmPNA - + Node41->Node49 - - - + + + @@ -4183,17 +4329,17 @@ Node43 - -P4::EBPF::CRC16ChecksumAlgorithm + +P4::EBPF::CRC16ChecksumAlgorithm - + Node42->Node43 - - - + + + @@ -4201,17 +4347,17 @@ Node44 - -P4::EBPF::CRC32ChecksumAlgorithm + +P4::EBPF::CRC32ChecksumAlgorithm - + Node42->Node44 - - - + + + @@ -4219,17 +4365,17 @@ Node45 - -P4::TC::CRCChecksumAlgorithmPNA + +P4::TC::CRCChecksumAlgorithmPNA - + Node42->Node45 - - - + + + @@ -4237,17 +4383,17 @@ Node46 - -P4::TC::CRC16ChecksumAlgorithmPNA + +P4::TC::CRC16ChecksumAlgorithmPNA - + Node45->Node46 - - - + + + @@ -4255,17 +4401,17 @@ Node47 - -P4::TC::CRC32ChecksumAlgorithmPNA + +P4::TC::CRC32ChecksumAlgorithmPNA - + Node45->Node47 - - - + + + @@ -4273,17 +4419,17 @@ Node52 - -P4::EBPF::EBPFPsaParser + +P4::EBPF::EBPFPsaParser - + Node51->Node52 - - - + + + @@ -4291,17 +4437,17 @@ Node54 - -P4::UBPF::UBPFParser + +P4::UBPF::UBPFParser - + Node51->Node54 - - - + + + @@ -4309,17 +4455,17 @@ Node53 - -P4::TC::EBPFPnaParser + +P4::TC::EBPFPnaParser - + Node52->Node53 - - - + + + @@ -4327,17 +4473,17 @@ Node56 - -P4::UBPF::UBPFParserState + +P4::UBPF::UBPFParserState - + Node55->Node56 - - - + + + @@ -4345,17 +4491,17 @@ Node58 - -P4::EBPF::EBPFPipeline + +P4::EBPF::EBPFPipeline - + Node57->Node58 - - - + + + @@ -4363,17 +4509,17 @@ Node67 - -P4::EBPF::XDPHelpProgram + +P4::EBPF::XDPHelpProgram - + Node57->Node67 - - - + + + @@ -4381,17 +4527,17 @@ Node68 - -P4::UBPF::UBPFProgram + +P4::UBPF::UBPFProgram - + Node57->Node68 - - - + + + @@ -4399,17 +4545,17 @@ Node59 - -P4::EBPF::EBPFEgressPipeline + +P4::EBPF::EBPFEgressPipeline - + Node58->Node59 - - - + + + @@ -4417,17 +4563,17 @@ Node62 - -P4::EBPF::EBPFIngressPipeline + +P4::EBPF::EBPFIngressPipeline - + Node58->Node62 - - - + + + @@ -4435,17 +4581,17 @@ Node60 - -P4::EBPF::TCEgressPipeline + +P4::EBPF::TCEgressPipeline - + Node59->Node60 - - - + + + @@ -4453,17 +4599,17 @@ Node61 - -P4::EBPF::XDPEgressPipeline + +P4::EBPF::XDPEgressPipeline - + Node59->Node61 - - - + + + @@ -4471,17 +4617,17 @@ Node63 - -P4::EBPF::TCIngressPipeline + +P4::EBPF::TCIngressPipeline - + Node62->Node63 - - - + + + @@ -4489,17 +4635,17 @@ Node66 - -P4::EBPF::XDPIngressPipeline + +P4::EBPF::XDPIngressPipeline - + Node62->Node66 - - - + + + @@ -4507,18 +4653,18 @@ Node64 - -P4::EBPF::TCTrafficManager -ForXDP + +P4::EBPF::TCTrafficManager +ForXDP - + Node63->Node64 - - - + + + @@ -4526,17 +4672,17 @@ Node65 - -P4::TC::TCIngressPipelinePNA + +P4::TC::TCIngressPipelinePNA - + Node63->Node65 - - - + + + @@ -4544,17 +4690,17 @@ Node71 - -P4::EBPF::EBPFCounterTable + +P4::EBPF::EBPFCounterTable - + Node70->Node71 - - - + + + @@ -4562,17 +4708,17 @@ Node74 - -P4::EBPF::EBPFMeterPSA + +P4::EBPF::EBPFMeterPSA - + Node70->Node74 - - - + + + @@ -4580,17 +4726,17 @@ Node76 - -P4::EBPF::EBPFRegisterPSA + +P4::EBPF::EBPFRegisterPSA - + Node70->Node76 - - - + + + @@ -4598,17 +4744,17 @@ Node77 - -P4::EBPF::EBPFTable + +P4::EBPF::EBPFTable - + Node70->Node77 - - - + + + @@ -4616,17 +4762,17 @@ Node83 - -P4::EBPF::EBPFValueSet + +P4::EBPF::EBPFValueSet - + Node70->Node83 - - - + + + @@ -4634,17 +4780,17 @@ Node84 - -P4::TC::EBPFRegisterPNA + +P4::TC::EBPFRegisterPNA - + Node70->Node84 - - - + + + @@ -4652,17 +4798,17 @@ Node72 - -P4::EBPF::EBPFCounterPSA + +P4::EBPF::EBPFCounterPSA - + Node71->Node72 - - - + + + @@ -4670,17 +4816,17 @@ Node73 - -P4::TC::EBPFCounterPNA + +P4::TC::EBPFCounterPNA - + Node72->Node73 - - - + + + @@ -4688,17 +4834,17 @@ Node75 - -P4::TC::EBPFMeterPNA + +P4::TC::EBPFMeterPNA - + Node74->Node75 - - - + + + @@ -4706,17 +4852,17 @@ Node78 - -P4::EBPF::EBPFTablePSA + +P4::EBPF::EBPFTablePSA - + Node77->Node78 - - - + + + @@ -4724,17 +4870,17 @@ Node79 - -P4::EBPF::EBPFTableImplementationPSA + +P4::EBPF::EBPFTableImplementationPSA - + Node78->Node79 - - - + + + @@ -4742,17 +4888,17 @@ Node82 - -P4::TC::EBPFTablePNA + +P4::TC::EBPFTablePNA - + Node78->Node82 - - - + + + @@ -4760,17 +4906,17 @@ Node80 - -P4::EBPF::EBPFActionProfilePSA + +P4::EBPF::EBPFActionProfilePSA - + Node79->Node80 - - - + + + @@ -4778,17 +4924,17 @@ Node81 - -P4::EBPF::EBPFActionSelectorPSA + +P4::EBPF::EBPFActionSelectorPSA - + Node79->Node81 - - - + + + @@ -4796,17 +4942,17 @@ Node86 - -P4::EBPF::EBPFBoolType + +P4::EBPF::EBPFBoolType - + Node85->Node86 - - - + + + @@ -4814,17 +4960,17 @@ Node89 - -P4::EBPF::EBPFEnumType + +P4::EBPF::EBPFEnumType - + Node85->Node89 - - - + + + @@ -4832,17 +4978,17 @@ Node91 - -P4::EBPF::EBPFErrorType + +P4::EBPF::EBPFErrorType - + Node85->Node91 - - - + + + @@ -4850,17 +4996,17 @@ Node93 - -P4::EBPF::EBPFScalarType + +P4::EBPF::EBPFScalarType - + Node85->Node93 - - - + + + @@ -4868,17 +5014,17 @@ Node96 - -P4::EBPF::EBPFStackType + +P4::EBPF::EBPFStackType - + Node85->Node96 - - - + + + @@ -4886,17 +5032,17 @@ Node97 - -P4::EBPF::EBPFStructType + +P4::EBPF::EBPFStructType - + Node85->Node97 - - - + + + @@ -4904,17 +5050,17 @@ Node99 - -P4::EBPF::EBPFTypeName + +P4::EBPF::EBPFTypeName - + Node85->Node99 - - - + + + @@ -4922,17 +5068,17 @@ Node100 - -P4::UBPF::UBPFListType + +P4::UBPF::UBPFListType - + Node85->Node100 - - - + + + @@ -4940,17 +5086,17 @@ Node87 - -P4::UBPF::UBPFBoolType + +P4::UBPF::UBPFBoolType - + Node86->Node87 - - - + + + @@ -4958,17 +5104,17 @@ Node90 - -P4::UBPF::UBPFEnumType + +P4::UBPF::UBPFEnumType - + Node89->Node90 - - - + + + @@ -4976,17 +5122,17 @@ Node92 - -P4::UBPF::UBPFErrorType + +P4::UBPF::UBPFErrorType - + Node91->Node92 - - - + + + @@ -4994,17 +5140,17 @@ Node94 - -P4::UBPF::UBPFExternType + +P4::UBPF::UBPFExternType - + Node93->Node94 - - - + + + @@ -5012,17 +5158,17 @@ Node95 - -P4::UBPF::UBPFScalarType + +P4::UBPF::UBPFScalarType - + Node93->Node95 - - - + + + @@ -5030,17 +5176,17 @@ Node98 - -P4::UBPF::UBPFStructType + +P4::UBPF::UBPFStructType - + Node97->Node98 - - - + + + @@ -5048,17 +5194,17 @@ Node103 - -P4::UBPF::UBPFRegister + +P4::UBPF::UBPFRegister - + Node102->Node103 - - - + + + @@ -5066,89 +5212,89 @@ Node104 - -P4::UBPF::UBPFTable + +P4::UBPF::UBPFTable - + Node102->Node104 - - - + + + - + Node88->Node86 - - - + + + - + Node88->Node89 - - - + + + - + Node88->Node91 - - - + + + - + Node88->Node93 - - - + + + - + Node88->Node96 - - - + + + - + Node88->Node97 - - - + + + - + Node88->Node99 - - - + + + - + Node88->Node100 - - - + + + @@ -5156,17 +5302,17 @@ Node146 - -P4::ConstructorCall + +P4::ConstructorCall - + Node145->Node146 - - - + + + @@ -5174,17 +5320,17 @@ Node149 - -P4::EnumInstance + +P4::EnumInstance - + Node145->Node149 - - - + + + @@ -5192,17 +5338,17 @@ Node152 - -P4::Instantiation + +P4::Instantiation - + Node145->Node152 - - - + + + @@ -5210,17 +5356,17 @@ Node157 - -P4::MethodInstance + +P4::MethodInstance - + Node145->Node157 - - - + + + @@ -5228,17 +5374,17 @@ Node147 - -P4::ContainerConstructorCall + +P4::ContainerConstructorCall - + Node146->Node147 - - - + + + @@ -5246,17 +5392,17 @@ Node148 - -P4::ExternConstructorCall + +P4::ExternConstructorCall - + Node146->Node148 - - - + + + @@ -5264,17 +5410,17 @@ Node150 - -P4::SerEnumInstance + +P4::SerEnumInstance - + Node149->Node150 - - - + + + @@ -5282,17 +5428,17 @@ Node151 - -P4::SimpleEnumInstance + +P4::SimpleEnumInstance - + Node149->Node151 - - - + + + @@ -5300,17 +5446,17 @@ Node153 - -P4::ControlInstantiation + +P4::ControlInstantiation - + Node152->Node153 - - - + + + @@ -5318,17 +5464,17 @@ Node154 - -P4::ExternInstantiation + +P4::ExternInstantiation - + Node152->Node154 - - - + + + @@ -5336,17 +5482,17 @@ Node155 - -P4::PackageInstantiation + +P4::PackageInstantiation - + Node152->Node155 - - - + + + @@ -5354,17 +5500,17 @@ Node156 - -P4::ParserInstantiation + +P4::ParserInstantiation - + Node152->Node156 - - - + + + @@ -5372,17 +5518,17 @@ Node158 - -P4::ActionCall + +P4::ActionCall - + Node157->Node158 - - - + + + @@ -5390,17 +5536,17 @@ Node159 - -P4::ApplyMethod + +P4::ApplyMethod - + Node157->Node159 - - - + + + @@ -5408,17 +5554,17 @@ Node160 - -P4::BuiltInMethod + +P4::BuiltInMethod - + Node157->Node160 - - - + + + @@ -5426,17 +5572,17 @@ Node161 - -P4::ExternCall + +P4::ExternCall - + Node157->Node161 - - - + + + @@ -5444,17 +5590,17 @@ Node164 - -P4::FunctionCall + +P4::FunctionCall - + Node157->Node164 - - - + + + @@ -5462,17 +5608,17 @@ Node162 - -P4::ExternFunction + +P4::ExternFunction - + Node161->Node162 - - - + + + @@ -5480,26 +5626,26 @@ Node163 - -P4::ExternMethod + +P4::ExternMethod - + Node161->Node163 - - - + + + - + Node165->Node169 - - - + + + @@ -5507,17 +5653,17 @@ Node166 - -P4::JsonBoolean + +P4::JsonBoolean - + Node165->Node166 - - - + + + @@ -5525,17 +5671,17 @@ Node167 - -P4::JsonNull + +P4::JsonNull - + Node165->Node167 - - - + + + @@ -5543,17 +5689,17 @@ Node168 - -P4::JsonNumber + +P4::JsonNumber - + Node165->Node168 - - - + + + @@ -5561,17 +5707,17 @@ Node171 - -P4::JsonString + +P4::JsonString - + Node165->Node171 - - - + + + @@ -5579,17 +5725,17 @@ Node174 - -P4::JsonVector + +P4::JsonVector - + Node165->Node174 - - - + + + @@ -5597,18 +5743,18 @@ Node216 - -P4::P4Tools::P4Testgen -::TestgenCompilerResult + +P4::P4Tools::P4Testgen +::TestgenCompilerResult - + Node215->Node216 - - - + + + @@ -5616,18 +5762,18 @@ Node217 - -P4::P4Tools::P4Testgen -::Bmv2::BMv2V1ModelCompilerResult + +P4::P4Tools::P4Testgen +::Bmv2::BMv2V1ModelCompilerResult - + Node216->Node217 - - - + + + @@ -5635,18 +5781,18 @@ Node219 - -P4::P4Tools::P4Testgen -::Bmv2::ProtobufIrTest + +P4::P4Tools::P4Testgen +::Bmv2::ProtobufIrTest - + Node218->Node219 - - - + + + @@ -5654,18 +5800,18 @@ Node220 - -P4::P4Tools::P4Testgen -::Bmv2::ProtobufTest + +P4::P4Tools::P4Testgen +::Bmv2::ProtobufTest - + Node218->Node220 - - - + + + @@ -5673,18 +5819,18 @@ Node222 - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelProgramInfo + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelProgramInfo - + Node221->Node222 - - - + + + @@ -5692,18 +5838,18 @@ Node223 - -P4::P4Tools::P4Testgen -::EBPF::EBPFProgramInfo + +P4::P4Tools::P4Testgen +::EBPF::EBPFProgramInfo - + Node221->Node223 - - - + + + @@ -5711,18 +5857,18 @@ Node224 - -P4::P4Tools::P4Testgen -::Pna::SharedPnaProgramInfo + +P4::P4Tools::P4Testgen +::Pna::SharedPnaProgramInfo - + Node221->Node224 - - - + + + @@ -5730,18 +5876,18 @@ Node225 - -P4::P4Tools::P4Testgen -::Pna::PnaDpdkProgramInfo + +P4::P4Tools::P4Testgen +::Pna::PnaDpdkProgramInfo - + Node224->Node225 - - - + + + @@ -5749,18 +5895,18 @@ Node227 - -P4::P4Tools::P4Testgen -::ActionArg + +P4::P4Tools::P4Testgen +::ActionArg - + Node226->Node227 - - - + + + @@ -5768,18 +5914,18 @@ Node228 - -P4::P4Tools::P4Testgen -::ActionCall + +P4::P4Tools::P4Testgen +::ActionCall - + Node226->Node228 - - - + + + @@ -5787,18 +5933,18 @@ Node229 - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelActionProfile + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelActionProfile - + Node226->Node229 - - - + + + @@ -5806,18 +5952,18 @@ Node230 - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelActionSelector + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelActionSelector - + Node226->Node230 - - - + + + @@ -5825,18 +5971,18 @@ Node231 - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelCloneInfo + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelCloneInfo - + Node226->Node231 - - - + + + @@ -5844,18 +5990,18 @@ Node232 - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelCloneSpec + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelCloneSpec - + Node226->Node232 - - - + + + @@ -5863,18 +6009,18 @@ Node233 - -P4::P4Tools::P4Testgen -::Bmv2::IndexExpression + +P4::P4Tools::P4Testgen +::Bmv2::IndexExpression - + Node226->Node233 - - - + + + @@ -5882,18 +6028,18 @@ Node234 - -P4::P4Tools::P4Testgen -::Bmv2::IndexMap + +P4::P4Tools::P4Testgen +::Bmv2::IndexMap - + Node226->Node234 - - - + + + @@ -5901,18 +6047,18 @@ Node237 - -P4::P4Tools::P4Testgen -::Bmv2::MetadataCollection + +P4::P4Tools::P4Testgen +::Bmv2::MetadataCollection - + Node226->Node237 - - - + + + @@ -5920,18 +6066,18 @@ Node238 - -P4::P4Tools::P4Testgen -::Packet + +P4::P4Tools::P4Testgen +::Packet - + Node226->Node238 - - - + + + @@ -5939,18 +6085,18 @@ Node239 - -P4::P4Tools::P4Testgen -::Pna::MetadataCollection + +P4::P4Tools::P4Testgen +::Pna::MetadataCollection - + Node226->Node239 - - - + + + @@ -5958,18 +6104,18 @@ Node240 - -P4::P4Tools::P4Testgen -::Pna::PnaDpdkActionProfile + +P4::P4Tools::P4Testgen +::Pna::PnaDpdkActionProfile - + Node226->Node240 - - - + + + @@ -5977,18 +6123,18 @@ Node241 - -P4::P4Tools::P4Testgen -::Pna::PnaDpdkActionSelector + +P4::P4Tools::P4Testgen +::Pna::PnaDpdkActionSelector - + Node226->Node241 - - - + + + @@ -5996,18 +6142,18 @@ Node242 - -P4::P4Tools::P4Testgen -::Pna::PnaDpdkRegisterCondition + +P4::P4Tools::P4Testgen +::Pna::PnaDpdkRegisterCondition - + Node226->Node242 - - - + + + @@ -6015,18 +6161,18 @@ Node243 - -P4::P4Tools::P4Testgen -::Pna::PnaDpdkRegisterValue + +P4::P4Tools::P4Testgen +::Pna::PnaDpdkRegisterValue - + Node226->Node243 - - - + + + @@ -6034,18 +6180,18 @@ Node244 - -P4::P4Tools::P4Testgen -::TableConfig + +P4::P4Tools::P4Testgen +::TableConfig - + Node226->Node244 - - - + + + @@ -6053,18 +6199,18 @@ Node245 - -P4::P4Tools::P4Testgen -::TableMatch + +P4::P4Tools::P4Testgen +::TableMatch - + Node226->Node245 - - - + + + @@ -6072,18 +6218,18 @@ Node253 - -P4::P4Tools::P4Testgen -::TableRule + +P4::P4Tools::P4Testgen +::TableRule - + Node226->Node253 - - - + + + @@ -6091,18 +6237,18 @@ Node235 - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelMeterValue + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelMeterValue - + Node234->Node235 - - - + + + @@ -6110,18 +6256,18 @@ Node236 - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelRegisterValue + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelRegisterValue - + Node234->Node236 - - - + + + @@ -6129,18 +6275,18 @@ Node246 - -P4::P4Tools::P4Testgen -::Bmv2::Optional + +P4::P4Tools::P4Testgen +::Bmv2::Optional - + Node245->Node246 - - - + + + @@ -6148,18 +6294,18 @@ Node247 - -P4::P4Tools::P4Testgen -::Bmv2::Range + +P4::P4Tools::P4Testgen +::Bmv2::Range - + Node245->Node247 - - - + + + @@ -6167,18 +6313,18 @@ Node248 - -P4::P4Tools::P4Testgen -::Exact + +P4::P4Tools::P4Testgen +::Exact - + Node245->Node248 - - - + + + @@ -6186,17 +6332,17 @@ Node249 - -P4::P4Tools::P4Testgen::LPM + +P4::P4Tools::P4Testgen::LPM - + Node245->Node249 - - - + + + @@ -6204,18 +6350,18 @@ Node250 - -P4::P4Tools::P4Testgen -::Pna::Optional + +P4::P4Tools::P4Testgen +::Pna::Optional - + Node245->Node250 - - - + + + @@ -6223,18 +6369,18 @@ Node251 - -P4::P4Tools::P4Testgen -::Pna::Range + +P4::P4Tools::P4Testgen +::Pna::Range - + Node245->Node251 - - - + + + @@ -6242,18 +6388,18 @@ Node252 - -P4::P4Tools::P4Testgen -::Ternary + +P4::P4Tools::P4Testgen +::Ternary - + Node245->Node252 - - - + + + @@ -6261,18 +6407,18 @@ Node255 - -P4::P4Tools::TraceEvents -::AssignmentStatement + +P4::P4Tools::TraceEvents +::AssignmentStatement - + Node254->Node255 - - - + + + @@ -6280,18 +6426,18 @@ Node256 - -P4::P4Tools::TraceEvents -::Emit + +P4::P4Tools::TraceEvents +::Emit - + Node254->Node256 - - - + + + @@ -6299,18 +6445,18 @@ Node257 - -P4::P4Tools::TraceEvents -::ExtractFailure + +P4::P4Tools::TraceEvents +::ExtractFailure - + Node254->Node257 - - - + + + @@ -6318,18 +6464,18 @@ Node258 - -P4::P4Tools::TraceEvents -::ExtractSuccess + +P4::P4Tools::TraceEvents +::ExtractSuccess - + Node254->Node258 - - - + + + @@ -6337,18 +6483,18 @@ Node259 - -P4::P4Tools::TraceEvents -::Generic + +P4::P4Tools::TraceEvents +::Generic - + Node254->Node259 - - - + + + @@ -6356,18 +6502,18 @@ Node262 - -P4::P4Tools::TraceEvents -::IfStatementCondition + +P4::P4Tools::TraceEvents +::IfStatementCondition - + Node254->Node262 - - - + + + @@ -6375,18 +6521,18 @@ Node263 - -P4::P4Tools::TraceEvents -::MethodCall + +P4::P4Tools::TraceEvents +::MethodCall - + Node254->Node263 - - - + + + @@ -6394,18 +6540,18 @@ Node264 - -P4::P4Tools::TraceEvents -::Packet + +P4::P4Tools::TraceEvents +::Packet - + Node254->Node264 - - - + + + @@ -6413,18 +6559,18 @@ Node265 - -P4::P4Tools::TraceEvents -::ParserStart + +P4::P4Tools::TraceEvents +::ParserStart - + Node254->Node265 - - - + + + @@ -6432,18 +6578,18 @@ Node266 - -P4::P4Tools::TraceEvents -::ParserState + +P4::P4Tools::TraceEvents +::ParserState - + Node254->Node266 - - - + + + @@ -6451,18 +6597,18 @@ Node260 - -P4::P4Tools::TraceEvents -::Expression + +P4::P4Tools::TraceEvents +::Expression - + Node259->Node260 - - - + + + @@ -6470,18 +6616,18 @@ Node261 - -P4::P4Tools::TraceEvents -::GenericDescription + +P4::P4Tools::TraceEvents +::GenericDescription - + Node259->Node261 - - - + + + @@ -6489,17 +6635,17 @@ Node208 - -P4::Util::JsonArray + +P4::Util::JsonArray - + Node209->Node208 - - - + + + @@ -6507,17 +6653,17 @@ Node210 - -P4::Util::JsonObject + +P4::Util::JsonObject - + Node209->Node210 - - - + + + @@ -6525,17 +6671,17 @@ Node212 - -P4::Util::JsonValue + +P4::Util::JsonValue - + Node209->Node212 - - - + + + @@ -6543,17 +6689,17 @@ Node298 - -P4::Util::Namespace + +P4::Util::Namespace - + Node297->Node298 - - - + + + @@ -6561,17 +6707,17 @@ Node300 - -P4::Util::Object + +P4::Util::Object - + Node297->Node300 - - - + + + @@ -6579,17 +6725,17 @@ Node301 - -P4::Util::SimpleType + +P4::Util::SimpleType - + Node297->Node301 - - - + + + @@ -6597,2436 +6743,2445 @@ Node299 - -P4::Util::ContainerType + +P4::Util::ContainerType - -Node298->Node299 - - - - - - - - -Node211 - - -P4::string_map< IJson * > - - - - - -Node211->Node210 - - - - - - - - -Node143 - - -P4::Util::IHasSourceInfo - - - - - -Node143->Node144 - - - - - - - - -Node143->Node105 - - - - - - - - -Node410 - - -P4::Visitor - - - - - -Node410->Node333 - - - - - - - - -Node410->Node543 - - - + +Node298->Node299 + + + - - -Node411 - - -P4::Backtrack + + +Node211 + + +P4::string_map< IJson * > - - -Node410->Node411 - - - + + +Node211->Node210 + + + - - -Node412 - - -P4::OnBacktrack< T > + + +Node143 + + +P4::Util::IHasSourceInfo - - -Node410->Node412 - - - + + +Node143->Node144 + + + - - -Node413 - - -P4::PassManager + + +Node143->Node105 + + + - - -Node410->Node413 - - - + + +Node414 + + +P4::Visitor - - -Node409 - - -P4::ControlFlowVisitor + + +Node414->Node329 + + + - - -Node410->Node409 - - - + + +Node414->Node540 + + + - - -Node520 - - -P4::DynamicVisitor + + +Node415 + + +P4::Backtrack - - -Node410->Node520 - - - + + +Node414->Node415 + + + - - -Node521 - - -P4::InlineDriver< Inline -List, InlineWorkList > + + +Node416 + + +P4::OnBacktrack< T > - - -Node410->Node521 - - - + + +Node414->Node416 + + + - - -Node308 - - -P4::Inspector + + +Node417 + + +P4::PassManager - - -Node410->Node308 - - - + + +Node414->Node417 + + + - - -Node522 - - -P4::Modifier + + +Node405 + + +P4::ControlFlowVisitor - - -Node410->Node522 - - - + + +Node414->Node405 + + + - - -Node536 - - -P4::P4WriteContext + + +Node524 + + +P4::DynamicVisitor - - -Node410->Node536 - - - + + +Node414->Node524 + + + - - -Node336 - - -P4::Transform + + +Node525 + + +P4::InlineDriver< Inline +List, InlineWorkList > - - -Node410->Node336 - - - + + +Node414->Node525 + + + - - -Node546 - - -P4::VisitFunctor + + +Node308 + + +P4::Inspector - - -Node410->Node546 - - - + + +Node414->Node308 + + + - - -Node411->Node412 - - - + + +Node526 + + +P4::Modifier - - -Node411->Node413 - - - + + +Node414->Node526 + + + - - -Node413->Node449 - - - + + +Node407 + + +P4::P4WriteContext - - -Node414 - - -P4::AddMissingIdAnnotations + + +Node414->Node407 + + + - - -Node413->Node414 - - - + + +Node332 + + +P4::Transform - - -Node415 - - -P4::BMV2::MidEnd + + +Node414->Node332 + + + - - -Node413->Node415 - - - + + +Node543 + + +P4::VisitFunctor - - -Node420 - - -P4::BindTypeVariables + + +Node414->Node543 + + + - - -Node413->Node420 - - - + + +Node415->Node416 + + + - - -Node421 - - -P4::CheckConstants + + +Node415->Node417 + + + - - -Node413->Node421 - - - + + +Node417->Node453 + + + - - -Node422 - - -P4::CheckCoreMethods + + +Node418 + + +P4::AddMissingIdAnnotations - - -Node413->Node422 - - - + + +Node417->Node418 + + + - - -Node423 - - -P4::ConstantFolding + + +Node419 + + +P4::BMV2::MidEnd - - -Node413->Node423 - - - + + +Node417->Node419 + + + Node424 - - -P4::ConvertEnums + + +P4::BindTypeVariables - - -Node413->Node424 - - - + + +Node417->Node424 + + + Node425 - - -P4::ConvertErrors + + +P4::CheckConstants - - -Node413->Node425 - - - + + +Node417->Node425 + + + Node426 - - -P4::DPDK::ByteAlignment + + +P4::CheckCoreMethods - - -Node413->Node426 - - - + + +Node417->Node426 + + + Node427 - - -P4::DPDK::CollectLocalStruct -AndFlatten + + +P4::ConstantFolding - - -Node413->Node427 - - - + + +Node417->Node427 + + + Node428 - - -P4::DPDK::CollectProgram -Structure + + +P4::ConvertEnums - - -Node413->Node428 - - - + + +Node417->Node428 + + + Node429 - - -P4::DPDK::ConvertActionSelector -AndProfile + + +P4::ConvertErrors - - -Node413->Node429 - - - + + +Node417->Node429 + + + Node430 - - -P4::DPDK::ConvertInternet -Checksum + + +P4::DPDK::ByteAlignment - - -Node413->Node430 - - - + + +Node417->Node430 + + + Node431 - - -P4::DPDK::ConvertLogical -Expression + + +P4::DPDK::CollectLocalStruct +AndFlatten - - -Node413->Node431 - - - + + +Node417->Node431 + + + Node432 - - -P4::DPDK::ConvertLookahead + + +P4::DPDK::CollectProgram +Structure - - -Node413->Node432 - - - + + +Node417->Node432 + + + Node433 - - -P4::DPDK::DpdkAddPseudoHeader + + +P4::DPDK::ConvertActionSelector +AndProfile - - -Node413->Node433 - - - + + +Node417->Node433 + + + Node434 - - -P4::DPDK::DpdkArchFirst + + +P4::DPDK::ConvertInternet +Checksum - - -Node413->Node434 - - - + + +Node417->Node434 + + + Node435 - - -P4::DPDK::DpdkArchLast + + +P4::DPDK::ConvertLogical +Expression - - -Node413->Node435 - - - + + +Node417->Node435 + + + Node436 - - -P4::DPDK::DpdkHandleIPSec + + +P4::DPDK::ConvertLookahead - - -Node413->Node436 - - - + + +Node417->Node436 + + + Node437 - - -P4::DPDK::DpdkMidEnd + + +P4::DPDK::DpdkAddPseudoHeader - - -Node413->Node437 - - - + + +Node417->Node437 + + + Node438 - - -P4::DPDK::EliminateHeaderCopy + + +P4::DPDK::DpdkArchFirst - - -Node413->Node438 - - - + + +Node417->Node438 + + + Node439 - - -P4::DPDK::EliminateUnused -Action + + +P4::DPDK::DpdkArchLast - - -Node413->Node439 - - - + + +Node417->Node439 + + + Node440 - - -P4::DefaultArguments + + +P4::DPDK::DpdkHandleIPSec - - -Node413->Node440 - - - + + +Node417->Node440 + + + Node441 - - -P4::DefaultValues + + +P4::DPDK::DpdkMidEnd - - -Node413->Node441 - - - + + +Node417->Node441 + + + Node442 - - -P4::EBPF::Lower + + +P4::DPDK::EliminateHeaderCopy - - -Node413->Node442 - - - + + +Node417->Node442 + + + Node443 - - -P4::EliminateInvalidHeaders + + +P4::DPDK::EliminateUnused +Action - - -Node413->Node443 - - - + + +Node417->Node443 + + + Node444 - - -P4::EliminateNewtype + + +P4::DefaultArguments - - -Node413->Node444 - - - + + +Node417->Node444 + + + Node445 - - -P4::EliminateSerEnums + + +P4::DefaultValues - - -Node413->Node445 - - - + + +Node417->Node445 + + + Node446 - - -P4::EliminateSwitch + + +P4::EBPF::Lower - - -Node413->Node446 - - - + + +Node417->Node446 + + + Node447 - - -P4::EliminateTuples + + +P4::EliminateInvalidHeaders - - -Node413->Node447 - - - + + +Node417->Node447 + + + Node448 - - -P4::EliminateTypedef + + +P4::EliminateNewtype - - -Node413->Node448 - - - + + +Node417->Node448 + + + - - -Node452 - - -P4::ExpandEmit + + +Node449 + + +P4::EliminateSerEnums - - -Node413->Node452 - - - + + +Node417->Node449 + + + - - -Node453 - - -P4::ExpandLookahead + + +Node450 + + +P4::EliminateSwitch - - -Node413->Node453 - - - + + +Node417->Node450 + + + - - -Node454 - - -P4::FlattenHeaderUnion + + +Node451 + + +P4::EliminateTuples - - -Node413->Node454 - - - + + +Node417->Node451 + + + - - -Node455 - - -P4::FlattenHeaders + + +Node452 + + +P4::EliminateTypedef - - -Node413->Node455 - - - + + +Node417->Node452 + + + Node456 - - -P4::FlattenInterfaceStructs + + +P4::ExpandEmit - - -Node413->Node456 - - - + + +Node417->Node456 + + + Node457 - - -P4::FlattenLogMsg + + +P4::ExpandLookahead - - -Node413->Node457 - - - + + +Node417->Node457 + + + Node458 - - -P4::GlobalCopyPropagation + + +P4::FlattenHeaderUnion - - -Node413->Node458 - - - + + +Node417->Node458 + + + Node459 - - -P4::HSIndexSimplifier + + +P4::FlattenHeaders - - -Node413->Node459 - - - + + +Node417->Node459 + + + Node460 - - -P4::InlineActions + + +P4::FlattenInterfaceStructs - - -Node413->Node460 - - - + + +Node417->Node460 + + + Node461 - - -P4::InlineFunctions + + +P4::FlattenLogMsg - - -Node413->Node461 - - - + + +Node417->Node461 + + + Node462 - - -P4::InlinePass + + +P4::GlobalCopyPropagation - - -Node413->Node462 - - - + + +Node417->Node462 + + + Node463 - - -P4::LocalCopyPropagation + + +P4::HSIndexSimplifier - - -Node413->Node463 - - - + + +Node417->Node463 + + + Node464 - - -P4::LocalizeAllActions + + +P4::InlineActions - - -Node413->Node464 - - - + + +Node417->Node464 + + + Node465 - - -P4::MoveActionsToTables + + +P4::InlineFunctions - - -Node413->Node465 - - - + + +Node417->Node465 + + + Node466 - - -P4::NestedStructs + + +P4::InlinePass - - -Node413->Node466 - - - + + +Node417->Node466 + + + Node467 - - -P4::OrderArguments + + +P4::LocalCopyPropagation - - -Node413->Node467 - - - + + +Node417->Node467 + + + Node468 - - -P4::P4Test::MidEnd + + +P4::LocalizeAllActions - - -Node413->Node468 - - - + + +Node417->Node468 + + + Node469 - - -P4::P4Tools::MidEnd + + +P4::MoveActionsToTables - - -Node413->Node469 - - - + + +Node417->Node469 + + + Node470 - - -P4::P4V1::Converter + + +P4::NestedStructs - - -Node413->Node470 - - - + + +Node417->Node470 + + + Node471 - - -P4::P4V1::FixMultiEntryPoint + + +P4::OrderArguments - - -Node413->Node471 - - - + + +Node417->Node471 + + + Node472 - - -P4::ParseAnnotationBodies + + +P4::P4Test::MidEnd - - -Node413->Node472 - - - + + +Node417->Node472 + + + Node473 - - -P4::ParserRewriter + + +P4::P4Tools::MidEnd - - -Node413->Node473 - - - + + +Node417->Node473 + + + Node474 - - -P4::ParsersUnroll + + +P4::P4V1::Converter - - -Node413->Node474 - - - + + +Node417->Node474 + + + Node475 - - -P4::PassIf + + +P4::P4V1::FixMultiEntryPoint - - -Node413->Node475 - - - + + +Node417->Node475 + + + Node476 - - -P4::PassRepeatUntil + + +P4::ParseAnnotationBodies - - -Node413->Node476 - - - + + +Node417->Node476 + + + Node477 - - -P4::PassRepeated + + +P4::ParserRewriter - - -Node413->Node477 - - - + + +Node417->Node477 + + + - - -Node487 - - -P4::RemoveActionParameters + + +Node478 + + +P4::ParsersUnroll - - -Node413->Node487 - - - + + +Node417->Node478 + + + - - -Node488 - - -P4::RemoveAssertAssume + + +Node479 + + +P4::PassIf - - -Node413->Node488 - - - + + +Node417->Node479 + + + - - -Node489 - - -P4::RemoveDontcareArgs + + +Node480 + + +P4::PassRepeatUntil - - -Node413->Node489 - - - + + +Node417->Node480 + + + - - -Node490 - - -P4::RemoveExits + + +Node481 + + +P4::PassRepeated - - -Node413->Node490 - - - + + +Node417->Node481 + + + Node491 - - -P4::RemoveLeftSlices + + +P4::RemoveActionParameters - - -Node413->Node491 - - - + + +Node417->Node491 + + + Node492 - - -P4::RemoveMiss + + +P4::RemoveAssertAssume - - -Node413->Node492 - - - + + +Node417->Node492 + + + Node493 - - -P4::RemoveParserIfs + + +P4::RemoveDontcareArgs - - -Node413->Node493 - - - + + +Node417->Node493 + + + Node494 - - -P4::RemoveRedundantParsers + + +P4::RemoveExits - - -Node413->Node494 - - - + + +Node417->Node494 + + + Node495 - - -P4::RemoveReturns + + +P4::RemoveLeftSlices - - -Node413->Node495 - - - + + +Node417->Node495 + + + Node496 - - -P4::RemoveSelectBooleans + + +P4::RemoveMiss - - -Node413->Node496 - - - + + +Node417->Node496 + + + Node497 - - -P4::ResetHeaders + + +P4::RemoveParserIfs - - -Node413->Node497 - - - + + +Node417->Node497 + + + Node498 - - -P4::SetHeaders + + +P4::RemoveRedundantParsers - - -Node413->Node498 - - - + + +Node417->Node498 + + + Node499 - - -P4::SimplifyComparisons + + +P4::RemoveReturns - - -Node413->Node499 - - - + + +Node417->Node499 + + + Node500 - - -P4::SimplifyDefUse + + +P4::RemoveSelectBooleans - - -Node413->Node500 - - - + + +Node417->Node500 + + + Node501 - - -P4::SimplifyKey + + +P4::ResetHeaders - - -Node413->Node501 - - - + + +Node417->Node501 + + + Node502 - - -P4::SimplifySelectCases + + +P4::SetHeaders - - -Node413->Node502 - - - + + +Node417->Node502 + + + Node503 - - -P4::SimplifySelectList + + +P4::SimplifyComparisons - - -Node413->Node503 - - - + + +Node417->Node503 + + + Node504 - - -P4::SimplifySwitch + + +P4::SimplifyDefUse - - -Node413->Node504 - - - + + +Node417->Node504 + + + Node505 - - -P4::SingleArgumentSelect + + +P4::SimplifyKey - - -Node413->Node505 - - - + + +Node417->Node505 + + + Node506 - - -P4::SpecializeGenericFunctions + + +P4::SimplifySelectCases - - -Node413->Node506 - - - + + +Node417->Node506 + + + Node507 - - -P4::StaticAssert + + +P4::SimplifySelectList - - -Node413->Node507 - - - + + +Node417->Node507 + + + Node508 - - -P4::StrengthReduction + + +P4::SimplifySwitch - - -Node413->Node508 - - - + + +Node417->Node508 + + + Node509 - - -P4::StructInitializers + + +P4::SingleArgumentSelect - - -Node413->Node509 - - - + + +Node417->Node509 + + + Node510 - - -P4::SynthesizeActions + + +P4::SpecializeGenericFunctions - - -Node413->Node510 - - - + + +Node417->Node510 + + + Node511 - - -P4::TC::Backend + + +P4::StaticAssert - - -Node413->Node511 - - - + + +Node417->Node511 + + + Node512 - - -P4::TableHit + + +P4::StrengthReduction - - -Node413->Node512 - - - + + +Node417->Node512 + + + Node513 - - -P4::TableKeyNames + + +P4::StructInitializers - - -Node413->Node513 - - - + + +Node417->Node513 + + + Node514 - - -P4::TypeCheck + + +P4::SynthesizeActions - - -Node413->Node514 - - - + + +Node417->Node514 + + + Node515 - - -P4::TypeChecking + + +P4::TC::Backend - - -Node413->Node515 - - - + + +Node417->Node515 + + + Node516 - - -P4::UniqueNames + + +P4::TableHit - - -Node413->Node516 - - - + + +Node417->Node516 + + + Node517 - - -P4::UniqueParameters + + +P4::TableKeyNames - - -Node413->Node517 - - - + + +Node417->Node517 + + + Node518 - - -P4::UselessCasts + + +P4::TypeCheck - - -Node413->Node518 - - - + + +Node417->Node518 + + + Node519 - - -P4::graphs::MidEnd + + +P4::TypeChecking - - -Node413->Node519 - - - + + +Node417->Node519 + + + - - -Node416 - - -P4::BMV2::PortableMidEnd + + +Node520 + + +P4::UniqueNames - - -Node415->Node416 - - - + + +Node417->Node520 + + + - - -Node419 - - -P4::BMV2::SimpleSwitchMidEnd + + +Node521 + + +P4::UniqueParameters - - -Node415->Node419 - - - + + +Node417->Node521 + + + - - -Node417 - - -P4::BMV2::PnaNicMidEnd + + +Node522 + + +P4::UselessCasts - - -Node416->Node417 - - - + + +Node417->Node522 + + + - - -Node418 - - -P4::BMV2::PsaSwitchMidEnd + + +Node523 + + +P4::graphs::MidEnd - - -Node416->Node418 - - - + + +Node417->Node523 + + + - - -Node478 - - -P4::CopyStructures + + +Node420 + + +P4::BMV2::PortableMidEnd - - -Node477->Node478 - - - + + +Node419->Node420 + + + - - -Node479 - - -P4::DPDK::DpdkAsmOptimization + + +Node423 + + +P4::BMV2::SimpleSwitchMidEnd - - -Node477->Node479 - - - + + +Node419->Node423 + + + - - -Node480 - - -P4::Inline + + +Node421 + + +P4::BMV2::PnaNicMidEnd - - -Node477->Node480 - - - + + +Node420->Node421 + + + - - -Node481 - - -P4::RemoveAllUnusedDeclarations + + +Node422 + + +P4::BMV2::PsaSwitchMidEnd - - -Node477->Node481 - - - + + +Node420->Node422 + + + Node482 - - -P4::RemoveParserControlFlow + + +P4::CopyStructures - - -Node477->Node482 - - - + + +Node481->Node482 + + + Node483 - - -P4::SideEffectOrdering + + +P4::DPDK::DpdkAsmOptimization - - -Node477->Node483 - - - + + +Node481->Node483 + + + Node484 - - -P4::SimplifyControlFlow + + +P4::Inline + + + + + +Node481->Node484 + + + + + + + + +Node485 + + +P4::RemoveAllUnusedDeclarations + + + + + +Node481->Node485 + + + + + + + + +Node486 + + +P4::RemoveParserControlFlow + + + + + +Node481->Node486 + + + + + + + + +Node487 + + +P4::SideEffectOrdering + + + + + +Node481->Node487 + + + + + + + + +Node488 + + +P4::SimplifyControlFlow + + + + + +Node481->Node488 + + + + + + + + +Node489 + + +P4::SpecializeAll + + + + + +Node481->Node489 + + + - - -Node477->Node484 - - - + + +Node490 + + +P4::SpecializeGenericTypes - - -Node485 - - -P4::SpecializeAll + + +Node481->Node490 + + + - - -Node477->Node485 - - - + + +Node405->Node406 + + + - - -Node486 - - -P4::SpecializeGenericTypes + + +Node405->Node404 + + + - - -Node477->Node486 - - - + + +Node308->Node327 + + + - - -Node409->Node332 - - - + + +Node308->Node406 + + + - - -Node408 - - -P4::DoLocalCopyPropagation + + +Node308->Node646 + + + - - -Node409->Node408 - - - + + +Node308->Node647 + + + - - -Node308->Node332 - - - + + +Node308->Node648 + + + - + Node308->Node649 - - - + + + - + Node308->Node650 - - - + + + - + Node308->Node651 - - - + + + - + Node308->Node652 - - - + + + - + Node308->Node653 - - - + + + - + Node308->Node654 - - - + + + - + Node308->Node655 - - - + + + - + Node308->Node656 - - - + + + - + Node308->Node657 - - - + + + - + Node308->Node658 - - - + + + - + Node308->Node659 - - - + + + - - -Node308->Node660 - - - + + +Node308->Node665 + + + - - -Node308->Node661 - - - + + +Node308->Node666 + + + - - -Node308->Node662 - - - + + +Node308->Node667 + + + - + Node308->Node668 - - - + + + - + Node308->Node669 - - - - - - - - -Node308->Node670 - - - - - - - - -Node308->Node671 - - - + + + - - -Node308->Node672 - - - + + +Node308->Node541 + + + - - -Node308->Node544 - - - + + +Node308->Node670 + + + - - -Node308->Node451 - - - + + +Node308->Node455 + + + - + Node308->Node307 - - - + + + - - -Node308->Node664 - - - + + +Node308->Node661 + + + - - -Node308->Node666 - - - + + +Node308->Node663 + + + - - -Node308->Node759 - - - + + +Node308->Node760 + + + @@ -9034,17 +9189,17 @@ Node309 - -P4::AnalyzeParser + +P4::AnalyzeParser - + Node308->Node309 - - - + + + @@ -9052,17 +9207,17 @@ Node310 - -P4::ApplyOptionsPragmas + +P4::ApplyOptionsPragmas - + Node308->Node310 - - - + + + @@ -9070,17 +9225,17 @@ Node311 - -P4::BMV2::ActionConverter + +P4::BMV2::ActionConverter - + Node308->Node311 - - - + + + @@ -9088,17 +9243,17 @@ Node312 - -P4::BMV2::CheckUnsupported + +P4::BMV2::CheckUnsupported - + Node308->Node312 - - - + + + @@ -9106,18 +9261,18 @@ Node313 - -P4::BMV2::ControlConverter -< arch > + +P4::BMV2::ControlConverter +< arch > - + Node308->Node313 - - - + + + @@ -9125,17 +9280,17 @@ Node314 - -P4::BMV2::ConvertGlobals + +P4::BMV2::ConvertGlobals - + Node308->Node314 - - - + + + @@ -9143,17 +9298,17 @@ Node315 - -P4::BMV2::ConvertPnaToJson + +P4::BMV2::ConvertPnaToJson - + Node308->Node315 - - - + + + @@ -9161,17 +9316,17 @@ Node316 - -P4::BMV2::ConvertPsaToJson + +P4::BMV2::ConvertPsaToJson - + Node308->Node316 - - - + + + @@ -9179,17 +9334,17 @@ Node317 - -P4::BMV2::DeparserConverter + +P4::BMV2::DeparserConverter - + Node308->Node317 - - - + + + @@ -9197,17 +9352,17 @@ Node318 - -P4::BMV2::ExpressionConverter + +P4::BMV2::ExpressionConverter - + Node308->Node318 - - - + + + @@ -9215,17 +9370,17 @@ Node322 - -P4::BMV2::HeaderConverter + +P4::BMV2::HeaderConverter - + Node308->Node322 - - - + + + @@ -9233,17 +9388,17 @@ Node323 - -P4::BMV2::ParseV1Architecture + +P4::BMV2::ParseV1Architecture - + Node308->Node323 - - - + + + @@ -9251,17 +9406,17 @@ Node324 - -P4::BMV2::ParserConverter + +P4::BMV2::ParserConverter - + Node308->Node324 - - - + + + @@ -9269,18 +9424,18 @@ Node325 - -P4::BMV2::SharedActionSelector -Check< arch > + +P4::BMV2::SharedActionSelector +Check< arch > - + Node308->Node325 - - - + + + @@ -9288,1935 +9443,1898 @@ Node326 - -P4::BuildResourceMap + +P4::BuildResourceMap - + Node308->Node326 - - - - - - - - -Node327 - - -P4::CheckExternInvocation -Common - - - - - -Node308->Node327 - - - - - - - - -Node329 - - -P4::CheckNamedArgs - - - - - -Node308->Node329 - - - + + + - - -Node330 - - -P4::ClearTypeMap + + +Node671 + + +P4::CheckNamedArgs - - -Node308->Node330 - - - + + +Node308->Node671 + + + - - -Node331 - - -P4::CompileTimeOperations + + +Node672 + + +P4::ClearTypeMap - - -Node308->Node331 - - - + + +Node308->Node672 + + + Node673 - - -P4::ContainsType + + +P4::CompileTimeOperations - + Node308->Node673 - - - + + + - - -Node648 - - -P4::ControlFlowVisitor -::SetupJoinPoints + + +Node674 + + +P4::ContainsType - - -Node308->Node648 - - - + + +Node308->Node674 + + + - - -Node674 - - -P4::ControlPlaneAPI -::TypeSpecConverter + + +Node645 + + +P4::ControlFlowVisitor +::SetupJoinPoints - - -Node308->Node674 - - - + + +Node308->Node645 + + + Node675 - - -P4::Coverage::CollectNodes + + +P4::ControlPlaneAPI +::TypeSpecConverter - + Node308->Node675 - - - + + + Node676 - - -P4::DPDK::CheckExternInvocation + + +P4::Coverage::CollectNodes - + Node308->Node676 - - - + + + Node677 - - -P4::DPDK::CollectActionUses + + +P4::DPDK::CheckExternInvocation - + Node308->Node677 - - - + + + Node678 - - -P4::DPDK::CollectAddOnMiss -Table + + +P4::DPDK::CollectActionUses - + Node308->Node678 - - - + + + Node679 - - -P4::DPDK::CollectDirectCounter -Meter + + +P4::DPDK::CollectAddOnMiss +Table - + Node308->Node679 - - - + + + Node680 - - -P4::DPDK::CollectErrors + + +P4::DPDK::CollectDirectCounter +Meter - + Node308->Node680 - - - + + + Node681 - - -P4::DPDK::CollectExternDeclaration + + +P4::DPDK::CollectErrors - + Node308->Node681 - - - + + + Node682 - - -P4::DPDK::CollectIPSecInfo + + +P4::DPDK::CollectExternDeclaration - + Node308->Node682 - - - + + + Node683 - - -P4::DPDK::CollectInternet -ChecksumInstance + + +P4::DPDK::CollectIPSecInfo - + Node308->Node683 - - - + + + Node684 - - -P4::DPDK::CollectMetadata -HeaderInfo + + +P4::DPDK::CollectInternet +ChecksumInstance - + Node308->Node684 - - - + + + Node685 - - -P4::DPDK::CollectTableInfo + + +P4::DPDK::CollectMetadata +HeaderInfo - + Node308->Node685 - - - + + + Node686 - - -P4::DPDK::CollectUseDefInfo + + +P4::DPDK::CollectTableInfo - + Node308->Node686 - - - + + + Node687 - - -P4::DPDK::CollectUsedMetadata -Field + + +P4::DPDK::CollectUseDefInfo - + Node308->Node687 - - - + + + Node688 - - -P4::DPDK::ConvertLookahead -::Collect + + +P4::DPDK::CollectUsedMetadata +Field - + Node308->Node688 - - - + + + Node689 - - -P4::DPDK::ConvertStatement -ToDpdk + + +P4::DPDK::ConvertLookahead +::Collect - + Node308->Node689 - - - + + + Node690 - - -P4::DPDK::ConvertToDpdkControl + + +P4::DPDK::ConvertStatement +ToDpdk - + Node308->Node690 - - - + + + Node691 - - -P4::DPDK::ConvertToDpdkParser + + +P4::DPDK::ConvertToDpdkControl - + Node308->Node691 - - - + + + Node692 - - -P4::DPDK::ConvertToString + + +P4::DPDK::ConvertToDpdkParser - + Node308->Node692 - - - + + + Node693 - - -P4::DPDK::DefActionValue + + +P4::DPDK::ConvertToString - + Node308->Node693 - - - + + + Node694 - - -P4::DPDK::DpdkContextGenerator + + +P4::DPDK::DefActionValue - + Node308->Node694 - - - + + + Node695 - - -P4::DPDK::EmitDpdkTableConfig + + +P4::DPDK::DpdkContextGenerator - + Node308->Node695 - - - + + + Node696 - - -P4::DPDK::ExpressionUnroll + + +P4::DPDK::EmitDpdkTableConfig - + Node308->Node696 - - - + + + Node697 - - -P4::DPDK::HaveNonHeaderChecksumArgs + + +P4::DPDK::ExpressionUnroll - + Node308->Node697 - - - + + + Node698 - - -P4::DPDK::HaveNonHeaderLarge -OperandAssignment + + +P4::DPDK::HaveNonHeaderChecksumArgs - + Node308->Node698 - - - + + + Node699 - - -P4::DPDK::IsDirectionMetadataUsed + + +P4::DPDK::HaveNonHeaderLarge +OperandAssignment - + Node308->Node699 - - - + + + Node700 - - -P4::DPDK::LogicalExpression -Unroll + + +P4::DPDK::IsDirectionMetadataUsed - + Node308->Node700 - - - + + + Node701 - - -P4::DPDK::TypeWidthValidator + + +P4::DPDK::LogicalExpression +Unroll - + Node308->Node701 - - - + + + Node702 - - -P4::DPDK::ValidateAddOnMiss -Externs + + +P4::DPDK::TypeWidthValidator - + Node308->Node702 - - - + + + Node703 - - -P4::DPDK::ValidateDirect -CounterMeter + + +P4::DPDK::ValidateAddOnMiss +Externs - + Node308->Node703 - - - + + + Node704 - - -P4::DPDK::ValidateOperandSize + + +P4::DPDK::ValidateDirect +CounterMeter - + Node308->Node704 - - - + + + Node705 - - -P4::DiscoverInlining + + +P4::DPDK::ValidateOperandSize - + Node308->Node705 - - - + + + Node706 - - -P4::DiscoverStructure + + +P4::DiscoverInlining - + Node308->Node706 - - - + + + Node707 - - -P4::EBPF::CodeGenInspector + + +P4::DiscoverStructure - + Node308->Node707 - - - + + + - - -Node728 - - -P4::EBPF::ConvertToEBPFControlPSA + + +Node708 + + +P4::EBPF::CodeGenInspector - - -Node308->Node728 - - - + + +Node308->Node708 + + + Node729 - - -P4::EBPF::ConvertToEBPFDeparserPSA + + +P4::EBPF::ConvertToEBPFControlPSA - + Node308->Node729 - - - + + + Node730 - - -P4::EBPF::ConvertToEBPFParserPSA + + +P4::EBPF::ConvertToEBPFDeparserPSA - + Node308->Node730 - - - + + + Node731 - - -P4::EBPF::ConvertToEbpfPipeline + + +P4::EBPF::ConvertToEBPFParserPSA - + Node308->Node731 - - - + + + Node732 - - -P4::EBPF::EBPFTablePSATernary -TableMaskGenerator + + +P4::EBPF::ConvertToEbpfPipeline - + Node308->Node732 - - - + + + Node733 - - -P4::EBPF::EBPFTablePsaProperty -Visitor + + +P4::EBPF::EBPFTablePSATernary +TableMaskGenerator - + Node308->Node733 - - - + + + - - -Node739 - - -P4::EBPF::PSAErrorCodesGen + + +Node734 + + +P4::EBPF::EBPFTablePsaProperty +Visitor - - -Node308->Node739 - - - + + +Node308->Node734 + + + Node740 - - -P4::Explain + + +P4::EBPF::PSAErrorCodesGen - + Node308->Node740 - - - + + + Node741 - - -P4::ExpressionEvaluator + + +P4::Explain - + Node308->Node741 - - - + + + Node742 - - -P4::FindHeaderTypesToReplace + + +P4::ExpressionEvaluator - + Node308->Node742 - - - + + + Node743 - - -P4::FindParameters + + +P4::FindHeaderTypesToReplace - + Node308->Node743 - - - + + + Node744 - - -P4::FindRedundantParsers + + +P4::FindParameters - + Node308->Node744 - - - + + + Node745 - - -P4::FindSymbols + + +P4::FindRedundantParsers - + Node308->Node745 - - - + + + Node746 - - -P4::FindTypeSpecializations + + +P4::FindSymbols - + Node308->Node746 - - - + + + Node747 - - -P4::FindTypesInLogMsgInvocation -ToReplace + + +P4::FindTypeSpecializations - + Node308->Node747 - - - + + + Node748 - - -P4::FindTypesToReplace + + +P4::FindTypesInLogMsgInvocation +ToReplace - + Node308->Node748 - - - + + + Node749 - - -P4::FindVariableValues + + +P4::FindTypesToReplace - + Node308->Node749 - - - + + + Node750 - - -P4::HSIndexFinder + + +P4::FindVariableValues - + Node308->Node750 - - - + + + Node751 - - -P4::HasExits + + +P4::HSIndexFinder - + Node308->Node751 - - - + + + Node752 - - -P4::IfInParser + + +P4::HasExits - + Node308->Node752 - - - + + + Node753 - - -P4::InspectDpdkProgram + + +P4::IfInParser - + Node308->Node753 - - - + + + Node754 - - -P4::InspectPortableProgram + + +P4::InspectDpdkProgram - + Node308->Node754 - - - + + + - - -Node757 - - -P4::KeyNameGenerator + + +Node755 + + +P4::InspectPortableProgram - - -Node308->Node757 - - - + + +Node308->Node755 + + + Node758 - - -P4::MidEndLast + + +P4::KeyNameGenerator - + Node308->Node758 - - - + + + - - -Node761 - - -P4::P4Tools::P4Testgen -::AbstractStepper + + +Node759 + + +P4::MidEndLast - - -Node308->Node761 - - - + + +Node308->Node759 + + + - - -Node772 - - -P4::P4Tools::P4Testgen -::Bmv2::MapDirectExterns + + +Node762 + + +P4::P4Tools::P4Testgen +::AbstractStepper - - -Node308->Node772 - - - + + +Node308->Node762 + + + Node773 - - -P4::P4Tools::P4Testgen -::Bmv2::RefersToParser + + +P4::P4Tools::P4Testgen +::Bmv2::MapDirectExterns - + Node308->Node773 - - - + + + Node774 - - -P4::P4Tools::P4Testgen -::ConcolicResolver + + +P4::P4Tools::P4Testgen +::Bmv2::RefersToParser - + Node308->Node774 - - - + + + Node775 - - -P4::P4Tools::P4Testgen -::CoverableNodesScanner + + +P4::P4Tools::P4Testgen +::ConcolicResolver - + Node308->Node775 - - - + + + Node776 - - -P4::P4Tools::Test:: -NodeFinder< T > + + +P4::P4Tools::P4Testgen +::CoverableNodesScanner - + Node308->Node776 - - - + + + Node777 - - -P4::P4Tools::Z3Translator + + +P4::P4Tools::Test:: +NodeFinder< T > - + Node308->Node777 - - - + + + Node778 - - -P4::P4V1::CheckIfMultiEntry -Point + + +P4::P4Tools::Z3Translator - + Node308->Node778 - - - + + + Node779 - - -P4::P4V1::ComputeCallGraph + + +P4::P4V1::CheckIfMultiEntry +Point - + Node308->Node779 - - - + + + Node780 - - -P4::P4V1::ComputeTableCall -Graph + + +P4::P4V1::ComputeCallGraph - + Node308->Node780 - - - + + + Node781 - - -P4::P4V1::DetectDuplicates + + +P4::P4V1::ComputeTableCall +Graph - + Node308->Node781 - - - + + + Node782 - - -P4::P4V1::DiscoverStructure + + +P4::P4V1::DetectDuplicates - + Node308->Node782 - - - + + + Node783 - - -P4::P4V1::FindRecirculated + + +P4::P4V1::DiscoverStructure - + Node308->Node783 - - - + + + Node784 - - -P4::P4V1::GetV1ModelVersion + + +P4::P4V1::FindRecirculated - + Node308->Node784 - - - + + + Node785 - - -P4::ParseDpdkArchitecture + + +P4::P4V1::GetV1ModelVersion - + Node308->Node785 - - - + + + Node786 - - -P4::ParsePortableArchitecture + + +P4::ParseDpdkArchitecture - + Node308->Node786 - - - + + + - - -Node789 - - -P4::RemoveModifiedValues + + +Node787 + + +P4::ParsePortableArchitecture - - -Node308->Node789 - - - + + +Node308->Node787 + + + Node790 - - -P4::SideEffects + + +P4::RemoveModifiedValues - + Node308->Node790 - - - + + + Node791 - - -P4::TC::ConvertToBackendIR + + +P4::SideEffects - + Node308->Node791 - - - + + + Node792 - - -P4::TC::ConvertToEBPFControlPNA + + +P4::TC::ConvertToBackendIR - + Node308->Node792 - - - + + + Node793 - - -P4::TC::ConvertToEBPFDeparserPNA + + +P4::TC::ConvertToEBPFControlPNA - + Node308->Node793 - - - + + + Node794 - - -P4::TC::ConvertToEBPFParserPNA + + +P4::TC::ConvertToEBPFDeparserPNA - + Node308->Node794 - - - + + + Node795 - - -P4::TC::ConvertToEbpfPipelineTC + + +P4::TC::ConvertToEBPFParserPNA - + Node308->Node795 - - - + + + Node796 - - -P4::TC::InspectPnaProgram + + +P4::TC::ConvertToEbpfPipelineTC - + Node308->Node796 - - - + + + Node797 - - -P4::TC::IntrospectionGenerator + + +P4::TC::InspectPnaProgram - + Node308->Node797 - - - + + + Node798 - - -P4::TC::PNAErrorCodesGen + + +P4::TC::IntrospectionGenerator - + Node308->Node798 - - - + + + Node799 - - -P4::TC::ParsePnaArchitecture + + +P4::TC::PNAErrorCodesGen - + Node308->Node799 - - - + + + Node800 - - -P4::TablesInActions + + +P4::TC::ParsePnaArchitecture - + Node308->Node800 - - - + + + Node801 - - -P4::TablesInKeys + + +P4::TablesInActions - + Node308->Node801 - - - + + + Node802 - - -P4::TypeCheck::InferAction -ArgsBottomUp + + +P4::TablesInKeys - + Node308->Node802 - - - + + + Node803 - - -P4::TypeCheck::InferAction -ArgsTopDown + + +P4::TypeCheck::InferAction +ArgsBottomUp - + Node308->Node803 - - - + + + Node804 - - -P4::TypeOccursVisitor + + +P4::TypeCheck::InferAction +ArgsTopDown - + Node308->Node804 - - - + + + Node805 - - -P4::UBPF::UBPFModel -::getUBPFModelVersion + + +P4::TypeOccursVisitor - + Node308->Node805 - - - + + + Node806 - - -P4::ValidateMatchAnnotations + + +P4::UBPF::UBPFModel +::getUBPFModelVersion - + Node308->Node806 - - - + + + Node807 - - -P4::ValidateParsedProgram + + +P4::ValidateMatchAnnotations - + Node308->Node807 - - - + + + Node808 - - -P4::ValidateStringAnnotations + + +P4::ValidateParsedProgram - + Node308->Node808 - - - + + + Node809 - - -P4::ValidateTableProperties + + +P4::ValidateStringAnnotations - + Node308->Node809 - - - + + + Node810 - - -P4::ValidateValueSets + + +P4::ValidateTableProperties - + Node308->Node810 - - - + + + Node811 - - -P4::exprUses + + +P4::ValidateValueSets - + Node308->Node811 - - - + + + Node812 - - -P4::graphs::Graphs + + +P4::exprUses - + Node308->Node812 - - - + + + - - -Node816 - - -P4::hasSideEffects + + +Node813 + + +P4::graphs::Graphs - - -Node308->Node816 - - - + + +Node308->Node813 + + + @@ -11224,18 +11342,18 @@ Node319 - -P4::BMV2::PnaNicExpression -Converter + +P4::BMV2::PnaNicExpression +Converter - + Node318->Node319 - - - + + + @@ -11243,18 +11361,18 @@ Node320 - -P4::BMV2::PsaSwitchExpression -Converter + +P4::BMV2::PsaSwitchExpression +Converter - + Node318->Node320 - - - + + + @@ -11262,4099 +11380,4035 @@ Node321 - -P4::BMV2::SimpleSwitchExpression -Converter + +P4::BMV2::SimpleSwitchExpression +Converter - + Node318->Node321 - - - - - - - - -Node328 - - -P4::DPDK::CheckPNAExtern -Invocation - - - - - -Node327->Node328 - - - - - - - - -Node648->Node647 - - - - - - - - -Node708 - - -P4::EBPF::ActionTranslation -Visitor + + + - - -Node707->Node708 - - - + + +Node645->Node644 + + + - - -Node711 - - -P4::EBPF::ControlBodyTranslator + + +Node709 + + +P4::EBPF::ActionTranslation +Visitor - - -Node707->Node711 - - - + + +Node708->Node709 + + + - - -Node720 - - -P4::EBPF::EBPFDigestPSAValue -Visitor + + +Node712 + + +P4::EBPF::ControlBodyTranslator - - -Node707->Node720 - - - + + +Node708->Node712 + + + Node721 - - -P4::EBPF::EBPFTablePSAInitializer -CodeGen + + +P4::EBPF::EBPFDigestPSAValue +Visitor - - -Node707->Node721 - - - + + +Node708->Node721 + + + - - -Node723 - - -P4::EBPF::StateTranslation -Visitor + + +Node722 + + +P4::EBPF::EBPFTablePSAInitializer +CodeGen - - -Node707->Node723 - - - + + +Node708->Node722 + + + - - -Node726 - - -P4::UBPF::OutHeaderSize + + +Node724 + + +P4::EBPF::StateTranslation +Visitor - - -Node707->Node726 - - - + + +Node708->Node724 + + + Node727 - - -P4::UBPF::UBPFDeparserTranslation -Visitor + + +P4::UBPF::OutHeaderSize - - -Node707->Node727 - - - + + +Node708->Node727 + + + - - -Node709 - - -P4::EBPF::ActionTranslation -VisitorPSA + + +Node728 + + +P4::UBPF::UBPFDeparserTranslation +Visitor - - -Node708->Node709 - - - + + +Node708->Node728 + + + - - -Node718 - - -P4::TC::ActionTranslation -VisitorPNA + + +Node710 + + +P4::EBPF::ActionTranslation +VisitorPSA - - -Node708->Node718 - - - + + +Node709->Node710 + + + - - -Node710 - - -P4::EBPF::ControlBodyTranslatorPSA + + +Node719 + + +P4::TC::ActionTranslation +VisitorPNA - - -Node711->Node710 - - - + + +Node709->Node719 + + + - - -Node712 - - -P4::EBPF::DeparserBodyTranslator + + +Node711 + + +P4::EBPF::ControlBodyTranslatorPSA - - -Node711->Node712 - - - + + +Node712->Node711 + + + - - -Node714 - - -P4::EBPF::DeparserPrepare -BufferTranslator + + +Node713 + + +P4::EBPF::DeparserBodyTranslator - - -Node711->Node714 - - - + + +Node712->Node713 + + + - - -Node717 - - -P4::TC::ControlBodyTranslatorPNA + + +Node715 + + +P4::EBPF::DeparserPrepare +BufferTranslator - - -Node711->Node717 - - - + + +Node712->Node715 + + + - - -Node719 - - -P4::UBPF::UBPFControlBody -Translator + + +Node718 + + +P4::TC::ControlBodyTranslatorPNA - - -Node711->Node719 - - - + + +Node712->Node718 + + + - - -Node710->Node709 - - - + + +Node720 + + +P4::UBPF::UBPFControlBody +Translator - - -Node713 - - -P4::EBPF::DeparserBodyTranslatorPSA + + +Node712->Node720 + + + - - -Node712->Node713 - - - + + +Node711->Node710 + + + - - -Node715 - - -P4::EBPF::DeparserHdrEmit -Translator + + +Node714 + + +P4::EBPF::DeparserBodyTranslatorPSA - - -Node714->Node715 - - - + + +Node713->Node714 + + + Node716 - - -P4::TC::DeparserHdrEmitTranslatorPNA + + +P4::EBPF::DeparserHdrEmit +Translator - - -Node714->Node716 - - - + + +Node715->Node716 + + + - - -Node717->Node718 - - - + + +Node717 + + +P4::TC::DeparserHdrEmitTranslatorPNA - - -Node722 - - -P4::EBPF::EBPFTablePSATernary -KeyMaskGenerator + + +Node715->Node717 + + + - - -Node721->Node722 - - - + + +Node718->Node719 + + + - - -Node724 - - -P4::EBPF::PsaStateTranslation -Visitor + + +Node723 + + +P4::EBPF::EBPFTablePSATernary +KeyMaskGenerator - - -Node723->Node724 - - - + + +Node722->Node723 + + + Node725 - - -P4::TC::PnaStateTranslation -Visitor + + +P4::EBPF::PsaStateTranslation +Visitor - + Node724->Node725 - - - + + + - - -Node734 - - -P4::EBPF::EBPFTablePSADirect -CounterPropertyVisitor + + +Node726 + + +P4::TC::PnaStateTranslation +Visitor - - -Node733->Node734 - - - + + +Node725->Node726 + + + Node735 - - -P4::EBPF::EBPFTablePSADirect -MeterPropertyVisitor + + +P4::EBPF::EBPFTablePSADirect +CounterPropertyVisitor - - -Node733->Node735 - - - + + +Node734->Node735 + + + Node736 - - -P4::EBPF::EBPFTablePSAImplementation -PropertyVisitor + + +P4::EBPF::EBPFTablePSADirect +MeterPropertyVisitor - - -Node733->Node736 - - - + + +Node734->Node736 + + + Node737 - - -P4::TC::EBPFTablePNADirect -CounterPropertyVisitor + + +P4::EBPF::EBPFTablePSAImplementation +PropertyVisitor - - -Node733->Node737 - - - + + +Node734->Node737 + + + Node738 - - -P4::TC::EBPFTablePNADirect -MeterPropertyVisitor + + +P4::TC::EBPFTablePNADirect +CounterPropertyVisitor - - -Node733->Node738 - - - + + +Node734->Node738 + + + - - -Node755 - - -P4::BMV2::InspectPnaProgram + + +Node739 + + +P4::TC::EBPFTablePNADirect +MeterPropertyVisitor - - -Node754->Node755 - - - + + +Node734->Node739 + + + Node756 - - -P4::InspectPsaProgram + + +P4::BMV2::InspectPnaProgram - - -Node754->Node756 - - - + + +Node755->Node756 + + + - - -Node762 - - -P4::P4Tools::P4Testgen -::CmdStepper + + +Node757 + + +P4::InspectPsaProgram - - -Node761->Node762 - - - + + +Node755->Node757 + + + - - -Node767 - - -P4::P4Tools::P4Testgen -::ExprStepper + + +Node763 + + +P4::P4Tools::P4Testgen +::CmdStepper - - -Node761->Node767 - - - + + +Node762->Node763 + + + - - -Node763 - - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelCmdStepper + + +Node768 + + +P4::P4Tools::P4Testgen +::ExprStepper - - -Node762->Node763 - - - + + +Node762->Node768 + + + Node764 - - -P4::P4Tools::P4Testgen -::EBPF::EBPFCmdStepper + + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelCmdStepper - - -Node762->Node764 - - - + + +Node763->Node764 + + + Node765 - - -P4::P4Tools::P4Testgen -::Pna::SharedPnaCmdStepper + + +P4::P4Tools::P4Testgen +::EBPF::EBPFCmdStepper - - -Node762->Node765 - - - + + +Node763->Node765 + + + Node766 - - -P4::P4Tools::P4Testgen -::Pna::PnaDpdkCmdStepper + + +P4::P4Tools::P4Testgen +::Pna::SharedPnaCmdStepper - - -Node765->Node766 - - - + + +Node763->Node766 + + + - - -Node768 - - -P4::P4Tools::P4Testgen -::Bmv2::Bmv2V1ModelExprStepper + + +Node767 + + +P4::P4Tools::P4Testgen +::Pna::PnaDpdkCmdStepper - - -Node767->Node768 - - - + + +Node766->Node767 + + + Node769 - - -P4::P4Tools::P4Testgen -::EBPF::EBPFExprStepper + + +P4::P4Tools::P4Testgen +::Bmv2::Bmv2V1ModelExprStepper - - -Node767->Node769 - - - + + +Node768->Node769 + + + Node770 - - -P4::P4Tools::P4Testgen -::Pna::SharedPnaExprStepper + + +P4::P4Tools::P4Testgen +::EBPF::EBPFExprStepper - - -Node767->Node770 - - - + + +Node768->Node770 + + + Node771 - - -P4::P4Tools::P4Testgen -::Pna::PnaDpdkExprStepper + + +P4::P4Tools::P4Testgen +::Pna::SharedPnaExprStepper - - -Node770->Node771 - - - + + +Node768->Node771 + + + - - -Node787 - - -P4::BMV2::ParsePnaArchitecture + + +Node772 + + +P4::P4Tools::P4Testgen +::Pna::PnaDpdkExprStepper - - -Node786->Node787 - - - + + +Node771->Node772 + + + Node788 - - -P4::ParsePsaArchitecture + + +P4::BMV2::ParsePnaArchitecture - - -Node786->Node788 - - - + + +Node787->Node788 + + + - - -Node813 - - -P4::graphs::ControlGraphs + + +Node789 + + +P4::ParsePsaArchitecture - - -Node812->Node813 - - - + + +Node787->Node789 + + + Node814 - - -P4::graphs::Graph_visitor + + +P4::graphs::ControlGraphs - - -Node812->Node814 - - - + + +Node813->Node814 + + + Node815 - - -P4::graphs::ParserGraphs + + +P4::graphs::Graph_visitor - - -Node812->Node815 - - - + + +Node813->Node815 + + + - - -Node523 - - -P4::CheckHeaderTypes + + +Node816 + + +P4::graphs::ParserGraphs - - -Node522->Node523 - - - + + +Node813->Node816 + + + - - -Node524 - - -P4::CheckTableSize + + +Node527 + + +P4::CheckHeaderTypes - - -Node522->Node524 - - - + + +Node526->Node527 + + + - - -Node525 - - -P4::DoSingleArgumentSelect + + +Node528 + + +P4::CheckTableSize - - -Node522->Node525 - - - + + +Node526->Node528 + + + - - -Node526 - - -P4::HeaderTypeMaxLengthCalculator + + +Node529 + + +P4::DoSingleArgumentSelect - - -Node522->Node526 - - - + + +Node526->Node529 + + + - - -Node527 - - -P4::MoveToElseAfterBranch + + +Node530 + + +P4::HeaderTypeMaxLengthCalculator - - -Node522->Node527 - - - + + +Node526->Node530 + + + - - -Node528 - - -P4::ParseAnnotations + + +Node531 + + +P4::MoveToElseAfterBranch - - -Node522->Node528 - - - + + +Node526->Node531 + + + Node532 - - -P4::SwitchAddDefault + + +P4::ParseAnnotations + + + + + +Node526->Node532 + + + + + + + + +Node536 + + +P4::SwitchAddDefault + + + + + +Node526->Node536 + + + + + + + + +Node537 + + +P4::TypeCheck::AssignAction +ArgTypes + + + + + +Node526->Node537 + + + + + + + + +Node538 + + +P4::TypeCheck::InferExpressions +BottomUp + + + + + +Node526->Node538 + + + - - -Node522->Node532 - - - + + +Node539 + + +P4::TypeCheck::InferExpressions +TopDown + + + + + +Node526->Node539 + + + Node533 - - -P4::TypeCheck::AssignAction -ArgTypes + + +P4::BMV2::ParseAnnotations - - -Node522->Node533 - - - + + +Node532->Node533 + + + Node534 - - -P4::TypeCheck::InferExpressions -BottomUp + + +P4::ControlPlaneAPI +::ParseP4RuntimeAnnotations - - -Node522->Node534 - - - + + +Node532->Node534 + + + Node535 - - -P4::TypeCheck::InferExpressions -TopDown + + +P4::TC::ParseTCAnnotations - - -Node522->Node535 - - - + + +Node532->Node535 + + + - - -Node529 - - -P4::BMV2::ParseAnnotations + + +Node407->Node406 + + + - - -Node528->Node529 - - - + + +Node407->Node404 + + + - - -Node530 - - -P4::ControlPlaneAPI -::ParseP4RuntimeAnnotations + + +Node407->Node408 + + + - - -Node528->Node530 - - - + + +Node407->Node412 + + + - - -Node531 - - -P4::TC::ParseTCAnnotations + + +Node409 + + +P4::ReplaceHeaders - - -Node528->Node531 - - - + + +Node407->Node409 + + + - - -Node536->Node332 - - - + + +Node410 + + +P4::ReplaceIndexRefs - - -Node536->Node537 - - - + + +Node407->Node410 + + + - - -Node536->Node408 - - - + + +Node411 + + +P4::ReplaceLogMsg - - -Node538 - - -P4::ReplaceHeaders + + +Node407->Node411 + + + - - -Node536->Node538 - - - + + +Node413 + + +P4::TypeCheck::MakeImplicit +CastsExplicit - - -Node539 - - -P4::ReplaceIndexRefs + + +Node407->Node413 + + + - - -Node536->Node539 - - - + + +Node332->Node330 + + + - - -Node540 - - -P4::ReplaceLogMsg + + +Node332->Node333 + + + - - -Node536->Node540 - - - + + +Node332->Node335 + + + - - -Node541 - - -P4::ReplaceStructs + + +Node332->Node337 + + + - - -Node536->Node541 - - - + + +Node332->Node338 + + + - - -Node542 - - -P4::TypeCheck::MakeImplicit -CastsExplicit + + +Node332->Node347 + + + + + + + + +Node332->Node351 + + + + + + + + +Node332->Node390 + + + - - -Node536->Node542 - - - + + +Node332->Node394 + + + - - -Node336->Node334 - - - + + +Node332->Node399 + + + - - -Node336->Node337 - - - + + +Node332->Node400 + + + - - -Node336->Node339 - - - + + +Node332->Node404 + + + - - -Node336->Node341 - - - + + +Node332->Node547 + + + - - -Node336->Node342 - - - + + +Node332->Node549 + + + - - -Node336->Node351 - - - + + +Node332->Node551 + + + - - -Node336->Node355 - - - + + +Node332->Node558 + + + - - -Node336->Node394 - - - + + +Node332->Node561 + + + - - -Node336->Node398 - - - + + +Node332->Node408 + + + - - -Node336->Node403 - - - + + +Node332->Node566 + + + - - -Node336->Node404 - - - + + +Node332->Node569 + + + - - -Node336->Node550 - - - + + +Node332->Node571 + + + - - -Node336->Node552 - - - + + +Node332->Node576 + + + - - -Node336->Node554 - - - + + +Node332->Node584 + + + - - -Node336->Node561 - - - + + +Node332->Node585 + + + - - -Node336->Node564 - - - + + +Node332->Node587 + + + - - -Node336->Node537 - - - + + +Node332->Node591 + + + - - -Node336->Node569 - - - + + +Node332->Node618 + + + - - -Node336->Node572 - - - + + +Node332->Node622 + + + - - -Node336->Node574 - - - + + +Node332->Node627 + + + - - -Node336->Node579 - - - + + +Node332->Node412 + + + - - -Node336->Node587 - - - + + +Node332->Node542 + + + - - -Node336->Node588 - - - + + +Node332->Node643 + + + - - -Node336->Node590 - - - + + +Node332->Node409 + + + - - -Node336->Node594 - - - + + +Node332->Node410 + + + - - -Node336->Node630 - - - + + +Node332->Node411 + + + - - -Node336->Node545 - - - + + +Node332->Node413 + + + - - -Node336->Node646 - - - + + +Node339 + + +P4::ApplyTypesToExpressions + + + + + +Node332->Node339 + + + - - -Node336->Node408 - - - + + +Node340 + + +P4::BMV2::ArithmeticFixup - - -Node336->Node538 - - - + + +Node332->Node340 + + + - - -Node336->Node539 - - - + + +Node341 + + +P4::BMV2::LowerExpressions - - -Node336->Node540 - - - + + +Node332->Node341 + + + - - -Node336->Node541 - - - + + +Node342 + + +P4::BMV2::RenameUserMetadata - - -Node336->Node542 - - - + + +Node332->Node342 + + + Node343 - - -P4::ApplyTypesToExpressions + + +P4::CastBooleanTableKeys - - -Node336->Node343 - - - + + +Node332->Node343 + + + Node344 - - -P4::BMV2::ArithmeticFixup + + +P4::CloneConstants - - -Node336->Node344 - - - + + +Node332->Node344 + + + Node345 - - -P4::BMV2::LowerExpressions + + +P4::CloneExpressions - - -Node336->Node345 - - - + + +Node332->Node345 + + + Node346 - - -P4::BMV2::RenameUserMetadata - - - - - -Node336->Node346 - - - - - - - - -Node347 - - -P4::CastBooleanTableKeys + + +P4::CloneVariableDeclarations - - -Node336->Node347 - - - + + +Node332->Node346 + + + Node348 - - -P4::CloneConstants + + +P4::CopySrcInfo - - -Node336->Node348 - - - + + +Node332->Node348 + + + Node349 - - -P4::CloneExpressions + + +P4::CreateBuiltins - - -Node336->Node349 - - - + + +Node332->Node349 + + + Node350 - - -P4::CloneVariableDeclarations + + +P4::CreateSpecializedTypes - - -Node336->Node350 - - - + + +Node332->Node350 + + + Node352 - - -P4::CopySrcInfo + + +P4::DPDK::AddFieldsToPseudo +Header - - -Node336->Node352 - - - + + +Node332->Node352 + + + Node353 - - -P4::CreateBuiltins + + +P4::DPDK::AlignHdrMetaField - - -Node336->Node353 - - - + + +Node332->Node353 + + + Node354 - - -P4::CreateSpecializedTypes + + +P4::DPDK::BreakLogicalExpression +Parenthesis + + + + + +Node332->Node354 + + + + + + + + +Node355 + + +P4::DPDK::CollectLocalVariables - - -Node336->Node354 - - - + + +Node332->Node355 + + + Node356 - - -P4::DPDK::AddFieldsToPseudo -Header + + +P4::DPDK::CollectStructLocal +Variables - - -Node336->Node356 - - - + + +Node332->Node356 + + + Node357 - - -P4::DPDK::AlignHdrMetaField + + +P4::DPDK::ConvertBinaryOperation +To2Params - - -Node336->Node357 - - - + + +Node332->Node357 + + + Node358 - - -P4::DPDK::BreakLogicalExpression -Parenthesis + + +P4::DPDK::ConvertLookahead +::Replace - - -Node336->Node358 - - - + + +Node332->Node358 + + + Node359 - - -P4::DPDK::CollectLocalVariables + + +P4::DPDK::ConvertToDpdkArch - - -Node336->Node359 - - - + + +Node332->Node359 + + + Node360 - - -P4::DPDK::CollectStructLocal -Variables + + +P4::DPDK::ConvertToDpdkProgram - - -Node336->Node360 - - - + + +Node332->Node360 + + + Node361 - - -P4::DPDK::ConvertBinaryOperation -To2Params + + +P4::DPDK::CopyPropagation +AndElimination - - -Node336->Node361 - - - + + +Node332->Node361 + + + Node362 - - -P4::DPDK::ConvertLookahead -::Replace + + +P4::DPDK::DirectionToRegRead - - -Node336->Node362 - - - + + +Node332->Node362 + + + Node363 - - -P4::DPDK::ConvertToDpdkArch + + +P4::DPDK::DismantleMuxExpressions - - -Node336->Node363 - - - + + +Node332->Node363 + + + Node364 - - -P4::DPDK::ConvertToDpdkProgram + + +P4::DPDK::DpdkAddPseudoHeaderDecl - - -Node336->Node364 - - - + + +Node332->Node364 + + + Node365 - - -P4::DPDK::CopyPropagation -AndElimination + + +P4::DPDK::ElimHeaderCopy - - -Node336->Node365 - - - + + +Node332->Node365 + + + Node366 - - -P4::DPDK::DirectionToRegRead + + +P4::DPDK::ElimUnusedActions - - -Node336->Node366 - - - + + +Node332->Node366 + + + Node367 - - -P4::DPDK::DismantleMuxExpressions + + +P4::DPDK::IfStatementUnroll - - -Node336->Node367 - - - + + +Node332->Node367 + + + Node368 - - -P4::DPDK::DpdkAddPseudoHeaderDecl + + +P4::DPDK::InjectFixedMetadata +Field - - -Node336->Node368 - - - + + +Node332->Node368 + + + Node369 - - -P4::DPDK::ElimHeaderCopy + + +P4::DPDK::InjectInternet +ChecksumIntermediateValue - - -Node336->Node369 - - - + + +Node332->Node369 + + + Node370 - - -P4::DPDK::ElimUnusedActions + + +P4::DPDK::InjectJumboStruct - - -Node336->Node370 - - - + + +Node332->Node370 + + + Node371 - - -P4::DPDK::IfStatementUnroll + + +P4::DPDK::InsertReqDeclFor +IPSec - - -Node336->Node371 - - - + + +Node332->Node371 + + + Node372 - - -P4::DPDK::InjectFixedMetadata -Field + + +P4::DPDK::MoveCollectedStruct +LocalVariableToMetadata - - -Node336->Node372 - - - + + +Node332->Node372 + + + Node373 - - -P4::DPDK::InjectInternet -ChecksumIntermediateValue + + +P4::DPDK::MoveNonHeaderFields +ToPseudoHeader - - -Node336->Node373 - - - + + +Node332->Node373 + + + Node374 - - -P4::DPDK::InjectJumboStruct + + +P4::DPDK::PrependPDotToActionArgs - - -Node336->Node374 - - - + + +Node332->Node374 + + + Node375 - - -P4::DPDK::InsertReqDeclFor -IPSec + + +P4::DPDK::PrependPassRecircId - - -Node336->Node375 - - - + + +Node332->Node375 + + + Node376 - - -P4::DPDK::MoveCollectedStruct -LocalVariableToMetadata + + +P4::DPDK::RemoveConsecutive +JmpAndLabel - - -Node336->Node376 - - - + + +Node332->Node376 + + + Node377 - - -P4::DPDK::MoveNonHeaderFields -ToPseudoHeader + + +P4::DPDK::RemoveLabelAfter +Label - - -Node336->Node377 - - - + + +Node332->Node377 + + + Node378 - - -P4::DPDK::PrependPDotToActionArgs + + +P4::DPDK::RemoveRedundant +Label - - -Node336->Node378 - - - + + +Node332->Node378 + + + Node379 - - -P4::DPDK::PrependPassRecircId + + +P4::DPDK::RemoveUnusedMetadata +Fields - - -Node336->Node379 - - - + + +Node332->Node379 + + + Node380 - - -P4::DPDK::RemoveConsecutive -JmpAndLabel + + +P4::DPDK::ReplaceHdrMeta +Field - - -Node336->Node380 - - - + + +Node332->Node380 + + + Node381 - - -P4::DPDK::RemoveLabelAfter -Label + + +P4::DPDK::ShortenTokenLength - - -Node336->Node381 - - - + + +Node332->Node381 + + + Node382 - - -P4::DPDK::RemoveRedundant -Label + + +P4::DPDK::SplitP4TableCommon - - -Node336->Node382 - - - + + +Node332->Node382 + + + - - -Node383 - - -P4::DPDK::RemoveUnusedMetadata -Fields + + +Node385 + + +P4::DPDK::StatementUnroll - - -Node336->Node383 - - - + + +Node332->Node385 + + + - - -Node384 - - -P4::DPDK::ReplaceHdrMeta -Field + + +Node386 + + +P4::DPDK::SwapSimpleExpression +ToFrontOfLogicalExpression - - -Node336->Node384 - - - + + +Node332->Node386 + + + - - -Node385 - - -P4::DPDK::ShortenTokenLength + + +Node387 + + +P4::DPDK::ThreadJumps - - -Node336->Node385 - - - + + +Node332->Node387 + + + - - -Node386 - - -P4::DPDK::SplitP4TableCommon + + +Node388 + + +P4::DPDK::UpdateActionFor +Switch - - -Node336->Node386 - - - + + +Node332->Node388 + + + Node389 - - -P4::DPDK::StatementUnroll - - - - - -Node336->Node389 - - - - - - - - -Node390 - - -P4::DPDK::SwapSimpleExpression -ToFrontOfLogicalExpression + + +P4::DoBindTypeVariables - - -Node336->Node390 - - - + + +Node332->Node389 + + + Node391 - - -P4::DPDK::ThreadJumps + + +P4::DoConvertEnums - - -Node336->Node391 - - - + + +Node332->Node391 + + + Node392 - - -P4::DPDK::UpdateActionFor -Switch + + +P4::DoConvertErrors - - -Node336->Node392 - - - + + +Node332->Node392 + + + Node393 - - -P4::DoBindTypeVariables + + +P4::DoCopyStructures - - -Node336->Node393 - - - + + +Node332->Node393 + + + Node395 - - -P4::DoConvertEnums + + +P4::DoDefaultValues - - -Node336->Node395 - - - + + +Node332->Node395 + + + Node396 - - -P4::DoConvertErrors - - - - - -Node336->Node396 - - - - - - - - -Node397 - - -P4::DoCopyStructures + + +P4::DoEliminateInvalidHeaders - - -Node336->Node397 - - - + + +Node332->Node396 + + + - - - - -Node399 - - -P4::DoDefaultValues + + + + +Node397 + + +P4::DoEliminateSerEnums - - -Node336->Node399 - - - + + +Node332->Node397 + + + - - -Node400 - - -P4::DoEliminateInvalidHeaders + + +Node398 + + +P4::DoEliminateSwitch - - -Node336->Node400 - - - + + +Node332->Node398 + + + Node401 - - -P4::DoEliminateSerEnums + + +P4::DoFlattenHeaderUnion - - -Node336->Node401 - - - + + +Node332->Node401 + + + - - -Node402 - - -P4::DoEliminateSwitch + + +Node403 + + +P4::DoGlobalCopyPropagation - - -Node336->Node402 - - - + + +Node332->Node403 + + + - - -Node405 - - -P4::DoFlattenHeaderUnion + + +Node544 + + +P4::DoLocalCopyPropagation +::ElimDead - - -Node336->Node405 - - - + + +Node332->Node544 + + + - - -Node407 - - -P4::DoGlobalCopyPropagation + + +Node545 + + +P4::DoLocalCopyPropagation +::RewriteTableKeys - - -Node336->Node407 - - - + + +Node332->Node545 + + + - - -Node547 - - -P4::DoLocalCopyPropagation -::ElimDead + + +Node546 + + +P4::DoMoveActionsToTables - - -Node336->Node547 - - - + + +Node332->Node546 + + + Node548 - - -P4::DoLocalCopyPropagation -::RewriteTableKeys + + +P4::DoRemoveActionParameters - - -Node336->Node548 - - - + + +Node332->Node548 + + + - - -Node549 - - -P4::DoMoveActionsToTables + + +Node550 + + +P4::DoRemoveLeftSlices - - -Node336->Node549 - - - + + +Node332->Node550 + + + - - -Node551 - - -P4::DoRemoveActionParameters + + +Node552 + + +P4::DoRemoveParserControlFlow - - -Node336->Node551 - - - + + +Node332->Node552 + + + Node553 - - -P4::DoRemoveLeftSlices + + +P4::DoRemoveReturns - - -Node336->Node553 - - - + + +Node332->Node553 + + + Node555 - - -P4::DoRemoveParserControlFlow + + +P4::DoRemoveSelectBooleans - - -Node336->Node555 - - - + + +Node332->Node555 + + + Node556 - - -P4::DoRemoveReturns + + +P4::DoReplaceNewtype - - -Node336->Node556 - - - + + +Node332->Node556 + + + - - -Node558 - - -P4::DoRemoveSelectBooleans + + +Node557 + + +P4::DoReplaceTuples - - -Node336->Node558 - - - + + +Node332->Node557 + + + Node559 - - -P4::DoReplaceNewtype + + +P4::DoResetHeaders - - -Node336->Node559 - - - + + +Node332->Node559 + + + Node560 - - -P4::DoReplaceTuples + + +P4::DoSetHeaders - - -Node336->Node560 - - - + + +Node332->Node560 + + + Node562 - - -P4::DoResetHeaders + + +P4::DoSimplifyDefUse - - -Node336->Node562 - - - + + +Node332->Node562 + + + Node563 - - -P4::DoSetHeaders + + +P4::DoSimplifyKey - - -Node336->Node563 - - - + + +Node332->Node563 + + + - - -Node565 - - -P4::DoSimplifyDefUse + + +Node564 + + +P4::DoSimplifySelectCases - - -Node336->Node565 - - - + + +Node332->Node564 + + + - - -Node566 - - -P4::DoSimplifyKey + + +Node565 + + +P4::DoSimplifySwitch - - -Node336->Node566 - - - + + +Node332->Node565 + + + Node567 - - -P4::DoSimplifySelectCases + + +P4::DoStrengthReduction - - -Node336->Node567 - - - + + +Node332->Node567 + + + Node568 - - -P4::DoSimplifySwitch + + +P4::DoSynthesizeActions - - -Node336->Node568 - - - + + +Node332->Node568 + + + Node570 - - -P4::DoStrengthReduction + + +P4::DoTableKeyNames - - -Node336->Node570 - - - + + +Node332->Node570 + + + - - -Node571 - - -P4::DoSynthesizeActions + + +Node572 + + +P4::DuplicateActions - - -Node336->Node571 - - - + + +Node332->Node572 + + + Node573 - - -P4::DoTableKeyNames + + +P4::EBPF::ConvertToEbpfPSA - - -Node336->Node573 - - - + + +Node332->Node573 + + + - - -Node575 - - -P4::DuplicateActions + + +Node574 + + +P4::EBPF::LowerExpressions - - -Node336->Node575 - - - + + +Node332->Node574 + + + - - -Node576 - - -P4::EBPF::ConvertToEbpfPSA + + +Node575 + + +P4::EliminateSubparserCalls - - -Node336->Node576 - - - + + +Node332->Node575 + + + Node577 - - -P4::EBPF::LowerExpressions + + +P4::FillEnumMap - - -Node336->Node577 - - - + + +Node332->Node577 + + + Node578 - - -P4::EliminateSubparserCalls + + +P4::HSIndexContretizer + + + + + +Node332->Node578 + + + + + + + + +Node579 + + +P4::HSIndexTransform - - -Node336->Node578 - - - + + +Node332->Node579 + + + Node580 - - -P4::FillEnumMap + + +P4::HandleNoMatch - - -Node336->Node580 - - - + + +Node332->Node580 + + + Node581 - - -P4::HSIndexContretizer + + +P4::HandleValidityHeader +Union - - -Node336->Node581 - - - + + +Node332->Node581 + + + Node582 - - -P4::HSIndexTransform + + +P4::HierarchicalNames - - -Node336->Node582 - - - + + +Node332->Node582 + + + Node583 - - -P4::HandleNoMatch - - - - - -Node336->Node583 - - - - - - - - -Node584 - - -P4::HandleValidityHeader -Union + + +P4::InlineControlFlow - - -Node336->Node584 - - - + + +Node332->Node583 + + + - - -Node585 - - -P4::HierarchicalNames + + +Node588 + + +P4::MissingIdAssigner - - -Node336->Node585 - - - + + +Node332->Node588 + + + - - -Node586 - - -P4::InlineControlFlow + + +Node589 + + +P4::MoveConstructors - - -Node336->Node586 - - - + + +Node332->Node589 + + + - - -Node591 - - -P4::MissingIdAssigner + + +Node590 + + +P4::MoveDeclarations - - -Node336->Node591 - - - + + +Node332->Node590 + + + Node592 - - -P4::MoveConstructors + + +P4::NameGateways - - -Node336->Node592 - - - + + +Node332->Node592 + + + Node593 - - -P4::MoveDeclarations + + +P4::P4Tools::ConvertStructExpr + + + + + +Node332->Node593 + + + + + + + + +Node594 + + +P4::P4Tools::ConvertVarbits - - -Node336->Node593 - - - + + +Node332->Node594 + + + Node595 - - -P4::NameGateways + + +P4::P4Tools::HSIndexToMember - - -Node336->Node595 - - - + + +Node332->Node595 + + + Node596 - - -P4::P4Tools::ConvertStructExpr + + +P4::P4Tools::MaskBuilder - - -Node336->Node596 - - - + + +Node332->Node596 + + + Node597 - - -P4::P4Tools::ConvertVarbits + + +P4::P4Tools::P4Testgen +::Bmv2::AssertsParser - - -Node336->Node597 - - - + + +Node332->Node597 + + + Node598 - - -P4::P4Tools::HSIndexToMember + + +P4::P4Tools::P4Testgen +::Bmv2::PropagateP4RuntimeTranslation - - -Node336->Node598 - - - + + +Node332->Node598 + + + Node599 - - -P4::P4Tools::MaskBuilder + + +P4::P4Tools::P4Testgen +::VariableSubstitution - - -Node336->Node599 - - - + + +Node332->Node599 + + + Node600 - - -P4::P4Tools::P4Testgen -::Bmv2::AssertsParser + + +P4::P4Tools::TaintPropagator - - -Node336->Node600 - - - + + +Node332->Node600 + + + Node601 - - -P4::P4Tools::P4Testgen -::Bmv2::PropagateP4RuntimeTranslation + + +P4::P4Tools::Test:: +ArithmTest::SaturationTransform - - -Node336->Node601 - - - + + +Node332->Node601 + + + Node602 - - -P4::P4Tools::P4Testgen -::VariableSubstitution + + +P4::P4Tools::Test:: +SymbolicConverter - - -Node336->Node602 - - - + + +Node332->Node602 + + + Node603 - - -P4::P4Tools::TaintPropagator + + +P4::P4V1::AdjustLengths - - -Node336->Node603 - - - + + +Node332->Node603 + + + Node604 - - -P4::P4Tools::Test:: -ArithmTest::SaturationTransform + + +P4::P4V1::ExpressionConverter - - -Node336->Node604 - - - + + +Node332->Node604 + + + - - -Node605 - - -P4::P4Tools::Test:: -SymbolicConverter + + +Node607 + + +P4::P4V1::FixExtracts - - -Node336->Node605 - - - + + +Node332->Node607 + + + - - -Node606 - - -P4::P4V1::AdjustLengths + + +Node608 + + +P4::P4V1::InsertCompiler +GeneratedStartState - - -Node336->Node606 - - - + + +Node332->Node608 + + + - - -Node607 - - -P4::P4V1::ExpressionConverter + + +Node609 + + +P4::P4V1::MoveIntrinsicMetadata - - -Node336->Node607 - - - + + +Node332->Node609 + + + Node610 - - -P4::P4V1::FixExtracts + + +P4::P4V1::Rewriter - - -Node336->Node610 - - - + + +Node332->Node610 + + + Node611 - - -P4::P4V1::InsertCompiler -GeneratedStartState + + +P4::P4_14::InlineActions - - -Node336->Node611 - - - + + +Node332->Node611 + + + Node612 - - -P4::P4V1::MoveIntrinsicMetadata + + +P4::ParserStructureImpl +::ParserStateRewriter - - -Node336->Node612 - - - + + +Node332->Node612 + + + Node613 - - -P4::P4V1::Rewriter + + +P4::Predication - - -Node336->Node613 - - - + + +Node332->Node613 + + + Node614 - - -P4::P4_14::InlineActions + + +P4::Reassociation - - -Node336->Node614 - - - + + +Node332->Node614 + + + Node615 - - -P4::ParserStructureImpl -::ParserStateRewriter + + +P4::RemoveAliases - - -Node336->Node615 - - - + + +Node332->Node615 + + + Node616 - - -P4::Predication + + +P4::RemoveBreakContinue - - -Node336->Node616 - - - + + +Node332->Node616 + + + Node617 - - -P4::Reassociation - - - - - -Node336->Node617 - - - - - - - - -Node618 - - -P4::RemoveAliases - - - - - -Node336->Node618 - - - - - - - - -Node619 - - -P4::RemoveBreakContinue + + +P4::RemoveComplexComparisons - - -Node336->Node619 - - - + + +Node332->Node617 + + + Node620 - - -P4::RemoveComplexComparisons + + +P4::RemoveGenericTypes - - -Node336->Node620 - - - + + +Node332->Node620 + + + Node621 - - -P4::RemoveComplexExpressions + + +P4::RemoveHidden - - -Node336->Node621 - - - + + +Node332->Node621 + + + Node623 - - -P4::RemoveGenericTypes + + +P4::RemoveUnusedActionParameters - - -Node336->Node623 - - - + + +Node332->Node623 + + + Node624 - - -P4::RemoveHidden + + +P4::RemoveUnusedDeclarations - - -Node336->Node624 - - - + + +Node332->Node624 + + + Node625 - - -P4::RemoveNestedStructs + + +P4::RemoveUnusedHUDeclarations - - -Node336->Node625 - - - + + +Node332->Node625 + + + Node626 - - -P4::RemoveUnusedActionParameters - - - - - -Node336->Node626 - - - - - - - - -Node627 - - -P4::RemoveUnusedDeclarations + + +P4::RemoveUselessCasts - - -Node336->Node627 - - - + + +Node332->Node626 + + + Node628 - - -P4::RemoveUnusedHUDeclarations + + +P4::ReplaceSelectRange - - -Node336->Node628 - - - + + +Node332->Node628 + + + Node629 - - -P4::RemoveUselessCasts + + +P4::ReplaceTypeUses + + + + + +Node332->Node629 + + + - - -Node336->Node629 - - - + + +Node630 + + +P4::RewriteAllParsers + + + + + +Node332->Node630 + + + Node631 - - -P4::ReplaceSelectRange + + +P4::SimplifyBitwise - - -Node336->Node631 - - - + + +Node332->Node631 + + + Node632 - - -P4::ReplaceTypeUses + + +P4::SimplifyParsers - - -Node336->Node632 - - - + + +Node332->Node632 + + + Node633 - - -P4::RewriteAllParsers + + +P4::Specialize - - -Node336->Node633 - - - + + +Node332->Node633 + + + Node634 - - -P4::SimplifyBitwise + + +P4::SpecializeFunctions - - -Node336->Node634 - - - + + +Node332->Node634 + + + Node635 - - -P4::SimplifyParsers + + +P4::SubstituteStructures - - -Node336->Node635 - - - + + +Node332->Node635 + + + Node636 - - -P4::Specialize + + +P4::TC::ConvertToEbpfPNA - - -Node336->Node636 - - - + + +Node332->Node636 + + + Node637 - - -P4::SpecializeFunctions + + +P4::TagGlobalActions - - -Node336->Node637 - - - + + +Node332->Node637 + + + Node638 - - -P4::SubstituteStructures + + +P4::TypeCheck::AssignInitial +Types - - -Node336->Node638 - - - + + +Node332->Node638 + + + Node639 - - -P4::TC::ConvertToEbpfPNA - - - - - -Node336->Node639 - - - - - - - - -Node640 - - -P4::TagGlobalActions - - - - - -Node336->Node640 - - - - - - - - -Node641 - - -P4::TypeCheck::AssignInitial -Types + + +P4::TypeVariableSubstitution +Visitor - - -Node336->Node641 - - - + + +Node332->Node639 + + + Node642 - - -P4::TypeVariableSubstitution -Visitor - - - - - -Node336->Node642 - - - - - - - - -Node645 - - -P4::UnnestSelectList - - - - - -Node336->Node645 - - - - - - - - -Node387 - - -P4::DPDK::SplitActionProfile -Table + + +P4::UnnestSelectList - - -Node386->Node387 - - - + + +Node332->Node642 + + + - - -Node388 - - -P4::DPDK::SplitActionSelector -Table + + +Node383 + + +P4::DPDK::SplitActionProfile +Table - - -Node386->Node388 - - - + + +Node382->Node383 + + + - - -Node406 - - -P4::DoFlattenHeaderUnion -Stack + + +Node384 + + +P4::DPDK::SplitActionSelector +Table - - -Node405->Node406 - - - + + +Node382->Node384 + + + - - -Node556->Node557 - - - + + +Node402 + + +P4::DoFlattenHeaderUnion +Stack - - -Node608 - - -P4::P4V1::StatementConverter + + +Node401->Node402 + + + - - -Node607->Node608 - - - + + +Node553->Node554 + + + - - -Node609 - - -P4::P4V1::TypeConverter + + +Node605 + + +P4::P4V1::StatementConverter - - -Node607->Node609 - - - + + +Node604->Node605 + + + - - -Node622 - - -P4::BMV2::RemoveComplexExpressions + + +Node606 + + +P4::P4V1::TypeConverter - - -Node621->Node622 - - - + + +Node604->Node606 + + + - - -Node642->Node643 - - - + + +Node639->Node640 + + + - - -Node644 - - -P4::TypeSubstitutionVisitor + + +Node641 + + +P4::TypeSubstitutionVisitor - - -Node642->Node644 - - - + + +Node639->Node641 + + + @@ -15362,9 +15416,9 @@ Node173 - -std::basic_string< - Char > + +std::basic_string< + Char > @@ -15372,26 +15426,26 @@ Node172 - -std::string + +std::string - + Node173->Node172 - - - + + + - + Node172->Node171 - - - + + + @@ -15399,26 +15453,26 @@ Node175 - -std::vector< T > + +std::vector< T > - + Node175->Node174 - - - + + + - + Node175->Node208 - - - + + + @@ -15426,18 +15480,18 @@ Node176 - -P4::safe_vector< const - IR::Type * > + +P4::safe_vector< const + IR::Type * > - + Node175->Node176 - - - + + + @@ -15445,18 +15499,18 @@ Node177 - -P4::safe_vector< const - IR::Argument * > + +P4::safe_vector< const + IR::Argument * > - + Node175->Node177 - - - + + + @@ -15464,18 +15518,18 @@ Node178 - -P4::safe_vector< const - IR::DpdkAsmStatement * > + +P4::safe_vector< const + IR::DpdkAsmStatement * > - + Node175->Node178 - - - + + + @@ -15483,18 +15537,18 @@ Node179 - -P4::safe_vector< const - P4::IR::Node * > + +P4::safe_vector< const + P4::IR::Node * > - + Node175->Node179 - - - + + + @@ -15502,18 +15556,18 @@ Node180 - -P4::safe_vector< const - IR::Declaration * > + +P4::safe_vector< const + IR::Declaration * > - + Node175->Node180 - - - + + + @@ -15521,18 +15575,18 @@ Node181 - -P4::safe_vector< const - IR::StatOrDecl * > + +P4::safe_vector< const + IR::StatOrDecl * > - + Node175->Node181 - - - + + + @@ -15540,18 +15594,18 @@ Node182 - -P4::safe_vector< const - IR::DpdkTable * > + +P4::safe_vector< const + IR::DpdkTable * > - + Node175->Node182 - - - + + + @@ -15559,18 +15613,18 @@ Node183 - -P4::safe_vector< const - IR::DpdkSelector * > + +P4::safe_vector< const + IR::DpdkSelector * > - + Node175->Node183 - - - + + + @@ -15578,18 +15632,18 @@ Node184 - -P4::safe_vector< const - IR::DpdkLearner * > + +P4::safe_vector< const + IR::DpdkLearner * > - + Node175->Node184 - - - + + + @@ -15597,18 +15651,18 @@ Node185 - -P4::safe_vector< const - IR::DpdkAction * > + +P4::safe_vector< const + IR::DpdkAction * > - + Node175->Node185 - - - + + + @@ -15616,18 +15670,18 @@ Node186 - -P4::safe_vector< const - IR::Parameter * > + +P4::safe_vector< const + IR::Parameter * > - + Node175->Node186 - - - + + + @@ -15635,18 +15689,18 @@ Node187 - -P4::safe_vector< const - IR::DpdkDeclaration * > + +P4::safe_vector< const + IR::DpdkDeclaration * > - + Node175->Node187 - - - + + + @@ -15654,18 +15708,18 @@ Node188 - -P4::safe_vector< const - IR::StructField * > + +P4::safe_vector< const + IR::StructField * > - + Node175->Node188 - - - + + + @@ -15673,18 +15727,18 @@ Node189 - -P4::safe_vector< const - T * > + +P4::safe_vector< const + T * > - + Node175->Node189 - - - + + + @@ -15692,18 +15746,18 @@ Node190 - -P4::safe_vector< const - IR::ParserState * > + +P4::safe_vector< const + IR::ParserState * > - + Node175->Node190 - - - + + + @@ -15711,18 +15765,18 @@ Node191 - -P4::safe_vector< const - Constraint * > + +P4::safe_vector< const + Constraint * > - + Node175->Node191 - - - + + + @@ -15730,18 +15784,18 @@ Node192 - -P4::safe_vector< const - IR::SelectCase * > + +P4::safe_vector< const + IR::SelectCase * > - + Node175->Node192 - - - + + + @@ -15749,18 +15803,18 @@ Node193 - -P4::safe_vector< const - IR::Expression * > + +P4::safe_vector< const + IR::Expression * > - + Node175->Node193 - - - + + + @@ -15768,17 +15822,17 @@ Node194 - -P4::safe_vector< DebugHook > + +P4::safe_vector< DebugHook > - + Node175->Node194 - - - + + + @@ -15786,18 +15840,18 @@ Node195 - -P4::safe_vector< P4 -::Visitor * > + +P4::safe_vector< P4 +::Visitor * > - + Node175->Node195 - - - + + + @@ -15805,18 +15859,18 @@ Node196 - -P4::safe_vector< const - N * > + +P4::safe_vector< const + N * > - + Node175->Node196 - - - + + + @@ -15824,18 +15878,18 @@ Node197 - -P4::safe_vector< struct - P4::TC::Annotation * > + +P4::safe_vector< struct + P4::TC::Annotation * > - + Node175->Node197 - - - + + + @@ -15843,18 +15897,18 @@ Node198 - -P4::safe_vector< struct - P4::TC::ActionParam * > + +P4::safe_vector< struct + P4::TC::ActionParam * > - + Node175->Node198 - - - + + + @@ -15862,18 +15916,18 @@ Node199 - -P4::safe_vector< const - IR::P4Table * > + +P4::safe_vector< const + IR::P4Table * > - + Node175->Node199 - - - + + + @@ -15881,19 +15935,19 @@ Node200 - -P4::safe_vector< struct - P4::TC::ConvertToBackendIR -::ExternInstance * > + +P4::safe_vector< struct + P4::TC::ConvertToBackendIR +::ExternInstance * > - + Node175->Node200 - - - + + + @@ -15901,18 +15955,18 @@ Node201 - -P4::safe_vector< struct - P4::TC::ExternInstancesAttributes * > + +P4::safe_vector< struct + P4::TC::ExternInstancesAttributes * > - + Node175->Node201 - - - + + + @@ -15920,18 +15974,18 @@ Node202 - -P4::safe_vector< struct - P4::TC::KeyFieldAttributes * > + +P4::safe_vector< struct + P4::TC::KeyFieldAttributes * > - + Node175->Node202 - - - + + + @@ -15939,18 +15993,18 @@ Node203 - -P4::safe_vector< struct - P4::TC::ExternAttributes * > + +P4::safe_vector< struct + P4::TC::ExternAttributes * > - + Node175->Node203 - - - + + + @@ -15958,18 +16012,18 @@ Node204 - -P4::safe_vector< struct - P4::TC::TableAttributes * > + +P4::safe_vector< struct + P4::TC::TableAttributes * > - + Node175->Node204 - - - + + + @@ -15977,18 +16031,18 @@ Node205 - -P4::safe_vector< struct - P4::TC::ActionAttributes * > + +P4::safe_vector< struct + P4::TC::ActionAttributes * > - + Node175->Node205 - - - + + + @@ -15996,18 +16050,18 @@ Node206 - -P4::safe_vector< const - IR::Annotation * > + +P4::safe_vector< const + IR::Annotation * > - + Node175->Node206 - - - + + + @@ -16015,19 +16069,19 @@ Node207 - -P4::safe_vector< const - P4::graphs::ParserGraphs -::TransitionEdge * > + +P4::safe_vector< const + P4::graphs::ParserGraphs +::TransitionEdge * > - + Node175->Node207 - - - + + + @@ -16035,18 +16089,18 @@ Node213 - -P4::safe_vector< T, - Alloc > + +P4::safe_vector< T, + Alloc > - + Node175->Node213 - - - + + + diff --git a/inherit_graph_143.map b/inherit_graph_143.map index 01840ac64c7..e8d3624ee1b 100644 --- a/inherit_graph_143.map +++ b/inherit_graph_143.map @@ -1,13 +1,13 @@ - + - + - + - + - + diff --git a/inherit_graph_143.md5 b/inherit_graph_143.md5 index 12348ad1433..429cf8d342c 100644 --- a/inherit_graph_143.md5 +++ b/inherit_graph_143.md5 @@ -1 +1 @@ -d8112bcda4428c2676f0426b2d7e8f9b \ No newline at end of file +00eda5581ca087bc8b2d51dad9b4ed5d \ No newline at end of file diff --git a/inherit_graph_143.svg b/inherit_graph_143.svg index a98d513fd8d..f73f614b37b 100644 --- a/inherit_graph_143.svg +++ b/inherit_graph_143.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node4 - + @@ -63,9 +63,9 @@ - + Node1->Node2 - + @@ -81,9 +81,9 @@ - + Node1->Node3 - + @@ -99,9 +99,9 @@ - + Node4->Node5 - + diff --git a/inherit_graph_144.map b/inherit_graph_144.map index 6e959bbb340..7c09d2e518a 100644 --- a/inherit_graph_144.map +++ b/inherit_graph_144.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_144.md5 b/inherit_graph_144.md5 index e902ddef880..71696a6f1b8 100644 --- a/inherit_graph_144.md5 +++ b/inherit_graph_144.md5 @@ -1 +1 @@ -78fc47120af3b66dd0572d3690951876 \ No newline at end of file +b390ccf0960ce90ea0baa88003f0979c \ No newline at end of file diff --git a/inherit_graph_144.svg b/inherit_graph_144.svg index 762ca8d16de..53b1e4963e6 100644 --- a/inherit_graph_144.svg +++ b/inherit_graph_144.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_146.map b/inherit_graph_146.map index 42d35be59a2..808ef8dac91 100644 --- a/inherit_graph_146.map +++ b/inherit_graph_146.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_146.md5 b/inherit_graph_146.md5 index 91f482931a2..11c30d48a1b 100644 --- a/inherit_graph_146.md5 +++ b/inherit_graph_146.md5 @@ -1 +1 @@ -4801a3687837b9cd414baa10698727f3 \ No newline at end of file +00da375ac8e03d4ea4bf2398a69046a3 \ No newline at end of file diff --git a/inherit_graph_146.svg b/inherit_graph_146.svg index 276f3a37e0d..badccd1e95c 100644 --- a/inherit_graph_146.svg +++ b/inherit_graph_146.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_147.map b/inherit_graph_147.map index 0b6c618dcca..e9d66aa4cc1 100644 --- a/inherit_graph_147.map +++ b/inherit_graph_147.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_147.md5 b/inherit_graph_147.md5 index 4bf106703a6..cd0ed79d595 100644 --- a/inherit_graph_147.md5 +++ b/inherit_graph_147.md5 @@ -1 +1 @@ -10a784b2508045581c629c1047679383 \ No newline at end of file +31aaac5752c8f898a266d0b26c29b583 \ No newline at end of file diff --git a/inherit_graph_147.svg b/inherit_graph_147.svg index 046820bb3bb..7719ac0a54b 100644 --- a/inherit_graph_147.svg +++ b/inherit_graph_147.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_149.map b/inherit_graph_149.map index 5b5fe958755..b1652f46e06 100644 --- a/inherit_graph_149.map +++ b/inherit_graph_149.map @@ -1,15 +1,15 @@ - + - + - + - + - + - + diff --git a/inherit_graph_149.md5 b/inherit_graph_149.md5 index 39cb505c9ea..38181bc747a 100644 --- a/inherit_graph_149.md5 +++ b/inherit_graph_149.md5 @@ -1 +1 @@ -3ab27c1b0f3a710a6b04a85002ad2da4 \ No newline at end of file +aff258555e3e026ecb67324f0fcff489 \ No newline at end of file diff --git a/inherit_graph_149.svg b/inherit_graph_149.svg index 5fa39fe298f..0de2a608c2c 100644 --- a/inherit_graph_149.svg +++ b/inherit_graph_149.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node2 - + @@ -63,9 +63,9 @@ - + Node0->Node6 - + @@ -81,9 +81,9 @@ - + Node2->Node3 - + @@ -99,9 +99,9 @@ - + Node2->Node4 - + @@ -117,9 +117,9 @@ - + Node2->Node5 - + diff --git a/inherit_graph_164.map b/inherit_graph_164.map index 6677ac111e8..7b0a81f7f9b 100644 --- a/inherit_graph_164.map +++ b/inherit_graph_164.map @@ -1,9 +1,9 @@ - + - + - + diff --git a/inherit_graph_164.md5 b/inherit_graph_164.md5 index a560cb681dd..04a7213adb1 100644 --- a/inherit_graph_164.md5 +++ b/inherit_graph_164.md5 @@ -1 +1 @@ -addbe6858105e64705f37a020b415ab0 \ No newline at end of file +35d30eb7e066d6020e02f801401eb206 \ No newline at end of file diff --git a/inherit_graph_164.svg b/inherit_graph_164.svg index b2d037c234b..02901e4c3e9 100644 --- a/inherit_graph_164.svg +++ b/inherit_graph_164.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node2 - + @@ -63,9 +63,9 @@ - + Node0->Node3 - + diff --git a/inherit_graph_169.map b/inherit_graph_169.map index 9fc06b49a23..bada14dab3c 100644 --- a/inherit_graph_169.map +++ b/inherit_graph_169.map @@ -1,21 +1,21 @@ - + - + - + - + - + - + - + - + - + diff --git a/inherit_graph_169.md5 b/inherit_graph_169.md5 index 9a3c2990f85..e1c34f9c232 100644 --- a/inherit_graph_169.md5 +++ b/inherit_graph_169.md5 @@ -1 +1 @@ -7c3c305fab38f07955414c3fe1b9296f \ No newline at end of file +4fb2bb8b1a94aed27c8fc818fefe316c \ No newline at end of file diff --git a/inherit_graph_169.svg b/inherit_graph_169.svg index b89fffb44ec..3a765b39663 100644 --- a/inherit_graph_169.svg +++ b/inherit_graph_169.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node2 - + @@ -68,9 +68,9 @@ - + Node0->Node3 - + @@ -87,9 +87,9 @@ - + Node0->Node4 - + @@ -107,9 +107,9 @@ - + Node0->Node5 - + @@ -127,9 +127,9 @@ - + Node0->Node6 - + @@ -146,9 +146,9 @@ - + Node0->Node7 - + @@ -165,9 +165,9 @@ - + Node0->Node8 - + @@ -184,9 +184,9 @@ - + Node0->Node9 - + diff --git a/inherit_graph_175.map b/inherit_graph_175.map index 352c9c4bd17..741d6c93b11 100644 --- a/inherit_graph_175.map +++ b/inherit_graph_175.map @@ -1,13 +1,13 @@ - + - + - + - + - + diff --git a/inherit_graph_175.md5 b/inherit_graph_175.md5 index d16c6abb06e..c9173247375 100644 --- a/inherit_graph_175.md5 +++ b/inherit_graph_175.md5 @@ -1 +1 @@ -f6f1923df5390c716821e9aaf5d74f6e \ No newline at end of file +79926a1c9611c08ba38a75346e9064ff \ No newline at end of file diff --git a/inherit_graph_175.svg b/inherit_graph_175.svg index 26bb6f9e306..85876b22ecf 100644 --- a/inherit_graph_175.svg +++ b/inherit_graph_175.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node1->Node2 - + @@ -63,9 +63,9 @@ - + Node1->Node5 - + @@ -82,9 +82,9 @@ - + Node2->Node3 - + @@ -101,9 +101,9 @@ - + Node2->Node4 - + diff --git a/inherit_graph_182.map b/inherit_graph_182.map index 122ffd244bb..6f0fdc84860 100644 --- a/inherit_graph_182.map +++ b/inherit_graph_182.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_182.md5 b/inherit_graph_182.md5 index 839e9f9f720..37c35b823ad 100644 --- a/inherit_graph_182.md5 +++ b/inherit_graph_182.md5 @@ -1 +1 @@ -b4aa606c1d70a406afc5a6b856462f79 \ No newline at end of file +dfa828f6d2073503543f524b2b07d485 \ No newline at end of file diff --git a/inherit_graph_182.svg b/inherit_graph_182.svg index c487b8c43ca..acb6e344e20 100644 --- a/inherit_graph_182.svg +++ b/inherit_graph_182.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_197.map b/inherit_graph_197.map index 7fd862f94cd..613a204259f 100644 --- a/inherit_graph_197.map +++ b/inherit_graph_197.map @@ -1,79 +1,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/inherit_graph_197.md5 b/inherit_graph_197.md5 index 00bde34b9a6..e595dd9cd08 100644 --- a/inherit_graph_197.md5 +++ b/inherit_graph_197.md5 @@ -1 +1 @@ -e7f7d50c57c5b34daba513574a7ea8c8 \ No newline at end of file +262cf2cc7f39776edb6ffb37bbdcd99d \ No newline at end of file diff --git a/inherit_graph_197.svg b/inherit_graph_197.svg index b55f789b3ae..7973e89623f 100644 --- a/inherit_graph_197.svg +++ b/inherit_graph_197.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node2 - + @@ -63,9 +63,9 @@ - + Node0->Node3 - + @@ -81,9 +81,9 @@ - + Node0->Node4 - + @@ -99,9 +99,9 @@ - + Node0->Node28 - + @@ -117,9 +117,9 @@ - + Node0->Node29 - + @@ -136,9 +136,9 @@ - + Node0->Node30 - + @@ -155,9 +155,9 @@ - + Node0->Node31 - + @@ -173,9 +173,9 @@ - + Node0->Node32 - + @@ -191,9 +191,9 @@ - + Node0->Node33 - + @@ -209,9 +209,9 @@ - + Node0->Node34 - + @@ -227,9 +227,9 @@ - + Node0->Node35 - + @@ -246,9 +246,9 @@ - + Node0->Node36 - + @@ -264,9 +264,9 @@ - + Node0->Node37 - + @@ -283,9 +283,9 @@ - + Node0->Node38 - + @@ -301,9 +301,9 @@ - + Node4->Node5 - + @@ -319,9 +319,9 @@ - + Node4->Node11 - + @@ -338,9 +338,9 @@ - + Node4->Node27 - + @@ -357,9 +357,9 @@ - + Node5->Node6 - + @@ -376,9 +376,9 @@ - + Node5->Node7 - + @@ -395,9 +395,9 @@ - + Node5->Node8 - + @@ -414,9 +414,9 @@ - + Node5->Node9 - + @@ -433,9 +433,9 @@ - + Node5->Node10 - + @@ -452,9 +452,9 @@ - + Node11->Node12 - + @@ -471,9 +471,9 @@ - + Node11->Node13 - + @@ -490,9 +490,9 @@ - + Node11->Node14 - + @@ -509,9 +509,9 @@ - + Node11->Node15 - + @@ -527,9 +527,9 @@ - + Node11->Node16 - + @@ -546,9 +546,9 @@ - + Node11->Node17 - + @@ -565,9 +565,9 @@ - + Node11->Node22 - + @@ -583,9 +583,9 @@ - + Node11->Node23 - + @@ -601,9 +601,9 @@ - + Node11->Node24 - + @@ -619,9 +619,9 @@ - + Node11->Node25 - + @@ -638,9 +638,9 @@ - + Node11->Node26 - + @@ -656,9 +656,9 @@ - + Node17->Node18 - + @@ -675,9 +675,9 @@ - + Node17->Node19 - + @@ -694,9 +694,9 @@ - + Node17->Node20 - + @@ -712,9 +712,9 @@ - + Node17->Node21 - + diff --git a/inherit_graph_198.map b/inherit_graph_198.map index 5c6f50f294f..27e3cbbb61b 100644 --- a/inherit_graph_198.map +++ b/inherit_graph_198.map @@ -1,11 +1,11 @@ - + - + - + - + diff --git a/inherit_graph_198.md5 b/inherit_graph_198.md5 index ee4aac50c14..955e14d1bbe 100644 --- a/inherit_graph_198.md5 +++ b/inherit_graph_198.md5 @@ -1 +1 @@ -6b76b196dbccc24bd3cb7bbc204c3e67 \ No newline at end of file +fdc6223f6c9d263211384791237e70fe \ No newline at end of file diff --git a/inherit_graph_198.svg b/inherit_graph_198.svg index 02211407075..6425e689a89 100644 --- a/inherit_graph_198.svg +++ b/inherit_graph_198.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node2 - + @@ -63,9 +63,9 @@ - + Node0->Node3 - + @@ -81,9 +81,9 @@ - + Node0->Node4 - + diff --git a/inherit_graph_272.map b/inherit_graph_272.map index 4c4be97717c..95ea96876f8 100644 --- a/inherit_graph_272.map +++ b/inherit_graph_272.map @@ -1,7 +1,7 @@ - + - + diff --git a/inherit_graph_272.md5 b/inherit_graph_272.md5 index dfad0603af9..23e9b12de62 100644 --- a/inherit_graph_272.md5 +++ b/inherit_graph_272.md5 @@ -1 +1 @@ -6d85a2289679a86ccc2320b0e9129993 \ No newline at end of file +49bbdda9bf6904322deeb33a99b1244a \ No newline at end of file diff --git a/inherit_graph_272.svg b/inherit_graph_272.svg index fe0032b78a3..c45396939b6 100644 --- a/inherit_graph_272.svg +++ b/inherit_graph_272.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node1->Node2 - + diff --git a/inherit_graph_275.map b/inherit_graph_275.map index dc2ee9d6274..3f2db002b17 100644 --- a/inherit_graph_275.map +++ b/inherit_graph_275.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_275.md5 b/inherit_graph_275.md5 index fb438ed7772..5ef2ad72c4a 100644 --- a/inherit_graph_275.md5 +++ b/inherit_graph_275.md5 @@ -1 +1 @@ -6be216d379dbe4d821f5ba40edcbb7eb \ No newline at end of file +66242806763353180dde55b240c123ef \ No newline at end of file diff --git a/inherit_graph_275.svg b/inherit_graph_275.svg index 90da130134c..6b935249fb9 100644 --- a/inherit_graph_275.svg +++ b/inherit_graph_275.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_277.map b/inherit_graph_277.map index d801a8135cc..a8439abfa0f 100644 --- a/inherit_graph_277.map +++ b/inherit_graph_277.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_277.md5 b/inherit_graph_277.md5 index 7488814666d..0922f6e8948 100644 --- a/inherit_graph_277.md5 +++ b/inherit_graph_277.md5 @@ -1 +1 @@ -5add523fae40fc4746afa3d3ea6e6bd9 \ No newline at end of file +bd4c64d80ba4dba25c49ae9128588362 \ No newline at end of file diff --git a/inherit_graph_277.svg b/inherit_graph_277.svg index be11268db42..7d10f950b48 100644 --- a/inherit_graph_277.svg +++ b/inherit_graph_277.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_278.map b/inherit_graph_278.map index 58eace4013f..6782f83e6df 100644 --- a/inherit_graph_278.map +++ b/inherit_graph_278.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_278.md5 b/inherit_graph_278.md5 index 170283bc34d..48273c00acb 100644 --- a/inherit_graph_278.md5 +++ b/inherit_graph_278.md5 @@ -1 +1 @@ -3579a8390b06ffb123b251d920e38bb1 \ No newline at end of file +eefa129e948b99fb1162878f1a16a795 \ No newline at end of file diff --git a/inherit_graph_278.svg b/inherit_graph_278.svg index e77af92cdb7..2c15dc23a73 100644 --- a/inherit_graph_278.svg +++ b/inherit_graph_278.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_287.map b/inherit_graph_287.map index 7e21c3b23b1..57b44f1ac74 100644 --- a/inherit_graph_287.map +++ b/inherit_graph_287.map @@ -1,15 +1,15 @@ - + - + - + - + - + - + diff --git a/inherit_graph_287.md5 b/inherit_graph_287.md5 index 4f11831dc56..8d336e1c47c 100644 --- a/inherit_graph_287.md5 +++ b/inherit_graph_287.md5 @@ -1 +1 @@ -1170b7868c3f574fb28af20f195f880e \ No newline at end of file +59ada2292b5dac4fa822d917ffa36e05 \ No newline at end of file diff --git a/inherit_graph_287.svg b/inherit_graph_287.svg index fa0f8f3891e..28f0b191cbb 100644 --- a/inherit_graph_287.svg +++ b/inherit_graph_287.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node2 - + @@ -67,9 +67,9 @@ - + Node0->Node4 - + @@ -86,9 +86,9 @@ - + Node0->Node5 - + @@ -105,9 +105,9 @@ - + Node0->Node6 - + @@ -124,9 +124,9 @@ - + Node2->Node3 - + diff --git a/inherit_graph_297.map b/inherit_graph_297.map index a30e604c737..ba42e11b006 100644 --- a/inherit_graph_297.map +++ b/inherit_graph_297.map @@ -1,9 +1,9 @@ - + - + - + diff --git a/inherit_graph_297.md5 b/inherit_graph_297.md5 index bca425ddea8..896026357a6 100644 --- a/inherit_graph_297.md5 +++ b/inherit_graph_297.md5 @@ -1 +1 @@ -434adc5959da851c01bc8e57b3aeef34 \ No newline at end of file +06dbef6b6145a4a69ff57872f3a07c28 \ No newline at end of file diff --git a/inherit_graph_297.svg b/inherit_graph_297.svg index 72e2ee58803..a496940ce50 100644 --- a/inherit_graph_297.svg +++ b/inherit_graph_297.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node2 - + @@ -67,9 +67,9 @@ - + Node0->Node3 - + diff --git a/inherit_graph_318.map b/inherit_graph_318.map index 318fdbb3347..cfee6309016 100644 --- a/inherit_graph_318.map +++ b/inherit_graph_318.map @@ -1,11 +1,11 @@ - + - + - + - + diff --git a/inherit_graph_318.md5 b/inherit_graph_318.md5 index cf9b6cb4d6f..e823553d0b6 100644 --- a/inherit_graph_318.md5 +++ b/inherit_graph_318.md5 @@ -1 +1 @@ -10cebce6642b8a11afa0a0b84628550b \ No newline at end of file +5fa5ffedd831989b7def6be93ab8ea91 \ No newline at end of file diff --git a/inherit_graph_318.svg b/inherit_graph_318.svg index 1524847763a..c3ab8292f2f 100644 --- a/inherit_graph_318.svg +++ b/inherit_graph_318.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node2 - + @@ -67,9 +67,9 @@ - + Node0->Node3 - + @@ -86,9 +86,9 @@ - + Node0->Node4 - + diff --git a/inherit_graph_319.map b/inherit_graph_319.map index 099442a086e..2540bfb5158 100644 --- a/inherit_graph_319.map +++ b/inherit_graph_319.map @@ -1,11 +1,11 @@ - + - + - + - + diff --git a/inherit_graph_319.md5 b/inherit_graph_319.md5 index 5095b328481..ef53d1820a4 100644 --- a/inherit_graph_319.md5 +++ b/inherit_graph_319.md5 @@ -1 +1 @@ -f060bd9201419ee96efef753435d527c \ No newline at end of file +89d09275e33d50b978cc3e0078de0e0d \ No newline at end of file diff --git a/inherit_graph_319.svg b/inherit_graph_319.svg index 96308b6b9c5..c3337999373 100644 --- a/inherit_graph_319.svg +++ b/inherit_graph_319.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node2 - + @@ -67,9 +67,9 @@ - + Node0->Node3 - + @@ -86,9 +86,9 @@ - + Node3->Node4 - + diff --git a/inherit_graph_320.map b/inherit_graph_320.map index 2c67853dd0e..978218b6c4d 100644 --- a/inherit_graph_320.map +++ b/inherit_graph_320.map @@ -1,9 +1,9 @@ - + - + - + diff --git a/inherit_graph_320.md5 b/inherit_graph_320.md5 index ffb4b06938f..24310bc57e0 100644 --- a/inherit_graph_320.md5 +++ b/inherit_graph_320.md5 @@ -1 +1 @@ -4ba16d56cef564ad4c7b2a289c51a02e \ No newline at end of file +06aa28ae88845f22d39d2b1cc94aba7a \ No newline at end of file diff --git a/inherit_graph_320.svg b/inherit_graph_320.svg index 31bb6f11251..8c25fefa5c1 100644 --- a/inherit_graph_320.svg +++ b/inherit_graph_320.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node2 - + @@ -67,9 +67,9 @@ - + Node0->Node3 - + diff --git a/inherit_graph_323.map b/inherit_graph_323.map index 30b3ec739b1..8b14862f13e 100644 --- a/inherit_graph_323.map +++ b/inherit_graph_323.map @@ -1,21 +1,21 @@ - + - + - + - + - + - + - + - + - + diff --git a/inherit_graph_323.md5 b/inherit_graph_323.md5 index 9273059e9fa..126e589349a 100644 --- a/inherit_graph_323.md5 +++ b/inherit_graph_323.md5 @@ -1 +1 @@ -031607272e0bc43a00bd5dac06f5f79c \ No newline at end of file +5e5c50301d81320d6aede5b35d77af44 \ No newline at end of file diff --git a/inherit_graph_323.svg b/inherit_graph_323.svg index b040adde0c1..c16ff304b2d 100644 --- a/inherit_graph_323.svg +++ b/inherit_graph_323.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node7 - + @@ -67,9 +67,9 @@ - + Node0->Node8 - + @@ -86,9 +86,9 @@ - + Node0->Node9 - + @@ -105,9 +105,9 @@ - + Node1->Node2 - + @@ -124,9 +124,9 @@ - + Node1->Node3 - + @@ -143,9 +143,9 @@ - + Node1->Node4 - + @@ -162,9 +162,9 @@ - + Node1->Node5 - + @@ -181,9 +181,9 @@ - + Node1->Node6 - + diff --git a/inherit_graph_331.map b/inherit_graph_331.map index 2847482a720..c05034ebae2 100644 --- a/inherit_graph_331.map +++ b/inherit_graph_331.map @@ -1,33 +1,33 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/inherit_graph_331.md5 b/inherit_graph_331.md5 index e33a85285b4..4d4683018f4 100644 --- a/inherit_graph_331.md5 +++ b/inherit_graph_331.md5 @@ -1 +1 @@ -bff8bbcc080590642a90c584daeeed5e \ No newline at end of file +6404cc8f5886f913735b53ba24c1ae74 \ No newline at end of file diff --git a/inherit_graph_331.svg b/inherit_graph_331.svg index fbda4faa729..b35ebc65fc2 100644 --- a/inherit_graph_331.svg +++ b/inherit_graph_331.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -46,9 +46,9 @@ - + Node1->Node2 - + @@ -65,9 +65,9 @@ - + Node1->Node12 - + @@ -84,9 +84,9 @@ - + Node2->Node3 - + @@ -104,9 +104,9 @@ - + Node2->Node6 - + @@ -123,9 +123,9 @@ - + Node2->Node8 - + @@ -143,9 +143,9 @@ - + Node2->Node10 - + @@ -162,9 +162,9 @@ - + Node3->Node4 - + @@ -181,9 +181,9 @@ - + Node3->Node5 - + @@ -201,9 +201,9 @@ - + Node6->Node7 - + @@ -220,9 +220,9 @@ - + Node8->Node9 - + @@ -239,9 +239,9 @@ - + Node10->Node11 - + @@ -258,9 +258,9 @@ - + Node12->Node13 - + @@ -277,9 +277,9 @@ - + Node12->Node14 - + @@ -296,9 +296,9 @@ - + Node12->Node15 - + diff --git a/inherit_graph_352.map b/inherit_graph_352.map index f02b60fd82d..534cb3f5247 100644 --- a/inherit_graph_352.map +++ b/inherit_graph_352.map @@ -1,13 +1,13 @@ - + - + - + - + - + diff --git a/inherit_graph_352.md5 b/inherit_graph_352.md5 index ce14d28933b..9f6e792e782 100644 --- a/inherit_graph_352.md5 +++ b/inherit_graph_352.md5 @@ -1 +1 @@ -ae05c8f3547e71c81dffe66b85b5d2c7 \ No newline at end of file +183a7be516af652a3349330b2125f95f \ No newline at end of file diff --git a/inherit_graph_352.svg b/inherit_graph_352.svg index d0d73d34273..c3e1f01ee66 100644 --- a/inherit_graph_352.svg +++ b/inherit_graph_352.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node2 - + @@ -63,9 +63,9 @@ - + Node0->Node5 - + @@ -81,9 +81,9 @@ - + Node2->Node3 - + @@ -99,9 +99,9 @@ - + Node2->Node4 - + diff --git a/inherit_graph_355.map b/inherit_graph_355.map index 9bc4b0455b4..b81dd191183 100644 --- a/inherit_graph_355.map +++ b/inherit_graph_355.map @@ -1,7 +1,7 @@ - + - + diff --git a/inherit_graph_355.md5 b/inherit_graph_355.md5 index 7aa95cc99de..9948435e45b 100644 --- a/inherit_graph_355.md5 +++ b/inherit_graph_355.md5 @@ -1 +1 @@ -73e47ecb967c915fb3c617f6af4f04ed \ No newline at end of file +0ba79da17bf2b13252842858b7a7f3e4 \ No newline at end of file diff --git a/inherit_graph_355.svg b/inherit_graph_355.svg index d770a9bd0ba..695cacb527a 100644 --- a/inherit_graph_355.svg +++ b/inherit_graph_355.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + @@ -46,9 +46,9 @@ - + Node0->Node2 - + diff --git a/inherit_graph_356.map b/inherit_graph_356.map index e743c4dcc3d..269ea4306d8 100644 --- a/inherit_graph_356.map +++ b/inherit_graph_356.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_356.md5 b/inherit_graph_356.md5 index a62fa26b502..fde25cf1f43 100644 --- a/inherit_graph_356.md5 +++ b/inherit_graph_356.md5 @@ -1 +1 @@ -f7058347687d2dddcb49d912dfad5788 \ No newline at end of file +12002573e8744302ff41089612ea8321 \ No newline at end of file diff --git a/inherit_graph_356.svg b/inherit_graph_356.svg index 8d2aab72205..48cc3470ffa 100644 --- a/inherit_graph_356.svg +++ b/inherit_graph_356.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_372.map b/inherit_graph_372.map index 305ead23167..b7fa9d90910 100644 --- a/inherit_graph_372.map +++ b/inherit_graph_372.map @@ -1,7 +1,7 @@ - + - + diff --git a/inherit_graph_372.md5 b/inherit_graph_372.md5 index 25c25ab3227..0590c155422 100644 --- a/inherit_graph_372.md5 +++ b/inherit_graph_372.md5 @@ -1 +1 @@ -4d2821abbca5c0a77c41cf6bf441a2af \ No newline at end of file +1c888d2d382ebc7063fd4904dfe5c574 \ No newline at end of file diff --git a/inherit_graph_372.svg b/inherit_graph_372.svg index d83d6c22450..ede5e34fc41 100644 --- a/inherit_graph_372.svg +++ b/inherit_graph_372.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node2 - + diff --git a/inherit_graph_405.map b/inherit_graph_405.map index 0ae9fcb5f5f..37e72a7ab10 100644 --- a/inherit_graph_405.map +++ b/inherit_graph_405.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_405.md5 b/inherit_graph_405.md5 index 9936610bd2b..e080f1735b5 100644 --- a/inherit_graph_405.md5 +++ b/inherit_graph_405.md5 @@ -1 +1 @@ -bb171a174770ef39a2b943fef128ebbc \ No newline at end of file +1db11a5eb4a3c70f82241480f7e4b292 \ No newline at end of file diff --git a/inherit_graph_405.svg b/inherit_graph_405.svg index 24114562c34..a528b0fbfe0 100644 --- a/inherit_graph_405.svg +++ b/inherit_graph_405.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_407.map b/inherit_graph_407.map index e3b5c289d14..f5abfab367a 100644 --- a/inherit_graph_407.map +++ b/inherit_graph_407.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_407.md5 b/inherit_graph_407.md5 index 3afa711b45c..ccfcc4fd1d6 100644 --- a/inherit_graph_407.md5 +++ b/inherit_graph_407.md5 @@ -1 +1 @@ -142d78c351d19a51cc6bcad563fc71f2 \ No newline at end of file +6134ddcdeab0570b84b05cabca463d98 \ No newline at end of file diff --git a/inherit_graph_407.svg b/inherit_graph_407.svg index be363e5b20c..34385aaf4ea 100644 --- a/inherit_graph_407.svg +++ b/inherit_graph_407.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_408.map b/inherit_graph_408.map index b0252965524..f0bcfdfba67 100644 --- a/inherit_graph_408.map +++ b/inherit_graph_408.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_408.md5 b/inherit_graph_408.md5 index ee2de140551..f5f1428270b 100644 --- a/inherit_graph_408.md5 +++ b/inherit_graph_408.md5 @@ -1 +1 @@ -330a80fdd64da81fa3f3912a6e7b5c83 \ No newline at end of file +5814b9972ab0d3faad451a7836b3404a \ No newline at end of file diff --git a/inherit_graph_408.svg b/inherit_graph_408.svg index a2416470d99..e0321b67f70 100644 --- a/inherit_graph_408.svg +++ b/inherit_graph_408.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_410.map b/inherit_graph_410.map index 2ae08c31fdf..b68c0e61689 100644 --- a/inherit_graph_410.map +++ b/inherit_graph_410.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_410.md5 b/inherit_graph_410.md5 index f9f252d73a7..d0dcd69a2ab 100644 --- a/inherit_graph_410.md5 +++ b/inherit_graph_410.md5 @@ -1 +1 @@ -2ca4561319b85d2fce04f4b4fe87bbf1 \ No newline at end of file +eec13e1369a60cea3e60eca654c31b53 \ No newline at end of file diff --git a/inherit_graph_410.svg b/inherit_graph_410.svg index 4edc6362711..1ffd87b4f3e 100644 --- a/inherit_graph_410.svg +++ b/inherit_graph_410.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_411.map b/inherit_graph_411.map index a18737b88ad..cfe060365a0 100644 --- a/inherit_graph_411.map +++ b/inherit_graph_411.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_411.md5 b/inherit_graph_411.md5 index b611ae18340..0de578d6787 100644 --- a/inherit_graph_411.md5 +++ b/inherit_graph_411.md5 @@ -1 +1 @@ -969d606cbdaa44053fb781cd1611ec60 \ No newline at end of file +008fc58bf6f990be984dd3ab73fa5795 \ No newline at end of file diff --git a/inherit_graph_411.svg b/inherit_graph_411.svg index f5792f01b3c..6cfa543b89d 100644 --- a/inherit_graph_411.svg +++ b/inherit_graph_411.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_412.map b/inherit_graph_412.map index d11b732db40..31101b87afd 100644 --- a/inherit_graph_412.map +++ b/inherit_graph_412.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_412.md5 b/inherit_graph_412.md5 index b5ff97145d8..4fc9c50fc43 100644 --- a/inherit_graph_412.md5 +++ b/inherit_graph_412.md5 @@ -1 +1 @@ -9b357d2631ca3957badfdda464aedfda \ No newline at end of file +4a58eb8ccf21f37e2d884cf9275bf738 \ No newline at end of file diff --git a/inherit_graph_412.svg b/inherit_graph_412.svg index d09df743833..0491a63676f 100644 --- a/inherit_graph_412.svg +++ b/inherit_graph_412.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_413.map b/inherit_graph_413.map index f1ff6791893..6ea204d9111 100644 --- a/inherit_graph_413.map +++ b/inherit_graph_413.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_413.md5 b/inherit_graph_413.md5 index 7bdab1f7d1a..7b6c717a733 100644 --- a/inherit_graph_413.md5 +++ b/inherit_graph_413.md5 @@ -1 +1 @@ -05e3736bc8c34158b2f9b7a3c91765aa \ No newline at end of file +1649a8cb52af156a68eec7ecc5c89283 \ No newline at end of file diff --git a/inherit_graph_413.svg b/inherit_graph_413.svg index fc7653845d6..e7e7dc67483 100644 --- a/inherit_graph_413.svg +++ b/inherit_graph_413.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_414.map b/inherit_graph_414.map index 5fb8b34acd9..1741101fc57 100644 --- a/inherit_graph_414.map +++ b/inherit_graph_414.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_414.md5 b/inherit_graph_414.md5 index 1833e5aa34f..7f649b9506c 100644 --- a/inherit_graph_414.md5 +++ b/inherit_graph_414.md5 @@ -1 +1 @@ -15f820a3be98bded5e13c0310e4013bf \ No newline at end of file +58b389d752330f2ef75f4a0bde2bc985 \ No newline at end of file diff --git a/inherit_graph_414.svg b/inherit_graph_414.svg index edb6ac17154..883484b1d62 100644 --- a/inherit_graph_414.svg +++ b/inherit_graph_414.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_415.map b/inherit_graph_415.map index b7f1c3b9cca..511676478ec 100644 --- a/inherit_graph_415.map +++ b/inherit_graph_415.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_415.md5 b/inherit_graph_415.md5 index 1f9d7273cc4..424cf126977 100644 --- a/inherit_graph_415.md5 +++ b/inherit_graph_415.md5 @@ -1 +1 @@ -ab7df6e36eb96b8fe88f47cf29f1760c \ No newline at end of file +511df715ff57dfff02c16e8dc7a2a8f8 \ No newline at end of file diff --git a/inherit_graph_415.svg b/inherit_graph_415.svg index 475fa970636..522291edd0c 100644 --- a/inherit_graph_415.svg +++ b/inherit_graph_415.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_416.map b/inherit_graph_416.map index abbc6ca3863..9508d00502c 100644 --- a/inherit_graph_416.map +++ b/inherit_graph_416.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_416.md5 b/inherit_graph_416.md5 index 1d5448b5907..20df7c9d1b4 100644 --- a/inherit_graph_416.md5 +++ b/inherit_graph_416.md5 @@ -1 +1 @@ -2f279137b147b2bff9257b7c8b49c444 \ No newline at end of file +bc96cb3f6dd5d6fd0f52137df2ebdb7b \ No newline at end of file diff --git a/inherit_graph_416.svg b/inherit_graph_416.svg index 39389549454..831931fc836 100644 --- a/inherit_graph_416.svg +++ b/inherit_graph_416.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_417.map b/inherit_graph_417.map index 7a7d8078ae2..597f36501f1 100644 --- a/inherit_graph_417.map +++ b/inherit_graph_417.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_417.md5 b/inherit_graph_417.md5 index a474845a51c..33bb54bbc64 100644 --- a/inherit_graph_417.md5 +++ b/inherit_graph_417.md5 @@ -1 +1 @@ -40778eb16ac1b6ac41dfcc0164d94d2c \ No newline at end of file +a0e83962ebe33de108c82328b7333870 \ No newline at end of file diff --git a/inherit_graph_417.svg b/inherit_graph_417.svg index 4b583680a36..861a684be33 100644 --- a/inherit_graph_417.svg +++ b/inherit_graph_417.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_418.map b/inherit_graph_418.map index d37873179f0..312a72f766c 100644 --- a/inherit_graph_418.map +++ b/inherit_graph_418.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_418.md5 b/inherit_graph_418.md5 index c5e3defe369..85aef711650 100644 --- a/inherit_graph_418.md5 +++ b/inherit_graph_418.md5 @@ -1 +1 @@ -13547bed647f727430b8abb27e77775a \ No newline at end of file +55b9d5b192cc1db95bde2077d75609b2 \ No newline at end of file diff --git a/inherit_graph_418.svg b/inherit_graph_418.svg index f27791a5a0d..eee428397a8 100644 --- a/inherit_graph_418.svg +++ b/inherit_graph_418.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_419.map b/inherit_graph_419.map index a83edaa9572..f7f61215926 100644 --- a/inherit_graph_419.map +++ b/inherit_graph_419.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_419.md5 b/inherit_graph_419.md5 index 2eb7efbb11d..ecbf2ca7c9a 100644 --- a/inherit_graph_419.md5 +++ b/inherit_graph_419.md5 @@ -1 +1 @@ -27b66d4be3e4c6f7b56ed18edca0dc71 \ No newline at end of file +417907de9da6c3d44780712dde3f7bcb \ No newline at end of file diff --git a/inherit_graph_419.svg b/inherit_graph_419.svg index b62d6c321e8..d2ff5d920ea 100644 --- a/inherit_graph_419.svg +++ b/inherit_graph_419.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_420.map b/inherit_graph_420.map index b59e55f5373..abe3e13646b 100644 --- a/inherit_graph_420.map +++ b/inherit_graph_420.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_420.md5 b/inherit_graph_420.md5 index da919dc8230..fcffaff052c 100644 --- a/inherit_graph_420.md5 +++ b/inherit_graph_420.md5 @@ -1 +1 @@ -7023712d24778d285170c4820fc975be \ No newline at end of file +4d5b8bc60efc590ecc06cf25edb6c3f2 \ No newline at end of file diff --git a/inherit_graph_420.svg b/inherit_graph_420.svg index 44f5c20753d..753443f4270 100644 --- a/inherit_graph_420.svg +++ b/inherit_graph_420.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_423.map b/inherit_graph_423.map index 365e84bd5ea..e791a46e4d1 100644 --- a/inherit_graph_423.map +++ b/inherit_graph_423.map @@ -1,7 +1,7 @@ - + - + diff --git a/inherit_graph_423.md5 b/inherit_graph_423.md5 index 86cede061fd..c02d9c0a9c4 100644 --- a/inherit_graph_423.md5 +++ b/inherit_graph_423.md5 @@ -1 +1 @@ -35cd2fb1ba9dca3ae00433405d39def6 \ No newline at end of file +1ea9f979ee371c13f5f51183df0450e8 \ No newline at end of file diff --git a/inherit_graph_423.svg b/inherit_graph_423.svg index 1a8aebfe606..28a9abd1d75 100644 --- a/inherit_graph_423.svg +++ b/inherit_graph_423.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + @@ -47,9 +47,9 @@ - + Node0->Node2 - + diff --git a/inherit_graph_424.map b/inherit_graph_424.map index 75daa201e77..4125b6b71d9 100644 --- a/inherit_graph_424.map +++ b/inherit_graph_424.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_424.md5 b/inherit_graph_424.md5 index d80190d0732..55926ebbc74 100644 --- a/inherit_graph_424.md5 +++ b/inherit_graph_424.md5 @@ -1 +1 @@ -abad3c48621074171b1688e5932769c9 \ No newline at end of file +2468a32c0031e452d6ba86749de23927 \ No newline at end of file diff --git a/inherit_graph_424.svg b/inherit_graph_424.svg index c9ea5c7f31b..c1889476969 100644 --- a/inherit_graph_424.svg +++ b/inherit_graph_424.svg @@ -30,9 +30,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_425.map b/inherit_graph_425.map index f141ddf3b07..279d280a2ee 100644 --- a/inherit_graph_425.map +++ b/inherit_graph_425.map @@ -1,11 +1,11 @@ - + - + - + - + diff --git a/inherit_graph_425.md5 b/inherit_graph_425.md5 index 4904a19a467..54181131c90 100644 --- a/inherit_graph_425.md5 +++ b/inherit_graph_425.md5 @@ -1 +1 @@ -36caef335b8143cca92ca7e8f7cad522 \ No newline at end of file +ff92ce16e2e82f9a7b1a69e1f66318ed \ No newline at end of file diff --git a/inherit_graph_425.svg b/inherit_graph_425.svg index f5051014590..7699ce502a9 100644 --- a/inherit_graph_425.svg +++ b/inherit_graph_425.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node0->Node2 - + @@ -64,9 +64,9 @@ - + Node0->Node3 - + @@ -82,9 +82,9 @@ - + Node0->Node4 - + diff --git a/inherit_graph_444.map b/inherit_graph_444.map index 1b7dad17afd..549d74a6441 100644 --- a/inherit_graph_444.map +++ b/inherit_graph_444.map @@ -1,39 +1,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/inherit_graph_444.md5 b/inherit_graph_444.md5 index 9aa6d5798e6..d024c963af5 100644 --- a/inherit_graph_444.md5 +++ b/inherit_graph_444.md5 @@ -1 +1 @@ -7a8cdca42ea387607feae09f57fb3ca0 \ No newline at end of file +a0a335d7ae4f742e66ce162c7e0ceed0 \ No newline at end of file diff --git a/inherit_graph_444.svg b/inherit_graph_444.svg index a9ae2f763cd..aa8b123b317 100644 --- a/inherit_graph_444.svg +++ b/inherit_graph_444.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node1->Node2 - + @@ -63,9 +63,9 @@ - + Node2->Node3 - + @@ -81,9 +81,9 @@ - + Node2->Node8 - + @@ -99,9 +99,9 @@ - + Node2->Node9 - + @@ -117,9 +117,9 @@ - + Node2->Node10 - + @@ -136,9 +136,9 @@ - + Node2->Node11 - + @@ -155,9 +155,9 @@ - + Node2->Node14 - + @@ -174,9 +174,9 @@ - + Node2->Node15 - + @@ -192,9 +192,9 @@ - + Node2->Node16 - + @@ -210,9 +210,9 @@ - + Node2->Node17 - + @@ -228,9 +228,9 @@ - + Node2->Node18 - + @@ -246,9 +246,9 @@ - + Node3->Node4 - + @@ -264,9 +264,9 @@ - + Node3->Node7 - + @@ -282,9 +282,9 @@ - + Node4->Node5 - + @@ -300,9 +300,9 @@ - + Node4->Node6 - + @@ -319,9 +319,9 @@ - + Node11->Node12 - + @@ -337,9 +337,9 @@ - + Node11->Node13 - + diff --git a/inherit_graph_449.map b/inherit_graph_449.map index b04a09bf07f..8f6b983b02f 100644 --- a/inherit_graph_449.map +++ b/inherit_graph_449.map @@ -1,7 +1,7 @@ - + - + diff --git a/inherit_graph_449.md5 b/inherit_graph_449.md5 index b4715b4607e..17ea0ac9cf6 100644 --- a/inherit_graph_449.md5 +++ b/inherit_graph_449.md5 @@ -1 +1 @@ -a4d867d1e417b03eaa74ed14ec65b8ec \ No newline at end of file +b4295f2276a833b7d1794522764aff32 \ No newline at end of file diff --git a/inherit_graph_449.svg b/inherit_graph_449.svg index b3bd27436f7..5c7e2aa6b37 100644 --- a/inherit_graph_449.svg +++ b/inherit_graph_449.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -45,9 +45,9 @@ - + Node1->Node2 - + diff --git a/inherit_graph_478.map b/inherit_graph_478.map index d7b97ef943b..8b74f1c6426 100644 --- a/inherit_graph_478.map +++ b/inherit_graph_478.map @@ -1,7 +1,7 @@ - + - + diff --git a/inherit_graph_478.md5 b/inherit_graph_478.md5 index e0d7be31470..5eeb064eb24 100644 --- a/inherit_graph_478.md5 +++ b/inherit_graph_478.md5 @@ -1 +1 @@ -a21b34bd64d8f0cb2de3114a8eb4aeff \ No newline at end of file +0f53eeba3512b3fd647a663139627f7e \ No newline at end of file diff --git a/inherit_graph_478.svg b/inherit_graph_478.svg index e10eb1aeae0..5e5c6fefa00 100644 --- a/inherit_graph_478.svg +++ b/inherit_graph_478.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + @@ -48,9 +48,9 @@ - + Node0->Node2 - + diff --git a/inherit_graph_479.map b/inherit_graph_479.map index aaea991d297..f9a44e24f01 100644 --- a/inherit_graph_479.map +++ b/inherit_graph_479.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_479.md5 b/inherit_graph_479.md5 index 2754116ae60..60ca34b4d5e 100644 --- a/inherit_graph_479.md5 +++ b/inherit_graph_479.md5 @@ -1 +1 @@ -0bf8d1df77532edd86f1b48f3477190f \ No newline at end of file +75992c5c1fcf5ef2081ed9ea1381df3c \ No newline at end of file diff --git a/inherit_graph_479.svg b/inherit_graph_479.svg index db7d96bb806..b57654e2d40 100644 --- a/inherit_graph_479.svg +++ b/inherit_graph_479.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_480.map b/inherit_graph_480.map index 8826e174211..c0d36ecd67a 100644 --- a/inherit_graph_480.map +++ b/inherit_graph_480.map @@ -1,13 +1,13 @@ - + - + - + - + - + diff --git a/inherit_graph_480.md5 b/inherit_graph_480.md5 index c63a17290fe..e97baa9b73f 100644 --- a/inherit_graph_480.md5 +++ b/inherit_graph_480.md5 @@ -1 +1 @@ -fcce9dddb10793b83f7cab9c28b1dc6b \ No newline at end of file +0872932eef576f38ad8bc1f5c6364d1b \ No newline at end of file diff --git a/inherit_graph_480.svg b/inherit_graph_480.svg index 5a133dbd085..1c21ebbb346 100644 --- a/inherit_graph_480.svg +++ b/inherit_graph_480.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -46,9 +46,9 @@ - + Node1->Node2 - + @@ -64,9 +64,9 @@ - + Node1->Node3 - + @@ -82,9 +82,9 @@ - + Node1->Node4 - + @@ -100,9 +100,9 @@ - + Node1->Node5 - + diff --git a/inherit_graph_481.map b/inherit_graph_481.map index 900ea6645f5..17e0128703d 100644 --- a/inherit_graph_481.map +++ b/inherit_graph_481.map @@ -1,13 +1,13 @@ - + - + - + - + - + diff --git a/inherit_graph_481.md5 b/inherit_graph_481.md5 index 19753607d91..481edbb83db 100644 --- a/inherit_graph_481.md5 +++ b/inherit_graph_481.md5 @@ -1 +1 @@ -3e03f276a481cee2e175e7df0696cdef \ No newline at end of file +cc9c0aa12fc3f56f5a99b48dac068e94 \ No newline at end of file diff --git a/inherit_graph_481.svg b/inherit_graph_481.svg index c72f46bf6d1..14d5c37be1d 100644 --- a/inherit_graph_481.svg +++ b/inherit_graph_481.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + @@ -47,9 +47,9 @@ - + Node0->Node2 - + @@ -66,9 +66,9 @@ - + Node0->Node3 - + @@ -85,9 +85,9 @@ - + Node0->Node4 - + @@ -104,9 +104,9 @@ - + Node0->Node5 - + diff --git a/inherit_graph_490.map b/inherit_graph_490.map index c9eddf78815..1716a3ec525 100644 --- a/inherit_graph_490.map +++ b/inherit_graph_490.map @@ -1,9 +1,9 @@ - + - + - + diff --git a/inherit_graph_490.md5 b/inherit_graph_490.md5 index 7b0aa5068ea..4698cfe8f68 100644 --- a/inherit_graph_490.md5 +++ b/inherit_graph_490.md5 @@ -1 +1 @@ -4cbedc87dc3dd231773c67e99de56fdb \ No newline at end of file +e83f687edaf2b64c3e4d5bb9d88bb55a \ No newline at end of file diff --git a/inherit_graph_490.svg b/inherit_graph_490.svg index 25cb8892fd9..bc15010e57e 100644 --- a/inherit_graph_490.svg +++ b/inherit_graph_490.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + @@ -46,9 +46,9 @@ - + Node1->Node2 - + @@ -65,9 +65,9 @@ - + Node2->Node3 - + diff --git a/inherit_graph_491.map b/inherit_graph_491.map index 0813ede4c13..ec14f28a6ba 100644 --- a/inherit_graph_491.map +++ b/inherit_graph_491.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_491.md5 b/inherit_graph_491.md5 index 90d28e1dad0..1e24aeb61f0 100644 --- a/inherit_graph_491.md5 +++ b/inherit_graph_491.md5 @@ -1 +1 @@ -1d8845537e330b684a76f2d483fe2c69 \ No newline at end of file +2aa138952c8b07fd5a99271de5f34645 \ No newline at end of file diff --git a/inherit_graph_491.svg b/inherit_graph_491.svg index d06224bee3e..cee9545f334 100644 --- a/inherit_graph_491.svg +++ b/inherit_graph_491.svg @@ -27,9 +27,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_492.map b/inherit_graph_492.map index 1940430fb9c..1e2b2c85c56 100644 --- a/inherit_graph_492.map +++ b/inherit_graph_492.map @@ -1,5 +1,5 @@ - + diff --git a/inherit_graph_492.md5 b/inherit_graph_492.md5 index fcc85a1d86c..38beea22cb5 100644 --- a/inherit_graph_492.md5 +++ b/inherit_graph_492.md5 @@ -1 +1 @@ -d1bc2d88c5161e28852ef63e574cd600 \ No newline at end of file +61db0032ba4e7764bc3f4094dca2f9ec \ No newline at end of file diff --git a/inherit_graph_492.svg b/inherit_graph_492.svg index 51e46d9eab4..e4f79694d1f 100644 --- a/inherit_graph_492.svg +++ b/inherit_graph_492.svg @@ -29,9 +29,9 @@ - + Node0->Node1 - + diff --git a/inherit_graph_493.map b/inherit_graph_493.map index 9c3b6826daa..dd33d954459 100644 --- a/inherit_graph_493.map +++ b/inherit_graph_493.map @@ -1,13 +1,13 @@ - + - + - + - + - + diff --git a/inherit_graph_493.md5 b/inherit_graph_493.md5 index 29fe3b30f31..d7ef2f55aa7 100644 --- a/inherit_graph_493.md5 +++ b/inherit_graph_493.md5 @@ -1 +1 @@ -54c1ca27ccd15947b672afc9353f383a \ No newline at end of file +2bab67493302c9b8455920a87803ced6 \ No newline at end of file diff --git a/inherit_graph_493.svg b/inherit_graph_493.svg index 504202b857d..8b6bc553731 100644 --- a/inherit_graph_493.svg +++ b/inherit_graph_493.svg @@ -30,9 +30,9 @@ - + Node0->Node1 - + @@ -50,9 +50,9 @@ - + Node0->Node2 - + @@ -70,9 +70,9 @@ - + Node0->Node3 - + @@ -92,9 +92,9 @@ - + Node0->Node4 - + @@ -113,9 +113,9 @@ - + Node0->Node5 - + diff --git a/inherit_graph_494.map b/inherit_graph_494.map index 4cfa23b157a..b53a6341133 100644 --- a/inherit_graph_494.map +++ b/inherit_graph_494.map @@ -1,101 +1,101 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/inherit_graph_494.md5 b/inherit_graph_494.md5 index 78326418988..c96ae15ec21 100644 --- a/inherit_graph_494.md5 +++ b/inherit_graph_494.md5 @@ -1 +1 @@ -f169cbdbd5bfe86f6bf2019b977ba139 \ No newline at end of file +b8e326f78d81d8f23c335acfd021f2e4 \ No newline at end of file diff --git a/inherit_graph_494.svg b/inherit_graph_494.svg index c4531f9b1b0..aed69942723 100644 --- a/inherit_graph_494.svg +++ b/inherit_graph_494.svg @@ -28,9 +28,9 @@ - + Node0->Node1 - + @@ -47,9 +47,9 @@ - + Node0->Node2 - + @@ -66,9 +66,9 @@ - + Node0->Node3 - + @@ -85,9 +85,9 @@ - + Node0->Node4 - + @@ -104,9 +104,9 @@ - + Node0->Node5 - + @@ -123,9 +123,9 @@ - + Node0->Node6 - + @@ -142,9 +142,9 @@ - + Node0->Node7 - + @@ -161,9 +161,9 @@ - + Node0->Node46 - + @@ -180,9 +180,9 @@ - + Node0->Node47 - + @@ -199,9 +199,9 @@ - + Node0->Node48 - + @@ -218,9 +218,9 @@ - + Node0->Node49 - + @@ -237,9 +237,9 @@ - + Node7->Node8 - + @@ -256,9 +256,9 @@ - + Node7->Node44 - + @@ -275,9 +275,9 @@ - + Node8->Node9 - + @@ -294,9 +294,9 @@ - + Node8->Node10 - + @@ -313,9 +313,9 @@ - + Node8->Node11 - + @@ -332,9 +332,9 @@ - + Node8->Node12 - + @@ -351,9 +351,9 @@ - + Node8->Node23 - + @@ -370,9 +370,9 @@ - + Node8->Node24 - + @@ -389,9 +389,9 @@ - + Node12->Node13 - + @@ -408,9 +408,9 @@ - + Node12->Node14 - + @@ -427,9 +427,9 @@ - + Node12->Node15 - + @@ -446,9 +446,9 @@ - + Node12->Node16 - + @@ -465,9 +465,9 @@ - + Node12->Node17 - + @@ -484,9 +484,9 @@ - + Node12->Node18 - + @@ -503,9 +503,9 @@ - + Node12->Node19 - + @@ -522,9 +522,9 @@ - + Node12->Node20 - + @@ -541,9 +541,9 @@ - + Node12->Node21 - + @@ -560,9 +560,9 @@ - + Node12->Node22 - + @@ -579,9 +579,9 @@ - + Node24->Node25 - + @@ -598,9 +598,9 @@ - + Node24->Node26 - + @@ -617,9 +617,9 @@ - + Node24->Node27 - + @@ -636,9 +636,9 @@ - + Node24->Node28 - + @@ -655,9 +655,9 @@ - + Node24->Node29 - + @@ -674,9 +674,9 @@ - + Node24->Node30 - + @@ -693,9 +693,9 @@ - + Node24->Node31 - + @@ -712,9 +712,9 @@ - + Node24->Node32 - + @@ -731,9 +731,9 @@ - + Node24->Node33 - + @@ -750,9 +750,9 @@ - + Node24->Node34 - + @@ -769,9 +769,9 @@ - + Node24->Node35 - + @@ -788,9 +788,9 @@ - + Node24->Node36 - + @@ -807,9 +807,9 @@ - + Node24->Node37 - + @@ -826,9 +826,9 @@ - + Node24->Node38 - + @@ -845,9 +845,9 @@ - + Node24->Node39 - + @@ -864,9 +864,9 @@ - + Node24->Node40 - + @@ -883,9 +883,9 @@ - + Node24->Node41 - + @@ -902,9 +902,9 @@ - + Node24->Node42 - + @@ -921,9 +921,9 @@ - + Node24->Node43 - + @@ -940,9 +940,9 @@ - + Node44->Node45 - + diff --git a/inherits.html b/inherits.html index 00f7ef92784..bcd979b0ec3 100644 --- a/inherits.html +++ b/inherits.html @@ -244,7 +244,7 @@

    This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.

    - + diff --git a/local__copyprop_8h_source.html b/local__copyprop_8h_source.html index d07bf9fe742..7866dffd1c7 100644 --- a/local__copyprop_8h_source.html +++ b/local__copyprop_8h_source.html @@ -141,153 +141,155 @@
    16#ifndef MIDEND_LOCAL_COPYPROP_H_
    17#define MIDEND_LOCAL_COPYPROP_H_
    18
    -
    19#include "frontends/common/resolveReferences/referenceMap.h"
    +
    19#include "frontends/common/resolveReferences/resolveReferences.h"
    20#include "frontends/p4/typeChecking/typeChecker.h"
    21#include "has_side_effects.h"
    22#include "ir/ir.h"
    -
    23
    -
    24namespace P4 {
    -
    25
    -
    -
    52class DoLocalCopyPropagation : public ControlFlowVisitor, Transform, P4WriteContext {
    -
    53 ReferenceMap *refMap;
    -
    54 TypeMap *typeMap;
    -
    55 bool working = false;
    -
    56 struct VarInfo {
    -
    57 bool local = false;
    -
    58 bool live = false;
    -
    59 const IR::Expression *val = nullptr;
    -
    60 };
    -
    61 struct TableInfo {
    -
    62 std::set<cstring> keyreads, actions;
    -
    63 int apply_count = 0;
    -
    64 std::map<cstring, const IR::Expression *> key_remap;
    -
    65 };
    -
    66 struct FuncInfo {
    -
    67 std::set<cstring> reads, writes;
    -
    68 int apply_count = 0;
    -
    69
    -
    74 bool is_first_write_insert = false;
    -
    75 };
    -
    76 std::map<cstring, VarInfo> available;
    -
    77 std::map<cstring, TableInfo> &tables;
    -
    78 std::map<cstring, FuncInfo> &actions;
    -
    79 std::map<cstring, FuncInfo> &methods;
    -
    80 std::map<cstring, FuncInfo> &states;
    -
    81 TableInfo *inferForTable = nullptr;
    -
    82 FuncInfo *inferForFunc = nullptr;
    -
    83 bool need_key_rewrite = false;
    -
    84 std::function<bool(const Context *, const IR::Expression *)> policy;
    -
    85 bool elimUnusedTables = false;
    -
    86 int uid = -1;
    -
    87 static int uid_ctr;
    -
    88
    -
    89 DoLocalCopyPropagation *clone() const override {
    -
    90 auto *rv = new DoLocalCopyPropagation(*this);
    -
    91 rv->uid = ++uid_ctr;
    -
    92 LOG8("flow_clone(" << uid << ") = " << rv->uid);
    -
    93 return rv;
    -
    94 }
    -
    95 void flow_merge(Visitor &) override;
    -
    96 void flow_copy(ControlFlowVisitor &) override;
    -
    97 bool operator==(const ControlFlowVisitor &) const override;
    -
    98 bool name_overlap(cstring, cstring);
    -
    99 void forOverlapAvail(cstring, std::function<void(cstring, VarInfo *)>);
    -
    100 void dropValuesUsing(cstring);
    -
    101 bool hasSideEffects(const IR::Expression *e) {
    -
    102 return bool(::P4::hasSideEffects(refMap, typeMap, e));
    -
    103 }
    -
    104 bool isHeaderUnionIsValid(const IR::Expression *e);
    -
    105
    -
    106 class LoopPrepass : public Inspector {
    -
    107 DoLocalCopyPropagation &self;
    -
    108 void postorder(const IR::AssignmentStatement *) override;
    -
    109 void postorder(const IR::MethodCallExpression *) override;
    -
    110 void apply_table(TableInfo *tbl);
    -
    111 void apply_function(FuncInfo *tbl);
    -
    112
    -
    113 public:
    -
    114 explicit LoopPrepass(DoLocalCopyPropagation &s) : self(s) {}
    -
    115 };
    -
    116
    -
    117 void visit_local_decl(const IR::Declaration_Variable *);
    -
    118 const IR::Node *postorder(IR::Declaration_Variable *) override;
    -
    119 IR::Expression *preorder(IR::Expression *m) override;
    -
    120 const IR::Expression *copyprop_name(cstring name, const Util::SourceInfo &srcInfo);
    -
    121 const IR::Expression *postorder(IR::PathExpression *) override;
    -
    122 const IR::Expression *preorder(IR::Member *) override;
    -
    123 const IR::Expression *preorder(IR::ArrayIndex *) override;
    -
    124 IR::Statement *preorder(IR::Statement *) override;
    -
    125 IR::AssignmentStatement *preorder(IR::AssignmentStatement *) override;
    -
    126 IR::AssignmentStatement *postorder(IR::AssignmentStatement *) override;
    -
    127 IR::IfStatement *postorder(IR::IfStatement *) override;
    -
    128 IR::ForStatement *preorder(IR::ForStatement *) override;
    -
    129 IR::ForInStatement *preorder(IR::ForInStatement *) override;
    -
    130 IR::MethodCallExpression *postorder(IR::MethodCallExpression *) override;
    -
    131 IR::P4Action *preorder(IR::P4Action *) override;
    -
    132 IR::P4Action *postorder(IR::P4Action *) override;
    -
    133 IR::Function *preorder(IR::Function *) override;
    -
    134 IR::Function *postorder(IR::Function *) override;
    -
    135 IR::P4Control *preorder(IR::P4Control *) override;
    -
    136 void apply_table(TableInfo *tbl);
    -
    137 void apply_function(FuncInfo *tbl);
    -
    138 IR::P4Table *preorder(IR::P4Table *) override;
    -
    139 IR::P4Table *postorder(IR::P4Table *) override;
    -
    140 const IR::P4Parser *postorder(IR::P4Parser *) override;
    -
    141 IR::ParserState *preorder(IR::ParserState *) override;
    -
    142 IR::ParserState *postorder(IR::ParserState *) override;
    -
    143 Visitor::profile_t init_apply(const IR::Node *node) override;
    -
    144 class ElimDead;
    -
    145 class RewriteTableKeys;
    -
    146
    -
    147 DoLocalCopyPropagation(const DoLocalCopyPropagation &) = default;
    -
    148
    -
    149 public:
    -
    150 DoLocalCopyPropagation(ReferenceMap *refMap, TypeMap *typeMap,
    -
    151 std::function<bool(const Context *, const IR::Expression *)> policy,
    -
    152 bool eut)
    -
    153 : refMap(refMap),
    -
    154 typeMap(typeMap),
    -
    155 tables(*new std::map<cstring, TableInfo>),
    -
    156 actions(*new std::map<cstring, FuncInfo>),
    -
    157 methods(*new std::map<cstring, FuncInfo>),
    -
    158 states(*new std::map<cstring, FuncInfo>),
    -
    159 policy(policy),
    -
    160 elimUnusedTables(eut) {}
    -
    161};
    +
    23#include "ir/visitor.h"
    +
    24
    +
    25namespace P4 {
    +
    26
    +
    + + + + +
    57 TypeMap *typeMap;
    +
    58 bool working = false;
    +
    59 struct VarInfo {
    +
    60 bool local = false;
    +
    61 bool live = false;
    +
    62 const IR::Expression *val = nullptr;
    +
    63 };
    +
    64 struct TableInfo {
    +
    65 std::set<cstring> keyreads, actions;
    +
    66 int apply_count = 0;
    +
    67 std::map<cstring, const IR::Expression *> key_remap;
    +
    68 };
    +
    69 struct FuncInfo {
    +
    70 std::set<cstring> reads, writes;
    +
    71 int apply_count = 0;
    +
    72
    +
    77 bool is_first_write_insert = false;
    +
    78 };
    +
    79 std::map<cstring, VarInfo> available;
    +
    80 std::map<cstring, TableInfo> &tables;
    +
    81 std::map<cstring, FuncInfo> &actions;
    +
    82 std::map<cstring, FuncInfo> &methods;
    +
    83 std::map<cstring, FuncInfo> &states;
    +
    84 TableInfo *inferForTable = nullptr;
    +
    85 FuncInfo *inferForFunc = nullptr;
    +
    86 bool need_key_rewrite = false;
    +
    87 std::function<bool(const Context *, const IR::Expression *)> policy;
    +
    88 bool elimUnusedTables = false;
    +
    89 int uid = -1;
    +
    90 static int uid_ctr;
    +
    91
    +
    92 DoLocalCopyPropagation *clone() const override {
    +
    93 auto *rv = new DoLocalCopyPropagation(*this);
    +
    94 rv->uid = ++uid_ctr;
    +
    95 LOG8("flow_clone(" << uid << ") = " << rv->uid);
    +
    96 return rv;
    +
    97 }
    +
    98 void flow_merge(Visitor &) override;
    +
    99 void flow_copy(ControlFlowVisitor &) override;
    +
    100 bool operator==(const ControlFlowVisitor &) const override;
    +
    101 bool name_overlap(cstring, cstring);
    +
    102 void forOverlapAvail(cstring, std::function<void(cstring, VarInfo *)>);
    +
    103 void dropValuesUsing(cstring);
    +
    104 bool hasSideEffects(const IR::Expression *e, const Visitor::Context *ctxt) {
    +
    105 return bool(::P4::hasSideEffects(typeMap, e, ctxt));
    +
    106 }
    +
    107 bool isHeaderUnionIsValid(const IR::Expression *e);
    +
    108
    +
    109 class LoopPrepass : public Inspector {
    + +
    111 void postorder(const IR::AssignmentStatement *) override;
    +
    112 void postorder(const IR::MethodCallExpression *) override;
    +
    113 void apply_table(TableInfo *tbl);
    +
    114 void apply_function(FuncInfo *tbl);
    +
    115
    +
    116 public:
    +
    117 explicit LoopPrepass(DoLocalCopyPropagation &s) : self(s) {}
    +
    118 };
    +
    119
    +
    120 void visit_local_decl(const IR::Declaration_Variable *);
    +
    121 const IR::Node *postorder(IR::Declaration_Variable *) override;
    +
    122 IR::Expression *preorder(IR::Expression *m) override;
    +
    123 const IR::Expression *copyprop_name(cstring name, const Util::SourceInfo &srcInfo);
    +
    124 const IR::Expression *postorder(IR::PathExpression *) override;
    +
    125 const IR::Expression *preorder(IR::Member *) override;
    +
    126 const IR::Expression *preorder(IR::ArrayIndex *) override;
    +
    127 IR::Statement *preorder(IR::Statement *) override;
    +
    128 IR::AssignmentStatement *preorder(IR::AssignmentStatement *) override;
    +
    129 IR::AssignmentStatement *postorder(IR::AssignmentStatement *) override;
    +
    130 IR::IfStatement *postorder(IR::IfStatement *) override;
    +
    131 IR::ForStatement *preorder(IR::ForStatement *) override;
    +
    132 IR::ForInStatement *preorder(IR::ForInStatement *) override;
    +
    133 IR::MethodCallExpression *postorder(IR::MethodCallExpression *) override;
    +
    134 IR::P4Action *preorder(IR::P4Action *) override;
    +
    135 IR::P4Action *postorder(IR::P4Action *) override;
    +
    136 IR::Function *preorder(IR::Function *) override;
    +
    137 IR::Function *postorder(IR::Function *) override;
    +
    138 IR::P4Control *preorder(IR::P4Control *) override;
    +
    139 void apply_table(TableInfo *tbl);
    +
    140 void apply_function(FuncInfo *tbl);
    +
    141 IR::P4Table *preorder(IR::P4Table *) override;
    +
    142 IR::P4Table *postorder(IR::P4Table *) override;
    +
    143 const IR::P4Parser *postorder(IR::P4Parser *) override;
    +
    144 IR::ParserState *preorder(IR::ParserState *) override;
    +
    145 IR::ParserState *postorder(IR::ParserState *) override;
    +
    146 Visitor::profile_t init_apply(const IR::Node *node) override;
    +
    147 class ElimDead;
    +
    148 class RewriteTableKeys;
    +
    149
    + +
    151
    +
    152 public:
    + +
    154 std::function<bool(const Context *, const IR::Expression *)> policy,
    +
    155 bool eut)
    +
    156 : typeMap(typeMap),
    +
    157 tables(*new std::map<cstring, TableInfo>),
    +
    158 actions(*new std::map<cstring, FuncInfo>),
    +
    159 methods(*new std::map<cstring, FuncInfo>),
    +
    160 states(*new std::map<cstring, FuncInfo>),
    +
    161 policy(policy),
    +
    162 elimUnusedTables(eut) {}
    +
    163};
    -
    162
    -
    - -
    164 public:
    - -
    166 ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking = nullptr,
    -
    167 std::function<bool(const Context *, const IR::Expression *)> policy =
    -
    168 [](const Context *, const IR::Expression *) -> bool { return true; },
    -
    169 bool elimUnusedTables = false) {
    -
    170 if (!typeChecking) typeChecking = new TypeChecking(refMap, typeMap, true);
    -
    171 passes.push_back(typeChecking);
    -
    172 passes.push_back(new DoLocalCopyPropagation(refMap, typeMap, policy, elimUnusedTables));
    -
    173 }
    -
    174 LocalCopyPropagation(ReferenceMap *refMap, TypeMap *typeMap,
    -
    175 std::function<bool(const Context *, const IR::Expression *)> policy)
    -
    176 : LocalCopyPropagation(refMap, typeMap, nullptr, policy) {}
    -
    177};
    +
    164
    +
    + +
    166 public:
    + +
    168 TypeMap *typeMap, TypeChecking *typeChecking = nullptr,
    +
    169 std::function<bool(const Context *, const IR::Expression *)> policy =
    +
    170 [](const Context *, const IR::Expression *) -> bool { return true; },
    +
    171 bool elimUnusedTables = false) {
    +
    172 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap, true);
    +
    173 passes.push_back(typeChecking);
    +
    174 passes.push_back(new DoLocalCopyPropagation(typeMap, policy, elimUnusedTables));
    +
    175 }
    + +
    177 std::function<bool(const Context *, const IR::Expression *)> policy)
    +
    178 : LocalCopyPropagation(typeMap, nullptr, policy) {}
    +
    179};
    -
    178
    -
    179} // namespace P4
    180
    -
    181#endif /* MIDEND_LOCAL_COPYPROP_H_ */
    +
    181} // namespace P4
    +
    182
    +
    183#endif /* MIDEND_LOCAL_COPYPROP_H_ */
    Definition visitor.h:463
    Definition local_copyprop.cpp:69
    -
    Definition local_copyprop.cpp:142
    -
    Definition local_copyprop.h:52
    +
    Definition local_copyprop.cpp:143
    +
    Definition local_copyprop.h:56
    Definition node.h:95
    Definition visitor.h:400
    -
    Definition local_copyprop.h:163
    +
    Definition local_copyprop.h:165
    Definition visitor.h:788
    Definition pass_manager.h:40
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    +
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    diff --git a/navtreeindex1.js b/navtreeindex1.js index 70835ee843d..ca8508ac7bd 100644 --- a/navtreeindex1.js +++ b/navtreeindex1.js @@ -163,10 +163,10 @@ var NAVTREEINDEX1 = "class_p4_1_1_compiler_options.html#ad60cdbf0419d83048c285731e788e334":[13,0,0,74,0], "class_p4_1_1_complex_values.html":[12,0,0,60], "class_p4_1_1_complex_values.html":[13,0,0,76], -"class_p4_1_1_complex_values.html#ac291c7ad90bf1d1061c79ddfdf08366f":[12,0,0,60,4], -"class_p4_1_1_complex_values.html#ac291c7ad90bf1d1061c79ddfdf08366f":[13,0,0,76,4], -"class_p4_1_1_complex_values.html#ac7bb9bf97bd5448607f463b21495da77":[12,0,0,60,3], -"class_p4_1_1_complex_values.html#ac7bb9bf97bd5448607f463b21495da77":[13,0,0,76,3], +"class_p4_1_1_complex_values.html#af0e65a2e15aeff14b9979f398cb48feb":[12,0,0,60,3], +"class_p4_1_1_complex_values.html#af0e65a2e15aeff14b9979f398cb48feb":[13,0,0,76,3], +"class_p4_1_1_complex_values.html#af1df18a2d0d8ab84bc1d8664296dd538":[12,0,0,60,4], +"class_p4_1_1_complex_values.html#af1df18a2d0d8ab84bc1d8664296dd538":[13,0,0,76,4], "class_p4_1_1_compute_def_use.html":[12,0,0,61], "class_p4_1_1_compute_def_use.html":[13,0,0,77], "class_p4_1_1_compute_def_use_1_1_setup_join_points.html":[12,0,0,61,1], diff --git a/nested_structs_8h_source.html b/nested_structs_8h_source.html index 0312b23898e..fe54f8fc89d 100644 --- a/nested_structs_8h_source.html +++ b/nested_structs_8h_source.html @@ -142,79 +142,79 @@
    17#ifndef MIDEND_NESTEDSTRUCTS_H_
    18#define MIDEND_NESTEDSTRUCTS_H_
    19
    -
    20#include "frontends/p4/typeChecking/typeChecker.h"
    -
    21#include "ir/ir.h"
    -
    22
    -
    23namespace P4 {
    -
    24
    -
    -
    25class ComplexValues final {
    -
    26 public:
    -
    -
    31 struct Component : public IHasDbPrint {
    -
    32 virtual const IR::Expression *convertToExpression() = 0;
    -
    33 virtual Component *getComponent(cstring name) = 0;
    -
    34 virtual void dbprint(std::ostream &out) const = 0;
    -
    35 };
    +
    20#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    21#include "frontends/p4/typeChecking/typeChecker.h"
    +
    22#include "ir/ir.h"
    +
    23
    +
    24namespace P4 {
    +
    25
    +
    +
    26class ComplexValues final {
    +
    27 public:
    +
    +
    32 struct Component : public IHasDbPrint {
    +
    33 virtual const IR::Expression *convertToExpression() = 0;
    +
    34 virtual Component *getComponent(cstring name) = 0;
    +
    35 virtual void dbprint(std::ostream &out) const = 0;
    +
    36 };
    -
    36
    -
    -
    37 struct FinalName : public Component {
    -
    38 cstring newName;
    -
    39 explicit FinalName(cstring name) : newName(name) {}
    -
    40 const IR::Expression *convertToExpression() override {
    -
    41 return new IR::PathExpression(IR::ID(newName));
    -
    42 }
    -
    43 Component *getComponent(cstring) override { return nullptr; }
    -
    44 void dbprint(std::ostream &out) const override { out << newName << Log::endl; }
    -
    45 };
    +
    37
    +
    +
    38 struct FinalName : public Component {
    +
    39 cstring newName;
    +
    40 explicit FinalName(cstring name) : newName(name) {}
    +
    41 const IR::Expression *convertToExpression() override {
    +
    42 return new IR::PathExpression(IR::ID(newName));
    +
    43 }
    +
    44 Component *getComponent(cstring) override { return nullptr; }
    +
    45 void dbprint(std::ostream &out) const override { out << newName << Log::endl; }
    +
    46 };
    -
    46
    -
    -
    47 struct FieldsMap : public Component {
    - -
    49 const IR::Type *type;
    -
    50 explicit FieldsMap(const IR::Type *type) : type(type) {
    -
    51 CHECK_NULL(type);
    -
    52 BUG_CHECK(type->is<IR::Type_Struct>(), "%1%: expected a struct", type);
    -
    53 }
    -
    54 const IR::Expression *convertToExpression() override {
    - -
    56 for (auto m : members) {
    -
    57 auto e = m.second->convertToExpression();
    -
    58 vec.push_back(new IR::NamedExpression(m.first, e));
    -
    59 }
    -
    60 return new IR::StructExpression(type->getP4Type(), vec);
    -
    61 }
    -
    62 Component *getComponent(cstring name) override { return ::P4::get(members, name); }
    -
    63 void dbprint(std::ostream &out) const override {
    -
    64 out << Log::indent;
    -
    65 for (auto m : members) out << m.first << "=>" << m.second;
    -
    66 out << Log::unindent;
    -
    67 }
    -
    68 };
    +
    47
    +
    +
    48 struct FieldsMap : public Component {
    + +
    50 const IR::Type *type;
    +
    51 explicit FieldsMap(const IR::Type *type) : type(type) {
    +
    52 CHECK_NULL(type);
    +
    53 BUG_CHECK(type->is<IR::Type_Struct>(), "%1%: expected a struct", type);
    +
    54 }
    +
    55 const IR::Expression *convertToExpression() override {
    + +
    57 for (auto m : members) {
    +
    58 auto e = m.second->convertToExpression();
    +
    59 vec.push_back(new IR::NamedExpression(m.first, e));
    +
    60 }
    +
    61 return new IR::StructExpression(type->getP4Type(), vec);
    +
    62 }
    +
    63 Component *getComponent(cstring name) override { return ::P4::get(members, name); }
    +
    64 void dbprint(std::ostream &out) const override {
    +
    65 out << Log::indent;
    +
    66 for (auto m : members) out << m.first << "=>" << m.second;
    +
    67 out << Log::unindent;
    +
    68 }
    +
    69 };
    -
    69
    -
    70 std::map<const IR::Declaration_Variable *, Component *> values;
    -
    71 std::map<const IR::Expression *, Component *> translation;
    -
    72
    -
    73 ReferenceMap *refMap;
    +
    70
    +
    71 std::map<const IR::Declaration_Variable *, Component *> values;
    +
    72 std::map<const IR::Expression *, Component *> translation;
    +
    73
    74 TypeMap *typeMap;
    -
    75
    -
    76 ComplexValues(ReferenceMap *refMap, TypeMap *typeMap) : refMap(refMap), typeMap(typeMap) {
    -
    77 CHECK_NULL(refMap);
    +
    75 NameGenerator &nameGen;
    +
    76
    +
    77 ComplexValues(TypeMap *typeMap, NameGenerator &nameGen) : typeMap(typeMap), nameGen(nameGen) {
    78 CHECK_NULL(typeMap);
    79 }
    -
    81 bool isNestedStruct(const IR::Type *type);
    +
    81 bool isNestedStruct(const IR::Type *type) const;
    83 template <class T>
    -
    84 void explode(cstring prefix, const IR::Type_Struct *type, FieldsMap *map,
    +
    84 void explode(std::string_view prefix, const IR::Type_Struct *type, FieldsMap *map,
    85 IR::Vector<T> *result);
    -
    86 Component *getTranslation(const IR::IDeclaration *decl) {
    +
    86 Component *getTranslation(const IR::IDeclaration *decl) const {
    87 auto dv = decl->to<IR::Declaration_Variable>();
    88 if (dv == nullptr) return nullptr;
    89 return ::P4::get(values, dv);
    90 }
    -
    91 Component *getTranslation(const IR::Expression *expression) {
    +
    91 Component *getTranslation(const IR::Expression *expression) const {
    92 LOG2("Check translation " << dbp(expression));
    93 return ::P4::get(translation, expression);
    94 }
    @@ -226,62 +226,70 @@
    100
    -
    130class RemoveNestedStructs final : public Transform {
    -
    131 ComplexValues *values;
    -
    132
    -
    133 public:
    -
    134 explicit RemoveNestedStructs(ComplexValues *values) : values(values) {
    -
    135 CHECK_NULL(values);
    +
    130class RemoveNestedStructs final : public Transform, public ResolutionContext {
    +
    131 ComplexValues values;
    +
    132 MinimalNameGenerator nameGen;
    +
    133
    +
    134 public:
    +
    135 explicit RemoveNestedStructs(TypeMap *typeMap) : values(typeMap, nameGen) {
    136 setName("RemoveNestedStructs");
    137 }
    -
    138
    -
    140 const IR::Node *postorder(IR::Declaration_Variable *decl) override;
    -
    142 const IR::Node *postorder(IR::Member *expression) override;
    -
    144 const IR::Node *postorder(IR::PathExpression *expression) override;
    -
    145 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
    -
    146};
    +
    138 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    139 auto rv = Transform::init_apply(node);
    +
    140 node->apply(nameGen);
    +
    141
    +
    142 return rv;
    +
    143 }
    +
    144
    +
    146 const IR::Node *postorder(IR::Declaration_Variable *decl) override;
    +
    148 const IR::Node *postorder(IR::Member *expression) override;
    +
    150 const IR::Node *postorder(IR::PathExpression *expression) override;
    +
    151 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
    +
    152};
    -
    147
    -
    -
    148class NestedStructs final : public PassManager {
    -
    149 public:
    -
    150 NestedStructs(ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    -
    151 auto values = new ComplexValues(refMap, typeMap);
    -
    152 if (!typeChecking) typeChecking = new TypeChecking(refMap, typeMap);
    -
    153 passes.push_back(typeChecking);
    -
    154 passes.push_back(new RemoveNestedStructs(values));
    -
    155 passes.push_back(new ClearTypeMap(typeMap));
    -
    156 setName("NestedStructs");
    -
    157 }
    -
    158};
    +
    153
    +
    +
    154class NestedStructs final : public PassManager {
    +
    155 public:
    +
    156 explicit NestedStructs(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    +
    157 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    158 passes.push_back(typeChecking);
    +
    159 passes.push_back(new RemoveNestedStructs(typeMap));
    +
    160 passes.push_back(new ClearTypeMap(typeMap));
    +
    161 setName("NestedStructs");
    +
    162 }
    +
    163};
    -
    159
    -
    160} // namespace P4
    -
    161
    -
    162#endif /* MIDEND_NESTEDSTRUCTS_H_ */
    +
    164
    +
    165} // namespace P4
    +
    166
    +
    167#endif /* MIDEND_NESTEDSTRUCTS_H_ */
    Definition typeChecker.h:32
    -
    Definition nestedStructs.h:25
    -
    bool isNestedStruct(const IR::Type *type)
    Helper function that test if a struct is nested.
    Definition nestedStructs.cpp:9
    -
    void explode(cstring prefix, const IR::Type_Struct *type, FieldsMap *map, IR::Vector< T > *result)
    Flatten a nested struct to only contain field declaration or non-nested struct.
    Definition nestedStructs.cpp:24
    +
    Definition nestedStructs.h:26
    +
    void explode(std::string_view prefix, const IR::Type_Struct *type, FieldsMap *map, IR::Vector< T > *result)
    Flatten a nested struct to only contain field declaration or non-nested struct.
    Definition nestedStructs.cpp:24
    +
    bool isNestedStruct(const IR::Type *type) const
    Helper function that test if a struct is nested.
    Definition nestedStructs.cpp:9
    Definition stringify.h:33
    The Declaration interface, representing objects with names.
    Definition declaration.h:26
    Definition node.h:52
    Definition node.h:95
    Definition vector.h:58
    -
    Definition nestedStructs.h:148
    +
    Definition referenceMap.h:36
    +
    Definition referenceMap.h:29
    +
    Definition nestedStructs.h:154
    Definition pass_manager.h:40
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition nestedStructs.h:130
    const IR::Node * postorder(IR::Declaration_Variable *decl) override
    rewrite nested structs to non-nested structs
    Definition nestedStructs.cpp:45
    +
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    +
    Definition visitor.h:78
    Definition cstring.h:85
    Definition ordered_map.h:32
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    -
    Definition nestedStructs.h:31
    -
    Definition nestedStructs.h:47
    -
    Definition nestedStructs.h:37
    +
    Definition nestedStructs.h:32
    +
    Definition nestedStructs.h:48
    +
    Definition nestedStructs.h:38
    Definition id.h:28
    T * to() noexcept
    Definition rtti.h:226
    diff --git a/optimize_expressions_8h_source.html b/optimize_expressions_8h_source.html index 8673244763e..b0b413ffc7f 100644 --- a/optimize_expressions_8h_source.html +++ b/optimize_expressions_8h_source.html @@ -135,7 +135,7 @@
    11inline const IR::Expression *optimizeExpression(const IR::Expression *node) {
    12 auto pass = PassRepeated({
    13 new P4::StrengthReduction(nullptr, nullptr),
    -
    14 new P4::ConstantFolding(nullptr, nullptr, false),
    +
    14 new P4::ConstantFolding(nullptr, false),
    15 });
    16 node = node->apply(pass);
    17 BUG_CHECK(::P4::errorCount() == 0, "Encountered errors while trying to optimize expressions.");
    @@ -146,7 +146,7 @@
    21} // namespace P4
    22
    23#endif /* FRONTENDS_P4_OPTIMIZEEXPRESSIONS_H_ */
    -
    Definition constantFolding.h:184
    +
    Definition constantFolding.h:186
    Definition pass_manager.h:145
    Definition strengthReduction.h:119
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/p4tools_2common_2compiler_2midend_8h_source.html b/p4tools_2common_2compiler_2midend_8h_source.html index 81a56e12f2e..80f6119caf0 100644 --- a/p4tools_2common_2compiler_2midend_8h_source.html +++ b/p4tools_2common_2compiler_2midend_8h_source.html @@ -170,7 +170,7 @@
    71
    72#endif /* BACKENDS_P4TOOLS_COMMON_COMPILER_MIDEND_H_ */
    Definition convertEnums.h:29
    -
    Definition convertErrors.h:40
    +
    Definition convertErrors.h:39
    Definition frontends/common/options.h:30
    Definition p4tools/common/compiler/midend.h:24
    P4::TypeMap * getTypeMap()
    Retrieve the type map used in the mid end.
    Definition p4tools/common/compiler/midend.cpp:87
    diff --git a/parser_control_flow_8h_source.html b/parser_control_flow_8h_source.html index 182e9f92294..fa6d1c16d75 100644 --- a/parser_control_flow_8h_source.html +++ b/parser_control_flow_8h_source.html @@ -142,82 +142,81 @@
    17#ifndef FRONTENDS_P4_PARSERCONTROLFLOW_H_
    18#define FRONTENDS_P4_PARSERCONTROLFLOW_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/p4/moveDeclarations.h"
    -
    22#include "frontends/p4/simplify.h"
    -
    23#include "frontends/p4/uniqueNames.h"
    -
    24#include "ir/ir.h"
    -
    25
    -
    26namespace P4 {
    -
    27
    -
    - - -
    81
    -
    82 public:
    -
    83 DoRemoveParserControlFlow() { setName("DoRemoveParserControlFlow"); }
    -
    84 const IR::Node *postorder(IR::ParserState *state) override;
    -
    85 Visitor::profile_t init_apply(const IR::Node *node) override;
    -
    86};
    +
    20#include "frontends/p4/moveDeclarations.h"
    +
    21#include "frontends/p4/simplify.h"
    +
    22#include "frontends/p4/uniqueNames.h"
    +
    23#include "ir/ir.h"
    +
    24
    +
    25namespace P4 {
    +
    26
    +
    + + +
    80
    +
    81 public:
    +
    82 DoRemoveParserControlFlow() { setName("DoRemoveParserControlFlow"); }
    +
    83 const IR::Node *postorder(IR::ParserState *state) override;
    +
    84 Visitor::profile_t init_apply(const IR::Node *node) override;
    +
    85};
    -
    87
    -
    - -
    91 public:
    -
    92 explicit RemoveParserControlFlow(TypeMap *typeMap) : PassRepeated({}) {
    -
    93 passes.emplace_back(new DoRemoveParserControlFlow());
    -
    94 passes.emplace_back(new SimplifyControlFlow(typeMap));
    -
    95 setName("RemoveParserControlFlow");
    -
    96 }
    -
    97};
    +
    86
    +
    + +
    90 public:
    +
    91 explicit RemoveParserControlFlow(TypeMap *typeMap) : PassRepeated({}) {
    +
    92 passes.emplace_back(new DoRemoveParserControlFlow());
    +
    93 passes.emplace_back(new SimplifyControlFlow(typeMap));
    +
    94 setName("RemoveParserControlFlow");
    +
    95 }
    +
    96};
    -
    98
    -
    -
    100class IfInParser : public Inspector {
    -
    101 bool *found;
    -
    102
    -
    103 public:
    -
    104 explicit IfInParser(bool *found) : found(found) {
    -
    105 CHECK_NULL(found);
    -
    106 setName("IfInParser");
    -
    107 }
    -
    108 void postorder(const IR::IfStatement *) override {
    -
    109 if (findContext<IR::P4Parser>()) *found = true;
    -
    110 }
    -
    111};
    +
    97
    +
    +
    99class IfInParser : public Inspector {
    +
    100 bool *found;
    +
    101
    +
    102 public:
    +
    103 explicit IfInParser(bool *found) : found(found) {
    +
    104 CHECK_NULL(found);
    +
    105 setName("IfInParser");
    +
    106 }
    +
    107 void postorder(const IR::IfStatement *) override {
    +
    108 if (findContext<IR::P4Parser>()) *found = true;
    +
    109 }
    +
    110};
    -
    112
    -
    - -
    116 bool found = false;
    -
    117
    -
    118 public:
    -
    119 explicit RemoveParserIfs(TypeMap *typeMap) {
    -
    120 passes.push_back(new IfInParser(&found));
    -
    121 passes.push_back(
    -
    122 new PassIf([this] { return found; },
    -
    123 { // only do this if we found an 'if' in a parser
    -
    124 new UniqueNames(), // Give each local declaration a unique internal name
    -
    125 new MoveDeclarations(true), // Move all local declarations to the beginning
    -
    126 new RemoveParserControlFlow(typeMap)}));
    -
    127 }
    -
    128};
    +
    111
    +
    + +
    115 bool found = false;
    +
    116
    +
    117 public:
    +
    118 explicit RemoveParserIfs(TypeMap *typeMap) {
    +
    119 passes.push_back(new IfInParser(&found));
    +
    120 passes.push_back(
    +
    121 new PassIf([this] { return found; },
    +
    122 { // only do this if we found an 'if' in a parser
    +
    123 new UniqueNames(), // Give each local declaration a unique internal name
    +
    124 new MoveDeclarations(true), // Move all local declarations to the beginning
    +
    125 new RemoveParserControlFlow(typeMap)}));
    +
    126 }
    +
    127};
    -
    129
    -
    130} // namespace P4
    -
    131
    -
    132#endif /* FRONTENDS_P4_PARSERCONTROLFLOW_H_ */
    -
    Converts if statements in parsers into transitions.
    Definition parserControlFlow.h:79
    +
    128
    +
    129} // namespace P4
    +
    130
    +
    131#endif /* FRONTENDS_P4_PARSERCONTROLFLOW_H_ */
    +
    Converts if statements in parsers into transitions.
    Definition parserControlFlow.h:78
    Definition node.h:95
    -
    Detect whether the program contains an 'if' statement in a parser.
    Definition parserControlFlow.h:100
    +
    Detect whether the program contains an 'if' statement in a parser.
    Definition parserControlFlow.h:99
    Definition visitor.h:400
    Definition referenceMap.h:36
    Definition moveDeclarations.h:34
    Definition pass_manager.h:172
    Definition pass_manager.h:40
    Definition pass_manager.h:145
    -
    Definition parserControlFlow.h:90
    -
    Definition parserControlFlow.h:115
    +
    Definition parserControlFlow.h:89
    +
    Definition parserControlFlow.h:114
    Definition simplify.h:70
    Definition visitor.h:424
    Definition typeMap.h:41
    diff --git a/predication_8h_source.html b/predication_8h_source.html index caf3bfef287..4507ac03e29 100644 --- a/predication_8h_source.html +++ b/predication_8h_source.html @@ -142,123 +142,122 @@
    17#ifndef MIDEND_PREDICATION_H_
    18#define MIDEND_PREDICATION_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/p4/typeChecking/typeChecker.h"
    -
    22#include "ir/ir.h"
    -
    23
    -
    24namespace P4 {
    -
    25
    -
    -
    42class Predication final : public Transform {
    -
    46 class EmptyStatementRemover final : public Transform {
    -
    47 public:
    -
    48 EmptyStatementRemover() {}
    -
    49 const IR::Node *postorder(IR::EmptyStatement *statement) override;
    -
    50 const IR::Node *postorder(IR::BlockStatement *statement) override;
    -
    51 };
    -
    58 class ExpressionReplacer final : public Transform {
    -
    59 private:
    -
    60 // Original assignment that the replacer works on
    -
    61 const IR::AssignmentStatement *statement;
    -
    62 // To keep track of the path used while traversing nested if-else statements:
    -
    63 // IF - true / ELSE - false
    -
    64 const std::vector<bool> &traversalPath;
    -
    65 // To store the condition used in every if-else statement
    -
    66 std::vector<const IR::Expression *> &conditions;
    -
    67 // Nesting level of Mux expressions
    -
    68 unsigned currentNestingLevel = 0;
    -
    69 // An indicator used to implement the logic for ArrayIndex transformation
    -
    70 bool visitingIndex = false;
    -
    71
    -
    72 public:
    -
    73 explicit ExpressionReplacer(const IR::AssignmentStatement *a, std::vector<bool> &t,
    -
    74 std::vector<const IR::Expression *> &c)
    -
    75 : statement(a), traversalPath(t), conditions(c) {
    -
    76 CHECK_NULL(a);
    -
    77 }
    -
    78 const IR::Mux *preorder(IR::Mux *mux) override;
    -
    79 void emplaceExpression(IR::Mux *mux);
    -
    80 void visitBranch(IR::Mux *mux, bool then);
    -
    81 void setVisitingIndex(bool val);
    -
    82 };
    -
    83
    -
    84 // Used to dynamically generate names for variables in parts of code
    -
    85 MinimalNameGenerator generator;
    -
    86 // Used to remove empty statements and empty block statements that appear in the code
    -
    87 EmptyStatementRemover remover;
    -
    88 bool inside_action;
    -
    89 // Used to indicate whether or not an ArrayIndex should be modified.
    -
    90 bool modifyIndex = false;
    -
    91 // Tracking the nesting level of IF-ELSE statements
    -
    92 unsigned ifNestingLevel;
    -
    93 // Tracking the nesting level of dependency assignment
    -
    94 unsigned depNestingLevel;
    -
    95 // To store dependent assignments.
    -
    96 // If current statement is equal to any member of dependentNames,
    -
    97 // isStatementdependent of the coresponding statement is set to true.
    -
    98 std::vector<cstring> dependentNames;
    -
    99 // Traverse path of nested if-else statements.
    -
    100 // Size of this vector is the current IF nesting level. IF - true / ELSE - false
    -
    101 std::vector<bool> traversalPath;
    -
    102 std::vector<cstring> dependencies;
    -
    103 // Collects assignment statements with transformed right expression.
    -
    104 // liveAssignments are pushed at the back of liveAssigns vector.
    -
    105 std::map<cstring, const IR::AssignmentStatement *> liveAssignments;
    -
    106 // Vector of assignment statements which collects assignments from
    -
    107 // liveAssignments and dependencies in adequate order. In preorder
    -
    108 // of if statements assignments from liveAssigns are pushed on rv block.
    -
    109 std::vector<const IR::AssignmentStatement *> liveAssigns;
    -
    110 // Vector of ArrayIndex declarations which is used to temporary
    -
    111 // store these declarations so they can later be pushed on the 'rv' block.
    -
    112 std::vector<const IR::Declaration *> indexDeclarations;
    -
    113 // Map that shows if the current statement is dependent.
    -
    114 // Bool value is true for dependent statements,
    -
    115 // false for statements that are not dependent.
    -
    116 std::map<cstring, bool> isStatementDependent;
    -
    117 const IR::Statement *error(const IR::Statement *statement) const {
    -
    118 if (inside_action && ifNestingLevel > 0)
    -
    119 ::P4::error(ErrorType::ERR_UNSUPPORTED_ON_TARGET,
    -
    120 "%1%: Conditional execution in actions unsupported on this target",
    -
    121 statement);
    -
    122 return statement;
    -
    123 }
    -
    124
    -
    125 public:
    -
    126 explicit Predication() : inside_action(false), ifNestingLevel(0), depNestingLevel(0) {
    -
    127 setName("Predication");
    -
    128 }
    -
    129 Visitor::profile_t init_apply(const IR::Node *node) override {
    -
    130 auto rv = Transform::init_apply(node);
    -
    131 node->apply(generator);
    -
    132
    -
    133 return rv;
    -
    134 }
    -
    135
    -
    136 const IR::Expression *clone(const IR::Expression *expression);
    -
    137 const IR::Node *clone(const IR::AssignmentStatement *statement);
    -
    138 const IR::Node *preorder(IR::IfStatement *statement) override;
    -
    139 const IR::Node *preorder(IR::P4Action *action) override;
    -
    140 const IR::Node *postorder(IR::P4Action *action) override;
    -
    141 const IR::Node *preorder(IR::AssignmentStatement *statement) override;
    -
    142 // Assignment dependecy checkers
    -
    143 const IR::Node *preorder(IR::PathExpression *pathExpr) override;
    -
    144 const IR::Node *preorder(IR::Member *member) override;
    -
    145 const IR::Node *preorder(IR::ArrayIndex *arrInd) override;
    -
    146 // The presence of other statements makes predication impossible to apply
    -
    147 const IR::Node *postorder(IR::MethodCallStatement *statement) override {
    -
    148 return error(statement);
    -
    149 }
    -
    150 const IR::Node *postorder(IR::ReturnStatement *statement) override { return error(statement); }
    -
    151 const IR::Node *postorder(IR::ExitStatement *statement) override { return error(statement); }
    -
    152};
    +
    20#include "frontends/p4/typeChecking/typeChecker.h"
    +
    21#include "ir/ir.h"
    +
    22
    +
    23namespace P4 {
    +
    24
    +
    +
    41class Predication final : public Transform {
    +
    45 class EmptyStatementRemover final : public Transform {
    +
    46 public:
    +
    47 EmptyStatementRemover() {}
    +
    48 const IR::Node *postorder(IR::EmptyStatement *statement) override;
    +
    49 const IR::Node *postorder(IR::BlockStatement *statement) override;
    +
    50 };
    +
    57 class ExpressionReplacer final : public Transform {
    +
    58 private:
    +
    59 // Original assignment that the replacer works on
    +
    60 const IR::AssignmentStatement *statement;
    +
    61 // To keep track of the path used while traversing nested if-else statements:
    +
    62 // IF - true / ELSE - false
    +
    63 const std::vector<bool> &traversalPath;
    +
    64 // To store the condition used in every if-else statement
    +
    65 std::vector<const IR::Expression *> &conditions;
    +
    66 // Nesting level of Mux expressions
    +
    67 unsigned currentNestingLevel = 0;
    +
    68 // An indicator used to implement the logic for ArrayIndex transformation
    +
    69 bool visitingIndex = false;
    +
    70
    +
    71 public:
    +
    72 explicit ExpressionReplacer(const IR::AssignmentStatement *a, std::vector<bool> &t,
    +
    73 std::vector<const IR::Expression *> &c)
    +
    74 : statement(a), traversalPath(t), conditions(c) {
    +
    75 CHECK_NULL(a);
    +
    76 }
    +
    77 const IR::Mux *preorder(IR::Mux *mux) override;
    +
    78 void emplaceExpression(IR::Mux *mux);
    +
    79 void visitBranch(IR::Mux *mux, bool then);
    +
    80 void setVisitingIndex(bool val);
    +
    81 };
    +
    82
    +
    83 // Used to dynamically generate names for variables in parts of code
    +
    84 MinimalNameGenerator generator;
    +
    85 // Used to remove empty statements and empty block statements that appear in the code
    +
    86 EmptyStatementRemover remover;
    +
    87 bool inside_action;
    +
    88 // Used to indicate whether or not an ArrayIndex should be modified.
    +
    89 bool modifyIndex = false;
    +
    90 // Tracking the nesting level of IF-ELSE statements
    +
    91 unsigned ifNestingLevel;
    +
    92 // Tracking the nesting level of dependency assignment
    +
    93 unsigned depNestingLevel;
    +
    94 // To store dependent assignments.
    +
    95 // If current statement is equal to any member of dependentNames,
    +
    96 // isStatementdependent of the coresponding statement is set to true.
    +
    97 std::vector<cstring> dependentNames;
    +
    98 // Traverse path of nested if-else statements.
    +
    99 // Size of this vector is the current IF nesting level. IF - true / ELSE - false
    +
    100 std::vector<bool> traversalPath;
    +
    101 std::vector<cstring> dependencies;
    +
    102 // Collects assignment statements with transformed right expression.
    +
    103 // liveAssignments are pushed at the back of liveAssigns vector.
    +
    104 std::map<cstring, const IR::AssignmentStatement *> liveAssignments;
    +
    105 // Vector of assignment statements which collects assignments from
    +
    106 // liveAssignments and dependencies in adequate order. In preorder
    +
    107 // of if statements assignments from liveAssigns are pushed on rv block.
    +
    108 std::vector<const IR::AssignmentStatement *> liveAssigns;
    +
    109 // Vector of ArrayIndex declarations which is used to temporary
    +
    110 // store these declarations so they can later be pushed on the 'rv' block.
    +
    111 std::vector<const IR::Declaration *> indexDeclarations;
    +
    112 // Map that shows if the current statement is dependent.
    +
    113 // Bool value is true for dependent statements,
    +
    114 // false for statements that are not dependent.
    +
    115 std::map<cstring, bool> isStatementDependent;
    +
    116 const IR::Statement *error(const IR::Statement *statement) const {
    +
    117 if (inside_action && ifNestingLevel > 0)
    +
    118 ::P4::error(ErrorType::ERR_UNSUPPORTED_ON_TARGET,
    +
    119 "%1%: Conditional execution in actions unsupported on this target",
    +
    120 statement);
    +
    121 return statement;
    +
    122 }
    +
    123
    +
    124 public:
    +
    125 explicit Predication() : inside_action(false), ifNestingLevel(0), depNestingLevel(0) {
    +
    126 setName("Predication");
    +
    127 }
    +
    128 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    129 auto rv = Transform::init_apply(node);
    +
    130 node->apply(generator);
    +
    131
    +
    132 return rv;
    +
    133 }
    +
    134
    +
    135 const IR::Expression *clone(const IR::Expression *expression);
    +
    136 const IR::Node *clone(const IR::AssignmentStatement *statement);
    +
    137 const IR::Node *preorder(IR::IfStatement *statement) override;
    +
    138 const IR::Node *preorder(IR::P4Action *action) override;
    +
    139 const IR::Node *postorder(IR::P4Action *action) override;
    +
    140 const IR::Node *preorder(IR::AssignmentStatement *statement) override;
    +
    141 // Assignment dependecy checkers
    +
    142 const IR::Node *preorder(IR::PathExpression *pathExpr) override;
    +
    143 const IR::Node *preorder(IR::Member *member) override;
    +
    144 const IR::Node *preorder(IR::ArrayIndex *arrInd) override;
    +
    145 // The presence of other statements makes predication impossible to apply
    +
    146 const IR::Node *postorder(IR::MethodCallStatement *statement) override {
    +
    147 return error(statement);
    +
    148 }
    +
    149 const IR::Node *postorder(IR::ReturnStatement *statement) override { return error(statement); }
    +
    150 const IR::Node *postorder(IR::ExitStatement *statement) override { return error(statement); }
    +
    151};
    -
    153
    -
    154} // namespace P4
    -
    155
    -
    156#endif /* MIDEND_PREDICATION_H_ */
    +
    152
    +
    153} // namespace P4
    +
    154
    +
    155#endif /* MIDEND_PREDICATION_H_ */
    Definition node.h:95
    Definition referenceMap.h:36
    -
    Definition predication.h:42
    +
    Definition predication.h:41
    Definition visitor.h:424
    Definition visitor.h:78
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/print_utils_8h_source.html b/print_utils_8h_source.html index f34661a624d..c1486a199fe 100644 --- a/print_utils_8h_source.html +++ b/print_utils_8h_source.html @@ -177,7 +177,7 @@
    53#endif /* BACKENDS_DPDK_PRINTUTILS_H_ */
    Definition printUtils.h:31
    Definition visitor.h:400
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    cstring toStr(const IR::Node *const n)
    Definition printUtils.cpp:113
    diff --git a/remove_complex_expressions_8h_source.html b/remove_complex_expressions_8h_source.html index 7b4101a4839..5a37b6916b0 100644 --- a/remove_complex_expressions_8h_source.html +++ b/remove_complex_expressions_8h_source.html @@ -157,80 +157,87 @@
    39
    - +
    46 public:
    -
    47 P4::ReferenceMap *refMap;
    +
    48 P4::TypeMap *typeMap;
    52
    - -
    54 RemoveComplexExpressionsPolicy *policy = nullptr)
    -
    55 : refMap(refMap), typeMap(typeMap), policy(policy) {
    -
    56 CHECK_NULL(refMap);
    -
    57 CHECK_NULL(typeMap);
    -
    58 setName("RemoveComplexExpressions");
    -
    59 }
    -
    60
    -
    61 const IR::PathExpression *createTemporary(const IR::Expression *expression);
    -
    62 const IR::Expression *simplifyExpression(const IR::Expression *expression, bool force);
    -
    63 const IR::Vector<IR::Expression> *simplifyExpressions(const IR::Vector<IR::Expression> *vec,
    -
    64 bool force = false);
    -
    65 const IR::Vector<IR::Argument> *simplifyExpressions(const IR::Vector<IR::Argument> *vec);
    -
    66 const IR::IndexedVector<IR::NamedExpression> *simplifyExpressions(
    - -
    68
    -
    69 const IR::Node *simpleStatement(IR::Statement *statement);
    -
    70
    -
    71 const IR::Node *postorder(IR::SelectExpression *expression) override;
    -
    72 const IR::Node *preorder(IR::ParserState *state) override {
    -
    73 assignments.clear();
    -
    74 return state;
    -
    75 }
    -
    76 const IR::Node *postorder(IR::ParserState *state) override {
    -
    77 state->components.append(assignments);
    -
    78 return state;
    -
    79 }
    -
    80 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
    -
    81 const IR::Node *preorder(IR::P4Parser *parser) override {
    -
    82 newDecls.clear();
    -
    83 return parser;
    +
    53 explicit RemoveComplexExpressions(P4::TypeMap *typeMap,
    +
    54 RemoveComplexExpressionsPolicy *policy = nullptr)
    +
    55 : typeMap(typeMap), policy(policy) {
    +
    56 CHECK_NULL(typeMap);
    +
    57 setName("RemoveComplexExpressions");
    +
    58 }
    +
    59 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    60 auto rv = Transform::init_apply(node);
    +
    61 node->apply(nameGen);
    +
    62
    +
    63 return rv;
    +
    64 }
    +
    65
    +
    66 const IR::PathExpression *createTemporary(const IR::Expression *expression);
    +
    67 const IR::Expression *simplifyExpression(const IR::Expression *expression, bool force);
    +
    68 const IR::Vector<IR::Expression> *simplifyExpressions(const IR::Vector<IR::Expression> *vec,
    +
    69 bool force = false);
    +
    70 const IR::Vector<IR::Argument> *simplifyExpressions(const IR::Vector<IR::Argument> *vec);
    +
    71 const IR::IndexedVector<IR::NamedExpression> *simplifyExpressions(
    + +
    73
    +
    74 const IR::Node *simpleStatement(IR::Statement *statement);
    +
    75
    +
    76 const IR::Node *postorder(IR::SelectExpression *expression) override;
    +
    77 const IR::Node *preorder(IR::ParserState *state) override {
    +
    78 assignments.clear();
    +
    79 return state;
    +
    80 }
    +
    81 const IR::Node *postorder(IR::ParserState *state) override {
    +
    82 state->components.append(assignments);
    +
    83 return state;
    84 }
    -
    85 const IR::Node *postorder(IR::P4Parser *parser) override {
    -
    86 if (newDecls.size() != 0) {
    -
    87 // prepend declarations
    -
    88 newDecls.append(parser->parserLocals);
    -
    89 parser->parserLocals = newDecls;
    -
    90 }
    -
    91 return parser;
    -
    92 }
    -
    93 const IR::Node *preorder(IR::P4Control *control) override;
    -
    94 const IR::Node *postorder(IR::P4Control *control) override {
    -
    95 if (newDecls.size() != 0) {
    -
    96 // prepend declarations
    -
    97 newDecls.append(control->controlLocals);
    -
    98 control->controlLocals = newDecls;
    -
    99 }
    -
    100 return control;
    -
    101 }
    -
    102 const IR::Node *postorder(IR::Statement *statement) override;
    -
    103 const IR::Node *postorder(IR::MethodCallStatement *statement) override;
    -
    104};
    +
    85 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
    +
    86 const IR::Node *preorder(IR::P4Parser *parser) override {
    +
    87 newDecls.clear();
    +
    88 return parser;
    +
    89 }
    +
    90 const IR::Node *postorder(IR::P4Parser *parser) override {
    +
    91 if (newDecls.size() != 0) {
    +
    92 // prepend declarations
    +
    93 newDecls.append(parser->parserLocals);
    +
    94 parser->parserLocals = newDecls;
    +
    95 }
    +
    96 return parser;
    +
    97 }
    +
    98 const IR::Node *preorder(IR::P4Control *control) override;
    +
    99 const IR::Node *postorder(IR::P4Control *control) override {
    +
    100 if (newDecls.size() != 0) {
    +
    101 // prepend declarations
    +
    102 newDecls.append(control->controlLocals);
    +
    103 control->controlLocals = newDecls;
    +
    104 }
    +
    105 return control;
    +
    106 }
    +
    107 const IR::Node *postorder(IR::Statement *statement) override;
    +
    108 const IR::Node *postorder(IR::MethodCallStatement *statement) override;
    +
    109};
    -
    105
    -
    106} // namespace P4
    -
    107
    -
    108#endif /* MIDEND_REMOVECOMPLEXEXPRESSIONS_H_ */
    +
    110
    +
    111} // namespace P4
    +
    112
    +
    113#endif /* MIDEND_REMOVECOMPLEXEXPRESSIONS_H_ */
    Definition node.h:52
    Definition node.h:95
    Definition vector.h:58
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    +
    Definition referenceMap.h:36
    Definition removeComplexExpressions.h:45
    Definition removeComplexExpressions.h:30
    virtual bool convert(const IR::P4Control *control) const =0
    +
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    Definition visitor.h:424
    Definition typeMap.h:41
    +
    Definition visitor.h:78
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/remove_exits_8h_source.html b/remove_exits_8h_source.html index 063a6a61779..b4ee8a6af91 100644 --- a/remove_exits_8h_source.html +++ b/remove_exits_8h_source.html @@ -191,7 +191,7 @@
    72
    73#endif /* MIDEND_REMOVEEXITS_H_ */
    Definition removeExits.h:35
    -
    Definition removeReturns.h:122
    +
    Definition removeReturns.h:121
    Definition node.h:95
    Definition pass_manager.h:40
    Definition removeExits.h:61
    diff --git a/remove_parameters_8h_source.html b/remove_parameters_8h_source.html index 85cdbac9d25..e6de60a0258 100644 --- a/remove_parameters_8h_source.html +++ b/remove_parameters_8h_source.html @@ -142,108 +142,107 @@
    17#ifndef FRONTENDS_P4_REMOVEPARAMETERS_H_
    18#define FRONTENDS_P4_REMOVEPARAMETERS_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/common/resolveReferences/resolveReferences.h"
    -
    22#include "frontends/p4/typeChecking/typeChecker.h"
    -
    23#include "frontends/p4/typeMap.h"
    -
    24#include "ir/ir.h"
    -
    25
    -
    26namespace P4 {
    -
    27
    -
    - -
    34 std::map<const IR::P4Action *, const IR::MethodCallExpression *> invocations;
    -
    35 std::set<const IR::P4Action *> all; // for these actions remove all parameters
    -
    36 std::set<const IR::MethodCallExpression *> calls;
    -
    38 std::map<const IR::MethodCallExpression *, unsigned> defaultActions;
    -
    39
    -
    40 public:
    -
    41 void bind(const IR::P4Action *action, const IR::MethodCallExpression *invocation,
    -
    42 bool allParams) {
    -
    43 CHECK_NULL(action);
    -
    44 BUG_CHECK(invocations.find(action) == invocations.end(), "%1%: action called twice",
    -
    45 action);
    -
    46 invocations.emplace(action, invocation);
    -
    47 if (allParams) all.emplace(action);
    -
    48 calls.emplace(invocation);
    -
    49 }
    -
    50 void bindDefaultAction(const IR::P4Action *action,
    -
    51 const IR::MethodCallExpression *defaultInvocation) {
    -
    52 // We must have a binding for this action already.
    -
    53 auto actionCallInvocation = ::P4::get(invocations, action);
    -
    54 CHECK_NULL(actionCallInvocation);
    -
    55 // We must remove all arguments which are bound in the action list.
    -
    56 unsigned boundArgs = actionCallInvocation->arguments->size();
    -
    57 defaultActions.emplace(defaultInvocation, boundArgs);
    -
    58 }
    -
    59 const IR::MethodCallExpression *get(const IR::P4Action *action) const {
    -
    60 return ::P4::get(invocations, action);
    -
    61 }
    -
    62 bool removeAllParameters(const IR::P4Action *action) const {
    -
    63 return all.find(action) != all.end();
    -
    64 }
    -
    65 bool isCall(const IR::MethodCallExpression *expression) const {
    -
    66 return calls.find(expression) != calls.end();
    -
    67 }
    -
    68 unsigned argsToRemove(const IR::MethodCallExpression *defaultCall) const {
    -
    69 if (defaultActions.find(defaultCall) == defaultActions.end()) return 0;
    -
    70 return ::P4::get(defaultActions, defaultCall);
    -
    71 }
    -
    72};
    +
    20#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    21#include "frontends/p4/typeChecking/typeChecker.h"
    +
    22#include "frontends/p4/typeMap.h"
    +
    23#include "ir/ir.h"
    +
    24
    +
    25namespace P4 {
    +
    26
    +
    + +
    33 std::map<const IR::P4Action *, const IR::MethodCallExpression *> invocations;
    +
    34 std::set<const IR::P4Action *> all; // for these actions remove all parameters
    +
    35 std::set<const IR::MethodCallExpression *> calls;
    +
    37 std::map<const IR::MethodCallExpression *, unsigned> defaultActions;
    +
    38
    +
    39 public:
    +
    40 void bind(const IR::P4Action *action, const IR::MethodCallExpression *invocation,
    +
    41 bool allParams) {
    +
    42 CHECK_NULL(action);
    +
    43 BUG_CHECK(invocations.find(action) == invocations.end(), "%1%: action called twice",
    +
    44 action);
    +
    45 invocations.emplace(action, invocation);
    +
    46 if (allParams) all.emplace(action);
    +
    47 calls.emplace(invocation);
    +
    48 }
    +
    49 void bindDefaultAction(const IR::P4Action *action,
    +
    50 const IR::MethodCallExpression *defaultInvocation) {
    +
    51 // We must have a binding for this action already.
    +
    52 auto actionCallInvocation = ::P4::get(invocations, action);
    +
    53 CHECK_NULL(actionCallInvocation);
    +
    54 // We must remove all arguments which are bound in the action list.
    +
    55 unsigned boundArgs = actionCallInvocation->arguments->size();
    +
    56 defaultActions.emplace(defaultInvocation, boundArgs);
    +
    57 }
    +
    58 const IR::MethodCallExpression *get(const IR::P4Action *action) const {
    +
    59 return ::P4::get(invocations, action);
    +
    60 }
    +
    61 bool removeAllParameters(const IR::P4Action *action) const {
    +
    62 return all.find(action) != all.end();
    +
    63 }
    +
    64 bool isCall(const IR::MethodCallExpression *expression) const {
    +
    65 return calls.find(expression) != calls.end();
    +
    66 }
    +
    67 unsigned argsToRemove(const IR::MethodCallExpression *defaultCall) const {
    +
    68 if (defaultActions.find(defaultCall) == defaultActions.end()) return 0;
    +
    69 return ::P4::get(defaultActions, defaultCall);
    +
    70 }
    +
    71};
    -
    73
    -
    - -
    75 TypeMap *typeMap;
    -
    76 ActionInvocation *invocations;
    -
    77
    -
    78 public:
    -
    79 FindActionParameters(TypeMap *typeMap, ActionInvocation *invocations)
    -
    80 : typeMap(typeMap), invocations(invocations) {
    -
    81 CHECK_NULL(invocations);
    -
    82 CHECK_NULL(typeMap);
    -
    83 setName("FindActionParameters");
    -
    84 }
    -
    85
    -
    86 void postorder(const IR::ActionListElement *element) override;
    -
    87 void postorder(const IR::MethodCallExpression *expression) override;
    -
    88};
    +
    72
    +
    + +
    74 TypeMap *typeMap;
    +
    75 ActionInvocation *invocations;
    +
    76
    +
    77 public:
    +
    78 FindActionParameters(TypeMap *typeMap, ActionInvocation *invocations)
    +
    79 : typeMap(typeMap), invocations(invocations) {
    +
    80 CHECK_NULL(invocations);
    +
    81 CHECK_NULL(typeMap);
    +
    82 setName("FindActionParameters");
    +
    83 }
    +
    84
    +
    85 void postorder(const IR::ActionListElement *element) override;
    +
    86 void postorder(const IR::MethodCallExpression *expression) override;
    +
    87};
    -
    89
    -
    - -
    117 ActionInvocation *invocations;
    -
    118
    -
    119 public:
    -
    120 explicit DoRemoveActionParameters(ActionInvocation *invocations) : invocations(invocations) {
    -
    121 CHECK_NULL(invocations);
    -
    122 setName("DoRemoveActionParameters");
    -
    123 }
    -
    124
    -
    125 const IR::Node *postorder(IR::P4Action *table) override;
    -
    126 const IR::Node *postorder(IR::ActionListElement *element) override;
    -
    127 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
    -
    128 ActionInvocation *getInvocations() { return invocations; }
    -
    129};
    +
    88
    +
    + +
    116 ActionInvocation *invocations;
    +
    117
    +
    118 public:
    +
    119 explicit DoRemoveActionParameters(ActionInvocation *invocations) : invocations(invocations) {
    +
    120 CHECK_NULL(invocations);
    +
    121 setName("DoRemoveActionParameters");
    +
    122 }
    +
    123
    +
    124 const IR::Node *postorder(IR::P4Action *table) override;
    +
    125 const IR::Node *postorder(IR::ActionListElement *element) override;
    +
    126 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
    +
    127 ActionInvocation *getInvocations() { return invocations; }
    +
    128};
    -
    130
    -
    - -
    132 public:
    -
    133 explicit RemoveActionParameters(TypeMap *typeMap, TypeChecking *typeChecking = nullptr);
    -
    134};
    +
    129
    +
    + +
    131 public:
    +
    132 explicit RemoveActionParameters(TypeMap *typeMap, TypeChecking *typeChecking = nullptr);
    +
    133};
    -
    135
    -
    136} // namespace P4
    -
    137
    -
    138#endif /* FRONTENDS_P4_REMOVEPARAMETERS_H_ */
    -
    Definition removeParameters.h:33
    -
    Definition removeParameters.h:116
    -
    Definition removeParameters.h:74
    +
    134
    +
    135} // namespace P4
    +
    136
    +
    137#endif /* FRONTENDS_P4_REMOVEPARAMETERS_H_ */
    +
    Definition removeParameters.h:32
    +
    Definition removeParameters.h:115
    +
    Definition removeParameters.h:73
    Definition node.h:95
    Definition visitor.h:400
    Definition pass_manager.h:40
    -
    Definition removeParameters.h:131
    +
    Definition removeParameters.h:130
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    Definition visitor.h:424
    Definition typeChecker.h:55
    diff --git a/remove_returns_8h_source.html b/remove_returns_8h_source.html index 9d68fbec74c..7548ab41299 100644 --- a/remove_returns_8h_source.html +++ b/remove_returns_8h_source.html @@ -142,127 +142,126 @@
    17#ifndef FRONTENDS_P4_REMOVERETURNS_H_
    18#define FRONTENDS_P4_REMOVERETURNS_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/common/resolveReferences/resolveReferences.h"
    -
    22#include "frontends/p4/ternaryBool.h"
    -
    23#include "frontends/p4/typeChecking/typeChecker.h"
    -
    24#include "ir/ir.h"
    -
    25
    -
    26namespace P4 {
    -
    27using namespace literals;
    -
    28
    -
    -
    34class HasExits : public Inspector {
    -
    35 public:
    -
    36 bool hasExits;
    -
    37 bool hasReturns;
    -
    38 HasExits() : hasExits(false), hasReturns(false) { setName("HasExits"); }
    -
    39
    -
    40 void postorder(const IR::ExitStatement *) override { hasExits = true; }
    -
    41 void postorder(const IR::ReturnStatement *) override { hasReturns = true; }
    -
    42};
    +
    20#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    21#include "frontends/p4/ternaryBool.h"
    +
    22#include "frontends/p4/typeChecking/typeChecker.h"
    +
    23#include "ir/ir.h"
    +
    24
    +
    25namespace P4 {
    +
    26using namespace literals;
    +
    27
    +
    +
    33class HasExits : public Inspector {
    +
    34 public:
    +
    35 bool hasExits;
    +
    36 bool hasReturns;
    +
    37 HasExits() : hasExits(false), hasReturns(false) { setName("HasExits"); }
    +
    38
    +
    39 void postorder(const IR::ExitStatement *) override { hasExits = true; }
    +
    40 void postorder(const IR::ReturnStatement *) override { hasReturns = true; }
    +
    41};
    -
    43
    -
    - -
    70 /* This pass does not use (inherit from) ControlFlowVisitor, even though it is doing
    -
    71 * control flow analysis, as it turns out to be more efficient to do it directly here
    -
    72 * by overloading the branching constructs (if/switch/loops) and not cloning the visitor,
    -
    73 * because we *only* care about statements (not expressions) locally in a block (and
    -
    74 * not across calls), and we only have one bit of data (hasJumped flag). */
    -
    75
    -
    78 bool hasJumped = false;
    -
    79
    -
    82 bool movedToIfBranch = false;
    -
    83
    -
    84 bool preorder(IR::BlockStatement *) override;
    -
    85 bool moveFromParentTo(const IR::Statement *&child);
    -
    86 bool preorder(IR::IfStatement *) override;
    -
    87 bool preorder(IR::SwitchStatement *) override;
    -
    88 void postorder(IR::LoopStatement *) override;
    -
    89 bool branch() {
    -
    90 hasJumped = true;
    -
    91 // no need to visit children
    -
    92 return false;
    -
    93 }
    -
    94 bool preorder(IR::BreakStatement *) override { return branch(); }
    -
    95 bool preorder(IR::ContinueStatement *) override { return branch(); }
    -
    96 bool preorder(IR::ExitStatement *) override { return branch(); }
    -
    97 bool preorder(IR::ReturnStatement *) override { return branch(); }
    -
    98 // Only visit statements, skip all expressions
    -
    99 bool preorder(IR::Expression *) override { return false; }
    -
    100
    -
    101 public:
    - -
    103};
    +
    42
    +
    + +
    69 /* This pass does not use (inherit from) ControlFlowVisitor, even though it is doing
    +
    70 * control flow analysis, as it turns out to be more efficient to do it directly here
    +
    71 * by overloading the branching constructs (if/switch/loops) and not cloning the visitor,
    +
    72 * because we *only* care about statements (not expressions) locally in a block (and
    +
    73 * not across calls), and we only have one bit of data (hasJumped flag). */
    +
    74
    +
    77 bool hasJumped = false;
    +
    78
    +
    81 bool movedToIfBranch = false;
    +
    82
    +
    83 bool preorder(IR::BlockStatement *) override;
    +
    84 bool moveFromParentTo(const IR::Statement *&child);
    +
    85 bool preorder(IR::IfStatement *) override;
    +
    86 bool preorder(IR::SwitchStatement *) override;
    +
    87 void postorder(IR::LoopStatement *) override;
    +
    88 bool branch() {
    +
    89 hasJumped = true;
    +
    90 // no need to visit children
    +
    91 return false;
    +
    92 }
    +
    93 bool preorder(IR::BreakStatement *) override { return branch(); }
    +
    94 bool preorder(IR::ContinueStatement *) override { return branch(); }
    +
    95 bool preorder(IR::ExitStatement *) override { return branch(); }
    +
    96 bool preorder(IR::ReturnStatement *) override { return branch(); }
    +
    97 // Only visit statements, skip all expressions
    +
    98 bool preorder(IR::Expression *) override { return false; }
    +
    99
    +
    100 public:
    + +
    102};
    -
    104
    -
    - -
    123 protected:
    -
    124 MinimalNameGenerator nameGen;
    -
    125 IR::ID returnVar; // one for each context
    -
    126 IR::ID returnedValue; // only for functions that return expressions
    -
    127 cstring variableName;
    -
    128 cstring retValName;
    -
    129
    -
    130 std::vector<TernaryBool> stack;
    -
    131 void push() { stack.push_back(TernaryBool::No); }
    -
    132 void pop() { stack.pop_back(); }
    -
    133 void set(TernaryBool r) {
    -
    134 BUG_CHECK(!stack.empty(), "Empty stack");
    -
    135 stack.back() = r;
    -
    136 }
    -
    137 TernaryBool hasReturned() {
    -
    138 BUG_CHECK(!stack.empty(), "Empty stack");
    -
    139 return stack.back();
    -
    140 }
    -
    141
    -
    142 public:
    -
    143 explicit DoRemoveReturns(cstring varName = "hasReturned"_cs, cstring retValName = "retval"_cs)
    -
    144 : variableName(varName), retValName(retValName) {
    -
    145 visitDagOnce = false;
    -
    146 setName("DoRemoveReturns");
    -
    147 }
    -
    148
    -
    149 const IR::Node *preorder(IR::Function *function) override;
    -
    150 const IR::Node *preorder(IR::BlockStatement *statement) override;
    -
    151 const IR::Node *preorder(IR::ReturnStatement *statement) override;
    -
    152 const IR::Node *preorder(IR::ExitStatement *statement) override;
    -
    153 const IR::Node *preorder(IR::IfStatement *statement) override;
    -
    154 const IR::Node *preorder(IR::SwitchStatement *statement) override;
    -
    155
    -
    156 const IR::Node *preorder(IR::P4Action *action) override;
    -
    157 const IR::Node *preorder(IR::P4Control *control) override;
    -
    158 const IR::Node *preorder(IR::P4Parser *parser) override {
    -
    159 prune();
    -
    160 return parser;
    -
    161 }
    -
    162
    -
    163 const IR::Node *postorder(IR::LoopStatement *loop) override;
    -
    164 profile_t init_apply(const IR::Node *node) override;
    -
    165};
    +
    103
    +
    + +
    122 protected:
    +
    123 MinimalNameGenerator nameGen;
    +
    124 IR::ID returnVar; // one for each context
    +
    125 IR::ID returnedValue; // only for functions that return expressions
    +
    126 cstring variableName;
    +
    127 cstring retValName;
    +
    128
    +
    129 std::vector<TernaryBool> stack;
    +
    130 void push() { stack.push_back(TernaryBool::No); }
    +
    131 void pop() { stack.pop_back(); }
    +
    132 void set(TernaryBool r) {
    +
    133 BUG_CHECK(!stack.empty(), "Empty stack");
    +
    134 stack.back() = r;
    +
    135 }
    +
    136 TernaryBool hasReturned() {
    +
    137 BUG_CHECK(!stack.empty(), "Empty stack");
    +
    138 return stack.back();
    +
    139 }
    +
    140
    +
    141 public:
    +
    142 explicit DoRemoveReturns(cstring varName = "hasReturned"_cs, cstring retValName = "retval"_cs)
    +
    143 : variableName(varName), retValName(retValName) {
    +
    144 visitDagOnce = false;
    +
    145 setName("DoRemoveReturns");
    +
    146 }
    +
    147
    +
    148 const IR::Node *preorder(IR::Function *function) override;
    +
    149 const IR::Node *preorder(IR::BlockStatement *statement) override;
    +
    150 const IR::Node *preorder(IR::ReturnStatement *statement) override;
    +
    151 const IR::Node *preorder(IR::ExitStatement *statement) override;
    +
    152 const IR::Node *preorder(IR::IfStatement *statement) override;
    +
    153 const IR::Node *preorder(IR::SwitchStatement *statement) override;
    +
    154
    +
    155 const IR::Node *preorder(IR::P4Action *action) override;
    +
    156 const IR::Node *preorder(IR::P4Control *control) override;
    +
    157 const IR::Node *preorder(IR::P4Parser *parser) override {
    +
    158 prune();
    +
    159 return parser;
    +
    160 }
    +
    161
    +
    162 const IR::Node *postorder(IR::LoopStatement *loop) override;
    +
    163 profile_t init_apply(const IR::Node *node) override;
    +
    164};
    -
    166
    -
    - -
    168 public:
    - -
    170};
    +
    165
    +
    + +
    167 public:
    + +
    169};
    -
    171
    -
    172} // namespace P4
    -
    173
    -
    174#endif /* FRONTENDS_P4_REMOVERETURNS_H_ */
    -
    Definition removeReturns.h:122
    -
    Definition removeReturns.h:34
    +
    170
    +
    171} // namespace P4
    +
    172
    +
    173#endif /* FRONTENDS_P4_REMOVERETURNS_H_ */
    +
    Definition removeReturns.h:121
    +
    Definition removeReturns.h:33
    Definition node.h:95
    Definition visitor.h:400
    Definition referenceMap.h:36
    Definition visitor.h:372
    -
    Definition removeReturns.h:69
    +
    Definition removeReturns.h:68
    Definition pass_manager.h:40
    -
    Definition removeReturns.h:167
    +
    Definition removeReturns.h:166
    Definition visitor.h:424
    Definition visitor.h:78
    Definition cstring.h:85
    diff --git a/remove_select_booleans_8h_source.html b/remove_select_booleans_8h_source.html index 726b7d1a4e9..35d87409e20 100644 --- a/remove_select_booleans_8h_source.html +++ b/remove_select_booleans_8h_source.html @@ -142,51 +142,50 @@
    17#ifndef MIDEND_REMOVESELECTBOOLEANS_H_
    18#define MIDEND_REMOVESELECTBOOLEANS_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/p4/typeChecking/typeChecker.h"
    -
    22#include "frontends/p4/typeMap.h"
    -
    23#include "ir/ir.h"
    -
    24
    -
    25namespace P4 {
    -
    26
    -
    - -
    35 const P4::TypeMap *typeMap;
    -
    36
    -
    37 const IR::Expression *addToplevelCasts(const IR::Expression *expression);
    -
    38
    -
    39 public:
    -
    40 explicit DoRemoveSelectBooleans(const P4::TypeMap *typeMap) : typeMap(typeMap) {
    -
    41 CHECK_NULL(typeMap);
    -
    42 setName("DoRemoveSelectBooleans");
    -
    43 }
    -
    44
    -
    45 const IR::Node *postorder(IR::SelectExpression *expression) override;
    -
    46 const IR::Node *postorder(IR::SelectCase *selectCase) override;
    -
    47};
    +
    20#include "frontends/p4/typeChecking/typeChecker.h"
    +
    21#include "frontends/p4/typeMap.h"
    +
    22#include "ir/ir.h"
    +
    23
    +
    24namespace P4 {
    +
    25
    +
    + +
    34 const P4::TypeMap *typeMap;
    +
    35
    +
    36 const IR::Expression *addToplevelCasts(const IR::Expression *expression);
    +
    37
    +
    38 public:
    +
    39 explicit DoRemoveSelectBooleans(const P4::TypeMap *typeMap) : typeMap(typeMap) {
    +
    40 CHECK_NULL(typeMap);
    +
    41 setName("DoRemoveSelectBooleans");
    +
    42 }
    +
    43
    +
    44 const IR::Node *postorder(IR::SelectExpression *expression) override;
    +
    45 const IR::Node *postorder(IR::SelectCase *selectCase) override;
    +
    46};
    -
    48
    -
    - -
    50 public:
    -
    51 explicit RemoveSelectBooleans(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    -
    52 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    -
    53 passes.push_back(typeChecking);
    -
    54 passes.push_back(new DoRemoveSelectBooleans(typeMap));
    -
    55 passes.push_back(new ClearTypeMap(typeMap)); // some types have changed
    -
    56 setName("RemoveSelectBooleans");
    -
    57 }
    -
    58};
    +
    47
    +
    + +
    49 public:
    +
    50 explicit RemoveSelectBooleans(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    +
    51 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    52 passes.push_back(typeChecking);
    +
    53 passes.push_back(new DoRemoveSelectBooleans(typeMap));
    +
    54 passes.push_back(new ClearTypeMap(typeMap)); // some types have changed
    +
    55 setName("RemoveSelectBooleans");
    +
    56 }
    +
    57};
    -
    59
    -
    60} // namespace P4
    -
    61
    -
    62#endif /* MIDEND_REMOVESELECTBOOLEANS_H_ */
    +
    58
    +
    59} // namespace P4
    +
    60
    +
    61#endif /* MIDEND_REMOVESELECTBOOLEANS_H_ */
    Definition typeChecker.h:32
    -
    Definition removeSelectBooleans.h:34
    +
    Definition removeSelectBooleans.h:33
    Definition node.h:95
    Definition pass_manager.h:40
    -
    Definition removeSelectBooleans.h:49
    +
    Definition removeSelectBooleans.h:48
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    diff --git a/search/all_12.js b/search/all_12.js index ab7d2a89091..3b8e1bd72b9 100644 --- a/search/all_12.js +++ b/search/all_12.js @@ -172,7 +172,7 @@ var searchData= ['islocalexpression_169',['isLocalExpression',['../class_p4_1_1_functions_inliner_1_1is_local_expression.html',1,'P4::FunctionsInliner']]], ['islpmtable_170',['isLPMTable',['../class_p4_1_1_e_b_p_f_1_1_e_b_p_f_table.html#ad780e5f49967996739089a2de05abfe4',1,'P4::EBPF::EBPFTable']]], ['ismask_171',['IsMask',['../class_p4_1_1_is_mask.html',1,'P4']]], - ['isnestedstruct_172',['isNestedStruct',['../class_p4_1_1_complex_values.html#ac291c7ad90bf1d1061c79ddfdf08366f',1,'P4::ComplexValues']]], + ['isnestedstruct_172',['isNestedStruct',['../class_p4_1_1_complex_values.html#af1df18a2d0d8ab84bc1d8664296dd538',1,'P4::ComplexValues']]], ['isnonconstantarrayindex_173',['IsNonConstantArrayIndex',['../class_p4_1_1_is_non_constant_array_index.html',1,'P4']]], ['isnot_174',['isNot',['../class_p4_1_1_p4_tools_1_1_p4_testgen_1_1_bmv2_1_1_token.html#a97ab9a18c1613a98438b5a554f6cacbe',1,'P4::P4Tools::P4Testgen::Bmv2::Token']]], ['isone_175',['isOne',['../class_p4_1_1_do_strength_reduction.html#ab33d4d25bc6e5fabd6b5421d1f597369',1,'P4::DoStrengthReduction']]], diff --git a/search/all_e.js b/search/all_e.js index 650e48b7a87..c7d08e2e85d 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -209,7 +209,7 @@ var searchData= ['expandemit_206',['ExpandEmit',['../class_p4_1_1_expand_emit.html',1,'P4']]], ['expandlookahead_207',['ExpandLookahead',['../class_p4_1_1_expand_lookahead.html',1,'P4']]], ['explain_208',['Explain',['../class_p4_1_1_explain.html',1,'P4']]], - ['explode_209',['explode',['../class_p4_1_1_remove_complex_comparisons.html#aa5d4a32b8773c31a4d6b9061df3373af',1,'P4::RemoveComplexComparisons::explode()'],['../struct_p4_1_1_struct_type_replacement.html#ab726ca045e7d9f7708f2ee34cbf01f42',1,'P4::StructTypeReplacement::explode()'],['../class_p4_1_1_complex_values.html#ac7bb9bf97bd5448607f463b21495da77',1,'P4::ComplexValues::explode()']]], + ['explode_209',['explode',['../class_p4_1_1_remove_complex_comparisons.html#aa5d4a32b8773c31a4d6b9061df3373af',1,'P4::RemoveComplexComparisons::explode()'],['../struct_p4_1_1_struct_type_replacement.html#ab726ca045e7d9f7708f2ee34cbf01f42',1,'P4::StructTypeReplacement::explode()'],['../class_p4_1_1_complex_values.html#af0e65a2e15aeff14b9979f398cb48feb',1,'P4::ComplexValues::explode()']]], ['expression_210',['Expression',['../class_p4_1_1_p4_tools_1_1_trace_events_1_1_expression.html',1,'P4::P4Tools::TraceEvents']]], ['expressionconverter_211',['ExpressionConverter',['../class_p4_1_1_b_m_v2_1_1_expression_converter.html',1,'P4::BMV2::ExpressionConverter'],['../class_p4_1_1_p4_v1_1_1_expression_converter.html',1,'P4::P4V1::ExpressionConverter']]], ['expressionevaluator_212',['ExpressionEvaluator',['../class_p4_1_1_expression_evaluator.html',1,'P4']]], diff --git a/search/functions_4.js b/search/functions_4.js index 253bc0d154e..c16efcd34bd 100644 --- a/search/functions_4.js +++ b/search/functions_4.js @@ -60,7 +60,7 @@ var searchData= ['executionstate_57',['ExecutionState',['../class_p4_1_1_p4_tools_1_1_p4_testgen_1_1_execution_state.html#a4903b92df0b963c22905d3305d25f603',1,'P4::P4Tools::P4Testgen::ExecutionState']]], ['exename_58',['exename',['../namespace_p4.html#a7b6eedd397c9b652003a9a2e9948d20c',1,'P4']]], ['exists_59',['exists',['../class_p4_1_1_p4_tools_1_1_abstract_execution_state.html#a73762e2c3964510262c5f94a3bcfa758',1,'P4::P4Tools::AbstractExecutionState::exists()'],['../class_p4_1_1_p4_tools_1_1_symbolic_env.html#aee1c6c5444c74342a098370acfc741ad',1,'P4::P4Tools::SymbolicEnv::exists()']]], - ['explode_60',['explode',['../class_p4_1_1_remove_complex_comparisons.html#aa5d4a32b8773c31a4d6b9061df3373af',1,'P4::RemoveComplexComparisons::explode()'],['../struct_p4_1_1_struct_type_replacement.html#ab726ca045e7d9f7708f2ee34cbf01f42',1,'P4::StructTypeReplacement::explode()'],['../class_p4_1_1_complex_values.html#ac7bb9bf97bd5448607f463b21495da77',1,'P4::ComplexValues::explode()']]], + ['explode_60',['explode',['../class_p4_1_1_remove_complex_comparisons.html#aa5d4a32b8773c31a4d6b9061df3373af',1,'P4::RemoveComplexComparisons::explode()'],['../struct_p4_1_1_struct_type_replacement.html#ab726ca045e7d9f7708f2ee34cbf01f42',1,'P4::StructTypeReplacement::explode()'],['../class_p4_1_1_complex_values.html#af0e65a2e15aeff14b9979f398cb48feb',1,'P4::ComplexValues::explode()']]], ['expressionunrollsanitycheck_61',['expressionUnrollSanityCheck',['../namespace_p4_1_1_d_p_d_k.html#ac7d76faf910677be07aceb0e558ab00a',1,'P4::DPDK']]], ['extractblock_62',['extractBlock',['../class_p4_1_1_check_extern_invocation_common.html#a2306decdba864f9bda73f82de2cf8abf',1,'P4::CheckExternInvocationCommon']]] ]; diff --git a/search/functions_8.js b/search/functions_8.js index bf83a8dc6a9..8413afbcbd6 100644 --- a/search/functions_8.js +++ b/search/functions_8.js @@ -45,7 +45,7 @@ var searchData= ['islibrarymethod_42',['isLibraryMethod',['../class_p4_1_1_e_b_p_f_1_1_e_b_p_f_program.html#a7f1db8d77a08f1cb11e54d34c226021c',1,'P4::EBPF::EBPFProgram::isLibraryMethod()'],['../class_p4_1_1_u_b_p_f_1_1_u_b_p_f_program.html#acbdb4324b3a3aa403b33e06224713c05',1,'P4::UBPF::UBPFProgram::isLibraryMethod()']]], ['isloaligned_43',['isLoAligned',['../struct_p4_1_1_half_open_range.html#a5ac35a06da0a0a2602f2b2cabcb22b34',1,'P4::HalfOpenRange::isLoAligned()'],['../struct_p4_1_1_closed_range.html#a90c6591d83a99b1b36f8785244646cd3',1,'P4::ClosedRange::isLoAligned()']]], ['islpmtable_44',['isLPMTable',['../class_p4_1_1_e_b_p_f_1_1_e_b_p_f_table.html#ad780e5f49967996739089a2de05abfe4',1,'P4::EBPF::EBPFTable']]], - ['isnestedstruct_45',['isNestedStruct',['../class_p4_1_1_complex_values.html#ac291c7ad90bf1d1061c79ddfdf08366f',1,'P4::ComplexValues']]], + ['isnestedstruct_45',['isNestedStruct',['../class_p4_1_1_complex_values.html#af1df18a2d0d8ab84bc1d8664296dd538',1,'P4::ComplexValues']]], ['isnot_46',['isNot',['../class_p4_1_1_p4_tools_1_1_p4_testgen_1_1_bmv2_1_1_token.html#a97ab9a18c1613a98438b5a554f6cacbe',1,'P4::P4Tools::P4Testgen::Bmv2::Token']]], ['isone_47',['isOne',['../class_p4_1_1_do_strength_reduction.html#ab33d4d25bc6e5fabd6b5421d1f597369',1,'P4::DoStrengthReduction']]], ['isoneof_48',['isOneOf',['../class_p4_1_1_p4_tools_1_1_p4_testgen_1_1_bmv2_1_1_token.html#a9c13cf4f21a63000f74c340f3a6b6772',1,'P4::P4Tools::P4Testgen::Bmv2::Token']]], diff --git a/simplify_key_8h_source.html b/simplify_key_8h_source.html index e2a6ed5342a..c7c97a36ced 100644 --- a/simplify_key_8h_source.html +++ b/simplify_key_8h_source.html @@ -142,160 +142,159 @@
    17#ifndef MIDEND_SIMPLIFYKEY_H_
    18#define MIDEND_SIMPLIFYKEY_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/common/resolveReferences/resolveReferences.h"
    -
    22#include "frontends/p4/sideEffects.h"
    -
    23#include "frontends/p4/typeChecking/typeChecker.h"
    -
    24#include "ir/ir.h"
    -
    25
    -
    26namespace P4 {
    -
    27
    -
    - -
    33 public:
    -
    34 virtual ~KeyIsSimple() {}
    -
    35 virtual bool isSimple(const IR::Expression *expression, const Visitor::Context *) = 0;
    -
    36};
    +
    20#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    21#include "frontends/p4/sideEffects.h"
    +
    22#include "frontends/p4/typeChecking/typeChecker.h"
    +
    23#include "ir/ir.h"
    +
    24
    +
    25namespace P4 {
    +
    26
    +
    + +
    32 public:
    +
    33 virtual ~KeyIsSimple() {}
    +
    34 virtual bool isSimple(const IR::Expression *expression, const Visitor::Context *) = 0;
    +
    35};
    -
    37
    -
    -
    42class IsLikeLeftValue : public KeyIsSimple, public Inspector {
    -
    43 protected:
    -
    44 bool simple = false;
    -
    45
    -
    46 public:
    -
    47 IsLikeLeftValue() { setName("IsLikeLeftValue"); }
    -
    48
    -
    49 void postorder(const IR::Expression *) override {
    -
    50 // all other expressions are complicated
    -
    51 simple = false;
    -
    52 }
    -
    53 void postorder(const IR::Member *) override {}
    -
    54 void postorder(const IR::PathExpression *) override {}
    -
    55 void postorder(const IR::ArrayIndex *) override {}
    -
    56 profile_t init_apply(const IR::Node *root) override {
    -
    57 simple = true;
    -
    58 return Inspector::init_apply(root);
    -
    59 }
    -
    60
    -
    61 bool isSimple(const IR::Expression *expression, const Visitor::Context *) override {
    -
    62 (void)expression->apply(*this);
    -
    63 return simple;
    -
    64 }
    -
    65};
    +
    36
    +
    +
    41class IsLikeLeftValue : public KeyIsSimple, public Inspector {
    +
    42 protected:
    +
    43 bool simple = false;
    +
    44
    +
    45 public:
    +
    46 IsLikeLeftValue() { setName("IsLikeLeftValue"); }
    +
    47
    +
    48 void postorder(const IR::Expression *) override {
    +
    49 // all other expressions are complicated
    +
    50 simple = false;
    +
    51 }
    +
    52 void postorder(const IR::Member *) override {}
    +
    53 void postorder(const IR::PathExpression *) override {}
    +
    54 void postorder(const IR::ArrayIndex *) override {}
    +
    55 profile_t init_apply(const IR::Node *root) override {
    +
    56 simple = true;
    +
    57 return Inspector::init_apply(root);
    +
    58 }
    +
    59
    +
    60 bool isSimple(const IR::Expression *expression, const Visitor::Context *) override {
    +
    61 (void)expression->apply(*this);
    +
    62 return simple;
    +
    63 }
    +
    64};
    -
    66
    -
    -
    70class IsValid : public KeyIsSimple, public Inspector, public ResolutionContext {
    -
    71 TypeMap *typeMap;
    -
    72
    -
    73 public:
    -
    74 explicit IsValid(TypeMap *typeMap) : typeMap(typeMap) { CHECK_NULL(typeMap); }
    -
    75 bool isSimple(const IR::Expression *expression, const Visitor::Context *ctxt);
    -
    76};
    +
    65
    +
    +
    69class IsValid : public KeyIsSimple, public Inspector, public ResolutionContext {
    +
    70 TypeMap *typeMap;
    +
    71
    +
    72 public:
    +
    73 explicit IsValid(TypeMap *typeMap) : typeMap(typeMap) { CHECK_NULL(typeMap); }
    +
    74 bool isSimple(const IR::Expression *expression, const Visitor::Context *ctxt);
    +
    75};
    -
    77
    -
    -
    82class IsMask : public IsLikeLeftValue {
    -
    83 public:
    -
    84 bool isSimple(const IR::Expression *expression, const Visitor::Context *ctxt) {
    -
    85 if (auto mask = expression->to<IR::BAnd>()) {
    -
    86 if (mask->right->is<IR::Constant>())
    -
    87 expression = mask->left;
    -
    88 else if (mask->left->is<IR::Constant>())
    -
    89 expression = mask->right;
    -
    90 }
    -
    91 return IsLikeLeftValue::isSimple(expression, ctxt);
    -
    92 }
    -
    93};
    +
    76
    +
    +
    81class IsMask : public IsLikeLeftValue {
    +
    82 public:
    +
    83 bool isSimple(const IR::Expression *expression, const Visitor::Context *ctxt) {
    +
    84 if (auto mask = expression->to<IR::BAnd>()) {
    +
    85 if (mask->right->is<IR::Constant>())
    +
    86 expression = mask->left;
    +
    87 else if (mask->left->is<IR::Constant>())
    +
    88 expression = mask->right;
    +
    89 }
    +
    90 return IsLikeLeftValue::isSimple(expression, ctxt);
    +
    91 }
    +
    92};
    -
    94
    -
    -
    99class OrPolicy : public KeyIsSimple {
    -
    100 KeyIsSimple *left;
    -
    101 KeyIsSimple *right;
    -
    102
    -
    103 public:
    -
    104 OrPolicy(KeyIsSimple *left, KeyIsSimple *right) : left(left), right(right) {
    -
    105 CHECK_NULL(left);
    -
    106 CHECK_NULL(right);
    -
    107 }
    -
    108 bool isSimple(const IR::Expression *expression, const Visitor::Context *ctxt) {
    -
    109 return left->isSimple(expression, ctxt) || right->isSimple(expression, ctxt);
    -
    110 }
    -
    111};
    +
    93
    +
    +
    98class OrPolicy : public KeyIsSimple {
    +
    99 KeyIsSimple *left;
    +
    100 KeyIsSimple *right;
    +
    101
    +
    102 public:
    +
    103 OrPolicy(KeyIsSimple *left, KeyIsSimple *right) : left(left), right(right) {
    +
    104 CHECK_NULL(left);
    +
    105 CHECK_NULL(right);
    +
    106 }
    +
    107 bool isSimple(const IR::Expression *expression, const Visitor::Context *ctxt) {
    +
    108 return left->isSimple(expression, ctxt) || right->isSimple(expression, ctxt);
    +
    109 }
    +
    110};
    -
    112
    -
    -
    143class DoSimplifyKey : public Transform {
    -
    144 MinimalNameGenerator nameGen;
    -
    145 TypeMap *typeMap;
    -
    146 KeyIsSimple *key_policy;
    -
    147 std::map<const IR::P4Table *, TableInsertions *> toInsert;
    -
    148
    -
    149 public:
    -
    150 DoSimplifyKey(TypeMap *typeMap, KeyIsSimple *key_policy)
    -
    151 : typeMap(typeMap), key_policy(key_policy) {
    -
    152 CHECK_NULL(typeMap);
    -
    153 CHECK_NULL(key_policy);
    -
    154 setName("DoSimplifyKey");
    -
    155 }
    -
    156
    -
    157 Visitor::profile_t init_apply(const IR::Node *node) override {
    -
    158 auto rv = Transform::init_apply(node);
    -
    159 node->apply(nameGen);
    -
    160
    -
    161 return rv;
    -
    162 }
    -
    163
    -
    164 const IR::Node *doStatement(const IR::Statement *statement, const IR::Expression *expression);
    -
    165
    -
    166 // These should be all kinds of statements that may contain a table apply
    -
    167 // after the program has been simplified
    -
    168 const IR::Node *postorder(IR::MethodCallStatement *statement) override {
    -
    169 return doStatement(statement, statement->methodCall);
    -
    170 }
    -
    171 const IR::Node *postorder(IR::IfStatement *statement) override {
    -
    172 return doStatement(statement, statement->condition);
    -
    173 }
    -
    174 const IR::Node *postorder(IR::SwitchStatement *statement) override {
    -
    175 return doStatement(statement, statement->expression);
    -
    176 }
    -
    177 const IR::Node *postorder(IR::AssignmentStatement *statement) override {
    -
    178 return doStatement(statement, statement->right);
    -
    179 }
    -
    180 const IR::Node *postorder(IR::KeyElement *element) override;
    -
    181 const IR::Node *postorder(IR::P4Table *table) override;
    -
    182};
    +
    111
    +
    +
    142class DoSimplifyKey : public Transform {
    +
    143 MinimalNameGenerator nameGen;
    +
    144 TypeMap *typeMap;
    +
    145 KeyIsSimple *key_policy;
    +
    146 std::map<const IR::P4Table *, TableInsertions *> toInsert;
    +
    147
    +
    148 public:
    +
    149 DoSimplifyKey(TypeMap *typeMap, KeyIsSimple *key_policy)
    +
    150 : typeMap(typeMap), key_policy(key_policy) {
    +
    151 CHECK_NULL(typeMap);
    +
    152 CHECK_NULL(key_policy);
    +
    153 setName("DoSimplifyKey");
    +
    154 }
    +
    155
    +
    156 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    157 auto rv = Transform::init_apply(node);
    +
    158 node->apply(nameGen);
    +
    159
    +
    160 return rv;
    +
    161 }
    +
    162
    +
    163 const IR::Node *doStatement(const IR::Statement *statement, const IR::Expression *expression);
    +
    164
    +
    165 // These should be all kinds of statements that may contain a table apply
    +
    166 // after the program has been simplified
    +
    167 const IR::Node *postorder(IR::MethodCallStatement *statement) override {
    +
    168 return doStatement(statement, statement->methodCall);
    +
    169 }
    +
    170 const IR::Node *postorder(IR::IfStatement *statement) override {
    +
    171 return doStatement(statement, statement->condition);
    +
    172 }
    +
    173 const IR::Node *postorder(IR::SwitchStatement *statement) override {
    +
    174 return doStatement(statement, statement->expression);
    +
    175 }
    +
    176 const IR::Node *postorder(IR::AssignmentStatement *statement) override {
    +
    177 return doStatement(statement, statement->right);
    +
    178 }
    +
    179 const IR::Node *postorder(IR::KeyElement *element) override;
    +
    180 const IR::Node *postorder(IR::P4Table *table) override;
    +
    181};
    -
    183
    -
    -
    188class SimplifyKey : public PassManager {
    -
    189 public:
    -
    190 SimplifyKey(TypeMap *typeMap, KeyIsSimple *key_policy, TypeChecking *typeChecking = nullptr) {
    -
    191 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    -
    192 passes.push_back(typeChecking);
    -
    193 passes.push_back(new DoSimplifyKey(typeMap, key_policy));
    -
    194 setName("SimplifyKey");
    -
    195 }
    -
    196};
    +
    182
    +
    +
    187class SimplifyKey : public PassManager {
    +
    188 public:
    +
    189 SimplifyKey(TypeMap *typeMap, KeyIsSimple *key_policy, TypeChecking *typeChecking = nullptr) {
    +
    190 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    191 passes.push_back(typeChecking);
    +
    192 passes.push_back(new DoSimplifyKey(typeMap, key_policy));
    +
    193 setName("SimplifyKey");
    +
    194 }
    +
    195};
    -
    197
    -
    198} // namespace P4
    -
    199
    -
    200#endif /* MIDEND_SIMPLIFYKEY_H_ */
    -
    Definition simplifyKey.h:143
    +
    196
    +
    197} // namespace P4
    +
    198
    +
    199#endif /* MIDEND_SIMPLIFYKEY_H_ */
    +
    Definition simplifyKey.h:142
    Definition node.h:95
    Definition visitor.h:400
    -
    Definition simplifyKey.h:42
    -
    Definition simplifyKey.h:82
    -
    Definition simplifyKey.h:70
    -
    Definition simplifyKey.h:32
    +
    Definition simplifyKey.h:41
    +
    Definition simplifyKey.h:81
    +
    Definition simplifyKey.h:69
    +
    Definition simplifyKey.h:31
    Definition referenceMap.h:36
    -
    Definition simplifyKey.h:99
    +
    Definition simplifyKey.h:98
    Definition pass_manager.h:40
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    -
    Definition simplifyKey.h:188
    +
    Definition simplifyKey.h:187
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    diff --git a/simplify_select_list_8h_source.html b/simplify_select_list_8h_source.html index 5333d477fdf..55b5cec3e3c 100644 --- a/simplify_select_list_8h_source.html +++ b/simplify_select_list_8h_source.html @@ -142,78 +142,77 @@
    17#ifndef MIDEND_SIMPLIFYSELECTLIST_H_
    18#define MIDEND_SIMPLIFYSELECTLIST_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/p4/typeChecking/typeChecker.h"
    -
    22#include "frontends/p4/typeMap.h"
    -
    23#include "ir/ir.h"
    -
    24
    -
    25namespace P4 {
    -
    26
    -
    - -
    33 TypeMap *typeMap;
    -
    34
    -
    35 void explode(const IR::Expression *expression, const IR::Type *type,
    -
    36 IR::Vector<IR::Expression> *components);
    -
    37
    -
    38 public:
    -
    39 explicit SubstituteStructures(TypeMap *typeMap) : typeMap(typeMap) {
    -
    40 CHECK_NULL(typeMap);
    -
    41 setName("SubstituteStructures");
    -
    42 }
    -
    43
    -
    44 const IR::Node *postorder(IR::PathExpression *expression) override;
    -
    45};
    +
    20#include "frontends/p4/typeChecking/typeChecker.h"
    +
    21#include "frontends/p4/typeMap.h"
    +
    22#include "ir/ir.h"
    +
    23
    +
    24namespace P4 {
    +
    25
    +
    + +
    32 TypeMap *typeMap;
    +
    33
    +
    34 void explode(const IR::Expression *expression, const IR::Type *type,
    +
    35 IR::Vector<IR::Expression> *components);
    +
    36
    +
    37 public:
    +
    38 explicit SubstituteStructures(TypeMap *typeMap) : typeMap(typeMap) {
    +
    39 CHECK_NULL(typeMap);
    +
    40 setName("SubstituteStructures");
    +
    41 }
    +
    42
    +
    43 const IR::Node *postorder(IR::PathExpression *expression) override;
    +
    44};
    -
    46
    -
    - -
    65 // Represent the nesting of lists inside of a selectExpression.
    -
    66 // E.g.: [__[__]_] for two nested lists.
    -
    67 // FIXME: Lots of terrible concatenations here, must be std::string
    -
    68 cstring nesting;
    -
    69
    -
    70 void flatten(const IR::Expression *expression, IR::Vector<IR::Expression> *output);
    -
    71 void flatten(const IR::Expression *expression, unsigned *nestingIndex,
    - -
    73
    -
    74 public:
    -
    75 UnnestSelectList() { setName("UnnestSelectList"); }
    -
    76
    -
    77 const IR::Node *preorder(IR::SelectExpression *expression) override;
    -
    78 const IR::Node *preorder(IR::P4Control *control) override {
    -
    79 prune();
    -
    80 return control;
    -
    81 }
    -
    82};
    +
    45
    +
    + +
    64 // Represent the nesting of lists inside of a selectExpression.
    +
    65 // E.g.: [__[__]_] for two nested lists.
    +
    66 // FIXME: Lots of terrible concatenations here, must be std::string
    +
    67 cstring nesting;
    +
    68
    +
    69 void flatten(const IR::Expression *expression, IR::Vector<IR::Expression> *output);
    +
    70 void flatten(const IR::Expression *expression, unsigned *nestingIndex,
    + +
    72
    +
    73 public:
    +
    74 UnnestSelectList() { setName("UnnestSelectList"); }
    +
    75
    +
    76 const IR::Node *preorder(IR::SelectExpression *expression) override;
    +
    77 const IR::Node *preorder(IR::P4Control *control) override {
    +
    78 prune();
    +
    79 return control;
    +
    80 }
    +
    81};
    -
    83
    -
    - -
    85 public:
    -
    86 explicit SimplifySelectList(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    -
    87 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    -
    88 passes.push_back(typeChecking);
    -
    89 passes.push_back(new SubstituteStructures(typeMap));
    -
    90 passes.push_back(typeChecking);
    -
    91 passes.push_back(new UnnestSelectList);
    -
    92 setName("SimplifySelectList");
    -
    93 }
    -
    94};
    +
    82
    +
    + +
    84 public:
    +
    85 explicit SimplifySelectList(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    +
    86 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    87 passes.push_back(typeChecking);
    +
    88 passes.push_back(new SubstituteStructures(typeMap));
    +
    89 passes.push_back(typeChecking);
    +
    90 passes.push_back(new UnnestSelectList);
    +
    91 setName("SimplifySelectList");
    +
    92 }
    +
    93};
    -
    95
    -
    96} // namespace P4
    -
    97
    -
    98#endif /* MIDEND_SIMPLIFYSELECTLIST_H_ */
    +
    94
    +
    95} // namespace P4
    +
    96
    +
    97#endif /* MIDEND_SIMPLIFYSELECTLIST_H_ */
    Definition node.h:95
    Definition vector.h:58
    Definition pass_manager.h:40
    -
    Definition simplifySelectList.h:84
    -
    Definition simplifySelectList.h:32
    +
    Definition simplifySelectList.h:83
    +
    Definition simplifySelectList.h:31
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    -
    Definition simplifySelectList.h:64
    +
    Definition simplifySelectList.h:63
    Definition cstring.h:85
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/specialize_generic_types_8h_source.html b/specialize_generic_types_8h_source.html index 57c9b17c8a0..f63420ac2e8 100644 --- a/specialize_generic_types_8h_source.html +++ b/specialize_generic_types_8h_source.html @@ -142,169 +142,168 @@
    17#ifndef FRONTENDS_P4_SPECIALIZEGENERICTYPES_H_
    18#define FRONTENDS_P4_SPECIALIZEGENERICTYPES_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/p4/typeChecking/typeChecker.h"
    -
    22#include "ir/ir.h"
    -
    23
    -
    24namespace P4 {
    -
    25
    -
    - - -
    30 const IR::Type_Specialized *specialized;
    -
    32 const IR::Type_Declaration *declaration;
    -
    34 const IR::Type_StructLike *replacement;
    - - -
    40
    -
    41 TypeSpecialization(cstring name, const IR::Type_Specialized *specialized,
    -
    42 const IR::Type_Declaration *decl, const IR::Node *insertion,
    -
    43 const IR::Vector<IR::Type> *argTypes)
    -
    44 : name(name),
    - -
    46 declaration(decl),
    -
    47 replacement(nullptr),
    - -
    49 argumentTypes(argTypes) {
    -
    50 CHECK_NULL(specialized);
    -
    51 CHECK_NULL(decl);
    -
    52 CHECK_NULL(insertion);
    -
    53 CHECK_NULL(argTypes);
    -
    54 }
    -
    55 void dbprint(std::ostream &out) const override {
    -
    56 out << "Specializing:" << dbp(specialized) << " from " << dbp(declaration) << " as "
    -
    57 << dbp(replacement) << " inserted at " << dbp(insertion);
    -
    58 }
    -
    59};
    +
    20#include "frontends/p4/typeChecking/typeChecker.h"
    +
    21#include "ir/ir.h"
    +
    22
    +
    23namespace P4 {
    +
    24
    +
    + + +
    29 const IR::Type_Specialized *specialized;
    +
    31 const IR::Type_Declaration *declaration;
    +
    33 const IR::Type_StructLike *replacement;
    + + +
    39
    +
    40 TypeSpecialization(cstring name, const IR::Type_Specialized *specialized,
    +
    41 const IR::Type_Declaration *decl, const IR::Node *insertion,
    +
    42 const IR::Vector<IR::Type> *argTypes)
    +
    43 : name(name),
    + +
    45 declaration(decl),
    +
    46 replacement(nullptr),
    + +
    48 argumentTypes(argTypes) {
    +
    49 CHECK_NULL(specialized);
    +
    50 CHECK_NULL(decl);
    +
    51 CHECK_NULL(insertion);
    +
    52 CHECK_NULL(argTypes);
    +
    53 }
    +
    54 void dbprint(std::ostream &out) const override {
    +
    55 out << "Specializing:" << dbp(specialized) << " from " << dbp(declaration) << " as "
    +
    56 << dbp(replacement) << " inserted at " << dbp(insertion);
    +
    57 }
    +
    58};
    -
    60
    -
    - -
    62 TypeMap *typeMap;
    -
    63 // The map can have multiple keys pointing to the same value
    - -
    65 // Keep track of the values in the above map which are already
    -
    66 // inserted in the program.
    -
    67 std::set<TypeSpecialization *> inserted;
    -
    68
    -
    69 void add(const IR::Type_Specialized *t, const IR::Type_StructLike *decl,
    -
    70 const IR::Node *insertion, NameGenerator *nameGen);
    -
    71 TypeSpecialization *get(const IR::Type_Specialized *t) const;
    -
    72 bool same(const TypeSpecialization *left, const IR::Type_Specialized *right) const;
    -
    73 void dbprint(std::ostream &out) const override {
    -
    74 for (auto it : map) {
    -
    75 out << dbp(it.first) << " => " << it.second << std::endl;
    -
    76 }
    -
    77 }
    -
    78 IR::Vector<IR::Node> *getSpecializations(const IR::Node *insertionPoint) {
    -
    79 IR::Vector<IR::Node> *result = nullptr;
    -
    80 for (auto s : map) {
    -
    81 if (inserted.find(s.second) != inserted.end()) continue;
    -
    82 if (s.second->insertion == insertionPoint) {
    -
    83 if (result == nullptr) result = new IR::Vector<IR::Node>();
    -
    84 LOG2("Will insert " << dbp(s.second->replacement) << " before "
    -
    85 << dbp(insertionPoint));
    -
    86 result->push_back(s.second->replacement);
    -
    87 inserted.emplace(s.second);
    -
    88 }
    -
    89 }
    -
    90 return result;
    -
    91 }
    -
    92};
    +
    59
    +
    + +
    61 TypeMap *typeMap;
    +
    62 // The map can have multiple keys pointing to the same value
    + +
    64 // Keep track of the values in the above map which are already
    +
    65 // inserted in the program.
    +
    66 std::set<TypeSpecialization *> inserted;
    +
    67
    +
    68 void add(const IR::Type_Specialized *t, const IR::Type_StructLike *decl,
    +
    69 const IR::Node *insertion, NameGenerator *nameGen);
    +
    70 TypeSpecialization *get(const IR::Type_Specialized *t) const;
    +
    71 bool same(const TypeSpecialization *left, const IR::Type_Specialized *right) const;
    +
    72 void dbprint(std::ostream &out) const override {
    +
    73 for (auto it : map) {
    +
    74 out << dbp(it.first) << " => " << it.second << std::endl;
    +
    75 }
    +
    76 }
    +
    77 IR::Vector<IR::Node> *getSpecializations(const IR::Node *insertionPoint) {
    +
    78 IR::Vector<IR::Node> *result = nullptr;
    +
    79 for (auto s : map) {
    +
    80 if (inserted.find(s.second) != inserted.end()) continue;
    +
    81 if (s.second->insertion == insertionPoint) {
    +
    82 if (result == nullptr) result = new IR::Vector<IR::Node>();
    +
    83 LOG2("Will insert " << dbp(s.second->replacement) << " before "
    +
    84 << dbp(insertionPoint));
    +
    85 result->push_back(s.second->replacement);
    +
    86 inserted.emplace(s.second);
    +
    87 }
    +
    88 }
    +
    89 return result;
    +
    90 }
    +
    91};
    -
    93
    -
    - -
    98 TypeSpecializationMap *specMap;
    - -
    100
    -
    101 public:
    -
    102 explicit FindTypeSpecializations(TypeSpecializationMap *specMap) : specMap(specMap) {
    -
    103 CHECK_NULL(specMap);
    -
    104 setName("FindTypeSpecializations");
    -
    105 }
    -
    106
    -
    107 void postorder(const IR::Type_Specialized *type) override;
    -
    108 profile_t init_apply(const IR::Node *node) override;
    -
    109};
    +
    92
    +
    + +
    97 TypeSpecializationMap *specMap;
    + +
    99
    +
    100 public:
    +
    101 explicit FindTypeSpecializations(TypeSpecializationMap *specMap) : specMap(specMap) {
    +
    102 CHECK_NULL(specMap);
    +
    103 setName("FindTypeSpecializations");
    +
    104 }
    +
    105
    +
    106 void postorder(const IR::Type_Specialized *type) override;
    +
    107 profile_t init_apply(const IR::Node *node) override;
    +
    108};
    -
    110
    -
    - -
    116 TypeSpecializationMap *specMap;
    -
    117
    -
    118 public:
    -
    119 explicit CreateSpecializedTypes(TypeSpecializationMap *specMap) : specMap(specMap) {
    -
    120 CHECK_NULL(specMap);
    -
    121 setName("CreateSpecializedTypes");
    -
    122 }
    -
    123
    -
    124 const IR::Node *insert(const IR::Node *before);
    -
    125 const IR::Node *postorder(IR::Type_Declaration *type) override;
    -
    126 const IR::Node *postorder(IR::Declaration *decl) override { return insert(decl); }
    -
    127};
    +
    109
    +
    + +
    115 TypeSpecializationMap *specMap;
    +
    116
    +
    117 public:
    +
    118 explicit CreateSpecializedTypes(TypeSpecializationMap *specMap) : specMap(specMap) {
    +
    119 CHECK_NULL(specMap);
    +
    120 setName("CreateSpecializedTypes");
    +
    121 }
    +
    122
    +
    123 const IR::Node *insert(const IR::Node *before);
    +
    124 const IR::Node *postorder(IR::Type_Declaration *type) override;
    +
    125 const IR::Node *postorder(IR::Declaration *decl) override { return insert(decl); }
    +
    126};
    -
    128
    -
    - -
    134 TypeSpecializationMap *specMap;
    -
    135
    -
    136 public:
    -
    137 explicit ReplaceTypeUses(TypeSpecializationMap *specMap) : specMap(specMap) {
    -
    138 setName("ReplaceTypeUses");
    -
    139 CHECK_NULL(specMap);
    -
    140 }
    -
    141 const IR::Node *postorder(IR::Type_Specialized *type) override;
    -
    142 const IR::Node *postorder(IR::StructExpression *expresison) override;
    -
    143};
    +
    127
    +
    + +
    133 TypeSpecializationMap *specMap;
    +
    134
    +
    135 public:
    +
    136 explicit ReplaceTypeUses(TypeSpecializationMap *specMap) : specMap(specMap) {
    +
    137 setName("ReplaceTypeUses");
    +
    138 CHECK_NULL(specMap);
    +
    139 }
    +
    140 const IR::Node *postorder(IR::Type_Specialized *type) override;
    +
    141 const IR::Node *postorder(IR::StructExpression *expresison) override;
    +
    142};
    -
    144
    -
    - -
    163 TypeSpecializationMap specMap;
    -
    164
    -
    165 public:
    -
    166 explicit SpecializeGenericTypes(TypeMap *typeMap) {
    -
    167 passes.emplace_back(new PassRepeated({
    -
    168 new TypeChecking(nullptr, typeMap),
    -
    169 new FindTypeSpecializations(&specMap),
    -
    170 new CreateSpecializedTypes(&specMap),
    -
    171 // The previous pass has mutated some struct types
    -
    172 new ClearTypeMap(typeMap, true),
    -
    173 }));
    -
    174 passes.emplace_back(new TypeChecking(nullptr, typeMap));
    -
    175 passes.emplace_back(new ReplaceTypeUses(&specMap));
    -
    176 // The previous pass has invalidated the types of struct expressions
    -
    177 passes.emplace_back(new ClearTypeMap(typeMap, true));
    -
    178 specMap.typeMap = typeMap;
    -
    179 setName("SpecializeGenericTypes");
    -
    180 setStopOnError(true);
    -
    181 }
    -
    182};
    +
    143
    +
    + +
    162 TypeSpecializationMap specMap;
    +
    163
    +
    164 public:
    +
    165 explicit SpecializeGenericTypes(TypeMap *typeMap) {
    +
    166 passes.emplace_back(new PassRepeated({
    +
    167 new TypeChecking(nullptr, typeMap),
    +
    168 new FindTypeSpecializations(&specMap),
    +
    169 new CreateSpecializedTypes(&specMap),
    +
    170 // The previous pass has mutated some struct types
    +
    171 new ClearTypeMap(typeMap, true),
    +
    172 }));
    +
    173 passes.emplace_back(new TypeChecking(nullptr, typeMap));
    +
    174 passes.emplace_back(new ReplaceTypeUses(&specMap));
    +
    175 // The previous pass has invalidated the types of struct expressions
    +
    176 passes.emplace_back(new ClearTypeMap(typeMap, true));
    +
    177 specMap.typeMap = typeMap;
    +
    178 setName("SpecializeGenericTypes");
    +
    179 setStopOnError(true);
    +
    180 }
    +
    181};
    -
    183
    -
    185// Note: this pass is currently not used, but some
    -
    186// back-ends may find it useful.
    -
    - -
    188 public:
    -
    189 const IR::Node *postorder(IR::Type_StructLike *type) override {
    -
    190 if (!type->typeParameters->empty()) return nullptr;
    -
    191 return type;
    -
    192 }
    -
    193 const IR::Node *postorder(IR::Type_Stack *type) override {
    -
    194 if (type->elementType->is<IR::Type_Specialized>()) return nullptr;
    -
    195 return type;
    -
    196 }
    -
    197};
    +
    182
    +
    184// Note: this pass is currently not used, but some
    +
    185// back-ends may find it useful.
    +
    + +
    187 public:
    +
    188 const IR::Node *postorder(IR::Type_StructLike *type) override {
    +
    189 if (!type->typeParameters->empty()) return nullptr;
    +
    190 return type;
    +
    191 }
    +
    192 const IR::Node *postorder(IR::Type_Stack *type) override {
    +
    193 if (type->elementType->is<IR::Type_Specialized>()) return nullptr;
    +
    194 return type;
    +
    195 }
    +
    196};
    -
    198
    -
    199} // namespace P4
    -
    200
    -
    201#endif /* FRONTENDS_P4_SPECIALIZEGENERICTYPES_H_ */
    +
    197
    +
    198} // namespace P4
    +
    199
    +
    200#endif /* FRONTENDS_P4_SPECIALIZEGENERICTYPES_H_ */
    Definition typeChecker.h:32
    -
    Definition specializeGenericTypes.h:115
    -
    Definition specializeGenericTypes.h:97
    +
    Definition specializeGenericTypes.h:114
    +
    Definition specializeGenericTypes.h:96
    Definition stringify.h:33
    Definition node.h:95
    Definition vector.h:58
    @@ -312,9 +311,9 @@
    Definition referenceMap.h:36
    Definition referenceMap.h:29
    Definition pass_manager.h:145
    -
    Removes all structs or stacks that are generic.
    Definition specializeGenericTypes.h:187
    -
    Definition specializeGenericTypes.h:133
    -
    Specializes each generic type by substituting type parameters.
    Definition specializeGenericTypes.h:162
    +
    Removes all structs or stacks that are generic.
    Definition specializeGenericTypes.h:186
    +
    Definition specializeGenericTypes.h:132
    +
    Specializes each generic type by substituting type parameters.
    Definition specializeGenericTypes.h:161
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    @@ -322,14 +321,14 @@
    Definition cstring.h:85
    Definition ordered_map.h:32
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    -
    Definition specializeGenericTypes.h:26
    -
    const IR::Vector< IR::Type > * argumentTypes
    Definition specializeGenericTypes.h:39
    -
    const IR::Type_StructLike * replacement
    New synthesized type (created later)
    Definition specializeGenericTypes.h:34
    -
    const IR::Type_Declaration * declaration
    Declaration of specialized type, which will be replaced.
    Definition specializeGenericTypes.h:32
    -
    const IR::Type_Specialized * specialized
    Type that is being specialized.
    Definition specializeGenericTypes.h:30
    -
    cstring name
    Name to use for specialized type.
    Definition specializeGenericTypes.h:28
    -
    const IR::Node * insertion
    Insertion point.
    Definition specializeGenericTypes.h:36
    -
    Definition specializeGenericTypes.h:61
    +
    Definition specializeGenericTypes.h:25
    +
    const IR::Vector< IR::Type > * argumentTypes
    Definition specializeGenericTypes.h:38
    +
    const IR::Type_StructLike * replacement
    New synthesized type (created later)
    Definition specializeGenericTypes.h:33
    +
    const IR::Type_Declaration * declaration
    Declaration of specialized type, which will be replaced.
    Definition specializeGenericTypes.h:31
    +
    const IR::Type_Specialized * specialized
    Type that is being specialized.
    Definition specializeGenericTypes.h:29
    +
    cstring name
    Name to use for specialized type.
    Definition specializeGenericTypes.h:27
    +
    const IR::Node * insertion
    Insertion point.
    Definition specializeGenericTypes.h:35
    +
    Definition specializeGenericTypes.h:60
    diff --git a/struct_p4_1_1_nested_struct_map-members.html b/struct_p4_1_1_nested_struct_map-members.html index 7c8db8ec609..e8958aa87ad 100644 --- a/struct_p4_1_1_nested_struct_map-members.html +++ b/struct_p4_1_1_nested_struct_map-members.html @@ -129,10 +129,9 @@
    - - - - + + +

    diff --git a/class_p4_1_1_replace_structs__inherit__graph.map b/class_p4_1_1_replace_structs__inherit__graph.map index c13e0371b48..4341fa1f842 100644 --- a/class_p4_1_1_replace_structs__inherit__graph.map +++ b/class_p4_1_1_replace_structs__inherit__graph.map @@ -1,10 +1,15 @@ - + - - - + + + - - + + + + + + + diff --git a/class_p4_1_1_replace_structs__inherit__graph.md5 b/class_p4_1_1_replace_structs__inherit__graph.md5 index f88f436e71b..9abb738d0ed 100644 --- a/class_p4_1_1_replace_structs__inherit__graph.md5 +++ b/class_p4_1_1_replace_structs__inherit__graph.md5 @@ -1 +1 @@ -5b6cc45795cc7abae1965e3a7e576d06 \ No newline at end of file +0282b4062b1cef40aebc2e0069b90a08 \ No newline at end of file diff --git a/class_p4_1_1_replace_structs__inherit__graph.svg b/class_p4_1_1_replace_structs__inherit__graph.svg index feaf42d89d0..9d3fb0c5d8d 100644 --- a/class_p4_1_1_replace_structs__inherit__graph.svg +++ b/class_p4_1_1_replace_structs__inherit__graph.svg @@ -4,8 +4,8 @@ - + @@ -23,8 +23,8 @@ Node1 - -P4::ReplaceStructs + +P4::ReplaceStructs @@ -41,8 +41,8 @@ Node2->Node1 - - + + @@ -50,8 +50,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -59,8 +59,8 @@ Node3->Node2 - - + + @@ -77,8 +77,26 @@ Node3->Node4 - - + + + + + + + +Node5 + + +P4::ResolutionContext + + + + + +Node3->Node5 + + + @@ -86,8 +104,35 @@ Node4->Node1 - - + + + + + + + +Node5->Node1 + + + + + + + + +Node6 + + +P4::DeclarationLookup + + + + + +Node6->Node5 + + + diff --git a/class_p4_1_1_replace_structs__inherit__graph_org.svg b/class_p4_1_1_replace_structs__inherit__graph_org.svg index 2b1d95aed5d..bbe82dedbcf 100644 --- a/class_p4_1_1_replace_structs__inherit__graph_org.svg +++ b/class_p4_1_1_replace_structs__inherit__graph_org.svg @@ -4,16 +4,16 @@ - + P4::ReplaceStructs Node1 - -P4::ReplaceStructs + +P4::ReplaceStructs @@ -30,8 +30,8 @@ Node2->Node1 - - + + @@ -39,8 +39,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -48,8 +48,8 @@ Node3->Node2 - - + + @@ -66,8 +66,26 @@ Node3->Node4 - - + + + + + + + +Node5 + + +P4::ResolutionContext + + + + + +Node3->Node5 + + + @@ -75,8 +93,35 @@ Node4->Node1 - - + + + + + + + +Node5->Node1 + + + + + + + + +Node6 + + +P4::DeclarationLookup + + + + + +Node6->Node5 + + + diff --git a/class_p4_1_1_resolution_context.html b/class_p4_1_1_resolution_context.html index 3216c9f34da..f05a0f9b4ac 100644 --- a/class_p4_1_1_resolution_context.html +++ b/class_p4_1_1_resolution_context.html @@ -136,7 +136,7 @@

    Inherits P4::Visitor, and P4::DeclarationLookup.

    -

    Inherited by P4::AbstractInliner< ActionsInlineList, AInlineWorkList >, P4::AbstractInliner< FunctionsInlineList, FunctionsInlineWorkList >, P4::AbstractInliner< InlineList, InlineSummary >, P4::AbstractInliner< P4::InlineList, InlineWorkList >, P4::AbstractInliner< InlineList, InlineWorkList >, P4::ComputeDefUse, P4::ComputeDefUse::SetupJoinPoints, P4::ComputeParserCG, P4::ConstantTypeSubstitution [private], P4::CreateStructInitializers, P4::Deprecated, P4::DiscoverActionsInlining, P4::DiscoverFunctionsInlining, P4::DoCheckConstants, P4::DoCheckCoreMethods, P4::DoConstantFolding, P4::DoDefaultArguments, P4::DoExpandEmit, P4::DoExpandLookahead, P4::DoOrderArguments, P4::DoRemoveAssertAssume, P4::DoRemoveExits, P4::DoRemoveMiss, P4::DoReplaceTypedef, P4::DoSimplifyControlFlow, P4::DoSimplifyExpressions, P4::DoStaticAssert, P4::DoTableHit, P4::DontcareArgs, P4::EntryPriorities, P4::FindActionParameters, P4::FindFunctionSpecializations, P4::FindGlobalActionUses, P4::FindRepeatedActionUses, P4::FindSpecializations, P4::FunctionsInliner::isLocalExpression [private], P4::HasTableApply, P4::InstantiateDirectCalls, P4::IsValid, P4::KeySideEffect, P4::LocalizeActions, P4::MoveInitializers, P4::P4Fmt::P4Formatter [private], P4::P4Tools::P4ProgramDCGCreator [private], P4::ReadsWrites, P4::RenameSymbols, P4::ResolveReferences [private], P4::SubstituteParameters, P4::ToP4 [private], P4::TypeInferenceBase, and P4::UnrollLoops.

    +

    Inherited by P4::AbstractInliner< ActionsInlineList, AInlineWorkList >, P4::AbstractInliner< FunctionsInlineList, FunctionsInlineWorkList >, P4::AbstractInliner< InlineList, InlineSummary >, P4::AbstractInliner< P4::InlineList, InlineWorkList >, P4::AbstractInliner< InlineList, InlineWorkList >, P4::CheckExternInvocationCommon, P4::ComputeDefUse, P4::ComputeDefUse::SetupJoinPoints, P4::ComputeParserCG, P4::ConstantTypeSubstitution [private], P4::CreateStructInitializers, P4::Deprecated, P4::DiscoverActionsInlining, P4::DiscoverFunctionsInlining, P4::DoCheckConstants, P4::DoCheckCoreMethods, P4::DoConstantFolding, P4::DoDefaultArguments, P4::DoExpandEmit, P4::DoExpandLookahead, P4::DoLocalCopyPropagation [private], P4::DoOrderArguments, P4::DoRemoveAssertAssume, P4::DoRemoveExits, P4::DoRemoveMiss, P4::DoReplaceTypedef, P4::DoSimplifyControlFlow, P4::DoSimplifyExpressions, P4::DoStaticAssert, P4::DoTableHit, P4::DontcareArgs, P4::EntryPriorities, P4::FindActionParameters, P4::FindFunctionSpecializations, P4::FindGlobalActionUses, P4::FindRepeatedActionUses, P4::FindSpecializations, P4::FunctionsInliner::isLocalExpression [private], P4::HasTableApply, P4::InstantiateDirectCalls, P4::IsValid, P4::KeySideEffect, P4::LocalizeActions, P4::MoveInitializers, P4::P4Fmt::P4Formatter [private], P4::P4Tools::P4ProgramDCGCreator [private], P4::ReadsWrites, P4::RemoveComplexExpressions, P4::RemoveNestedStructs, P4::RenameSymbols, P4::ReplaceStructs [private], P4::ResolveReferences [private], P4::SubstituteParameters, P4::ToP4 [private], P4::TypeInferenceBase, P4::UnrollLoops, and P4::hasSideEffects.

    diff --git a/class_p4_1_1_visitor__inherit__graph.map b/class_p4_1_1_visitor__inherit__graph.map index c51a4a7724a..cfafd167c92 100644 --- a/class_p4_1_1_visitor__inherit__graph.map +++ b/class_p4_1_1_visitor__inherit__graph.map @@ -1,108 +1,110 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/class_p4_1_1_visitor__inherit__graph.md5 b/class_p4_1_1_visitor__inherit__graph.md5 index d0430000d41..44ce86d4ff9 100644 --- a/class_p4_1_1_visitor__inherit__graph.md5 +++ b/class_p4_1_1_visitor__inherit__graph.md5 @@ -1 +1 @@ -cf9a9e10e9081b65207650296f53c7f5 \ No newline at end of file +4790b1f5b6e1cad5bc83624392459c58 \ No newline at end of file diff --git a/class_p4_1_1_visitor__inherit__graph.svg b/class_p4_1_1_visitor__inherit__graph.svg index 6ab3e511b45..91e56746072 100644 --- a/class_p4_1_1_visitor__inherit__graph.svg +++ b/class_p4_1_1_visitor__inherit__graph.svg @@ -4,7 +4,7 @@ - + @@ -48,7 +48,7 @@ @@ -59,8 +59,8 @@ var sectionId = 'dynsection-0'; Node1 - -P4::Visitor + +P4::Visitor @@ -68,8 +68,8 @@ var sectionId = 'dynsection-0'; Node2 - -P4::Backtrack + +P4::Backtrack @@ -77,8 +77,8 @@ var sectionId = 'dynsection-0'; Node1->Node2 - - + + @@ -86,8 +86,8 @@ var sectionId = 'dynsection-0'; Node3 - -P4::OnBacktrack< T > + +P4::OnBacktrack< T > @@ -95,8 +95,8 @@ var sectionId = 'dynsection-0'; Node1->Node3 - - + + @@ -104,8 +104,8 @@ var sectionId = 'dynsection-0'; Node4 - -P4::PassManager + +P4::PassManager @@ -113,8 +113,8 @@ var sectionId = 'dynsection-0'; Node1->Node4 - - + + @@ -122,8 +122,8 @@ var sectionId = 'dynsection-0'; Node109 - -P4::ControlFlowVisitor + +P4::ControlFlowVisitor @@ -131,8 +131,8 @@ var sectionId = 'dynsection-0'; Node1->Node109 - - + + @@ -140,8 +140,8 @@ var sectionId = 'dynsection-0'; Node112 - -P4::DynamicVisitor + +P4::DynamicVisitor @@ -149,8 +149,8 @@ var sectionId = 'dynsection-0'; Node1->Node112 - - + + @@ -158,9 +158,9 @@ var sectionId = 'dynsection-0'; Node113 - -P4::InlineDriver< Inline -List, InlineWorkList > + +P4::InlineDriver< Inline +List, InlineWorkList > @@ -168,8 +168,8 @@ var sectionId = 'dynsection-0'; Node1->Node113 - - + + @@ -177,8 +177,8 @@ var sectionId = 'dynsection-0'; Node114 - -P4::Inspector + +P4::Inspector @@ -186,8 +186,8 @@ var sectionId = 'dynsection-0'; Node1->Node114 - - + + @@ -195,8 +195,8 @@ var sectionId = 'dynsection-0'; Node308 - -P4::Modifier + +P4::Modifier @@ -204,8 +204,8 @@ var sectionId = 'dynsection-0'; Node1->Node308 - - + + @@ -213,8 +213,8 @@ var sectionId = 'dynsection-0'; Node322 - -P4::P4WriteContext + +P4::P4WriteContext @@ -222,8 +222,8 @@ var sectionId = 'dynsection-0'; Node1->Node322 - - + + @@ -231,8 +231,8 @@ var sectionId = 'dynsection-0'; Node329 - -P4::ResolutionContext + +P4::ResolutionContext @@ -240,44 +240,44 @@ var sectionId = 'dynsection-0'; Node1->Node329 - - + + - - -Node361 - - -P4::TypeInferenceBase + + +Node364 + + +P4::TypeInferenceBase - - -Node1->Node361 - - - + + +Node1->Node364 + + + - - -Node364 - - -P4::Transform + + +Node367 + + +P4::Transform - - -Node1->Node364 - - - + + +Node1->Node367 + + + @@ -291,11 +291,11 @@ var sectionId = 'dynsection-0'; - + Node1->Node506 - - - + + + @@ -303,8 +303,8 @@ var sectionId = 'dynsection-0'; Node2->Node3 - - + + @@ -312,8 +312,8 @@ var sectionId = 'dynsection-0'; Node2->Node4 - - + + @@ -321,8 +321,8 @@ var sectionId = 'dynsection-0'; Node110 - -P4::ComputeDefUse + +P4::ComputeDefUse @@ -330,8 +330,8 @@ var sectionId = 'dynsection-0'; Node109->Node110 - - + + @@ -339,8 +339,8 @@ var sectionId = 'dynsection-0'; Node111 - -P4::DoLocalCopyPropagation + +P4::DoLocalCopyPropagation @@ -348,8 +348,8 @@ var sectionId = 'dynsection-0'; Node109->Node111 - - + + @@ -357,8 +357,8 @@ var sectionId = 'dynsection-0'; Node114->Node110 - - + + @@ -366,8 +366,8 @@ var sectionId = 'dynsection-0'; Node115 - -P4::AnalyzeParser + +P4::AnalyzeParser @@ -375,8 +375,8 @@ var sectionId = 'dynsection-0'; Node114->Node115 - - + + @@ -384,8 +384,8 @@ var sectionId = 'dynsection-0'; Node116 - -P4::ApplyOptionsPragmas + +P4::ApplyOptionsPragmas @@ -393,8 +393,8 @@ var sectionId = 'dynsection-0'; Node114->Node116 - - + + @@ -402,8 +402,8 @@ var sectionId = 'dynsection-0'; Node117 - -P4::BMV2::ActionConverter + +P4::BMV2::ActionConverter @@ -411,8 +411,8 @@ var sectionId = 'dynsection-0'; Node114->Node117 - - + + @@ -420,8 +420,8 @@ var sectionId = 'dynsection-0'; Node118 - -P4::BMV2::CheckUnsupported + +P4::BMV2::CheckUnsupported @@ -429,8 +429,8 @@ var sectionId = 'dynsection-0'; Node114->Node118 - - + + @@ -438,9 +438,9 @@ var sectionId = 'dynsection-0'; Node119 - -P4::BMV2::ControlConverter -< arch > + +P4::BMV2::ControlConverter +< arch > @@ -448,8 +448,8 @@ var sectionId = 'dynsection-0'; Node114->Node119 - - + + @@ -457,8 +457,8 @@ var sectionId = 'dynsection-0'; Node120 - -P4::BMV2::ConvertGlobals + +P4::BMV2::ConvertGlobals @@ -466,8 +466,8 @@ var sectionId = 'dynsection-0'; Node114->Node120 - - + + @@ -475,8 +475,8 @@ var sectionId = 'dynsection-0'; Node121 - -P4::BMV2::ConvertPnaToJson + +P4::BMV2::ConvertPnaToJson @@ -484,8 +484,8 @@ var sectionId = 'dynsection-0'; Node114->Node121 - - + + @@ -493,8 +493,8 @@ var sectionId = 'dynsection-0'; Node122 - -P4::BMV2::ConvertPsaToJson + +P4::BMV2::ConvertPsaToJson @@ -502,8 +502,8 @@ var sectionId = 'dynsection-0'; Node114->Node122 - - + + @@ -511,8 +511,8 @@ var sectionId = 'dynsection-0'; Node123 - -P4::BMV2::DeparserConverter + +P4::BMV2::DeparserConverter @@ -520,8 +520,8 @@ var sectionId = 'dynsection-0'; Node114->Node123 - - + + @@ -529,8 +529,8 @@ var sectionId = 'dynsection-0'; Node124 - -P4::BMV2::ExpressionConverter + +P4::BMV2::ExpressionConverter @@ -538,8 +538,8 @@ var sectionId = 'dynsection-0'; Node114->Node124 - - + + @@ -547,8 +547,8 @@ var sectionId = 'dynsection-0'; Node128 - -P4::BMV2::HeaderConverter + +P4::BMV2::HeaderConverter @@ -556,8 +556,8 @@ var sectionId = 'dynsection-0'; Node114->Node128 - - + + @@ -565,8 +565,8 @@ var sectionId = 'dynsection-0'; Node129 - -P4::BMV2::ParseV1Architecture + +P4::BMV2::ParseV1Architecture @@ -574,8 +574,8 @@ var sectionId = 'dynsection-0'; Node114->Node129 - - + + @@ -583,8 +583,8 @@ var sectionId = 'dynsection-0'; Node130 - -P4::BMV2::ParserConverter + +P4::BMV2::ParserConverter @@ -592,8 +592,8 @@ var sectionId = 'dynsection-0'; Node114->Node130 - - + + @@ -601,9 +601,9 @@ var sectionId = 'dynsection-0'; Node131 - -P4::BMV2::SharedActionSelector -Check< arch > + +P4::BMV2::SharedActionSelector +Check< arch > @@ -611,8 +611,8 @@ var sectionId = 'dynsection-0'; Node114->Node131 - - + + @@ -620,8 +620,8 @@ var sectionId = 'dynsection-0'; Node132 - -P4::BuildResourceMap + +P4::BuildResourceMap @@ -629,8 +629,8 @@ var sectionId = 'dynsection-0'; Node114->Node132 - - + + @@ -638,9 +638,9 @@ var sectionId = 'dynsection-0'; Node133 - -P4::CheckExternInvocation -Common + +P4::CheckExternInvocation +Common @@ -648,8 +648,8 @@ var sectionId = 'dynsection-0'; Node114->Node133 - - + + @@ -657,8 +657,8 @@ var sectionId = 'dynsection-0'; Node135 - -P4::CheckNamedArgs + +P4::CheckNamedArgs @@ -666,8 +666,8 @@ var sectionId = 'dynsection-0'; Node114->Node135 - - + + @@ -675,8 +675,8 @@ var sectionId = 'dynsection-0'; Node136 - -P4::ClearTypeMap + +P4::ClearTypeMap @@ -684,8 +684,8 @@ var sectionId = 'dynsection-0'; Node114->Node136 - - + + @@ -693,8 +693,8 @@ var sectionId = 'dynsection-0'; Node137 - -P4::CompileTimeOperations + +P4::CompileTimeOperations @@ -702,8 +702,8 @@ var sectionId = 'dynsection-0'; Node114->Node137 - - + + @@ -711,8 +711,8 @@ var sectionId = 'dynsection-0'; Node138 - -P4::ComputeParserCG + +P4::ComputeParserCG @@ -720,8 +720,8 @@ var sectionId = 'dynsection-0'; Node114->Node138 - - + + @@ -729,8 +729,8 @@ var sectionId = 'dynsection-0'; Node139 - -P4::ComputeWriteSet + +P4::ComputeWriteSet @@ -738,8 +738,8 @@ var sectionId = 'dynsection-0'; Node114->Node139 - - + + @@ -747,8 +747,8 @@ var sectionId = 'dynsection-0'; Node140 - -P4::ContainsType + +P4::ContainsType @@ -756,8 +756,8 @@ var sectionId = 'dynsection-0'; Node114->Node140 - - + + @@ -765,9 +765,9 @@ var sectionId = 'dynsection-0'; Node141 - -P4::ControlFlowVisitor -::SetupJoinPoints + +P4::ControlFlowVisitor +::SetupJoinPoints @@ -775,8 +775,8 @@ var sectionId = 'dynsection-0'; Node114->Node141 - - + + @@ -784,9 +784,9 @@ var sectionId = 'dynsection-0'; Node143 - -P4::ControlPlaneAPI -::TypeSpecConverter + +P4::ControlPlaneAPI +::TypeSpecConverter @@ -794,8 +794,8 @@ var sectionId = 'dynsection-0'; Node114->Node143 - - + + @@ -803,8 +803,8 @@ var sectionId = 'dynsection-0'; Node144 - -P4::Coverage::CollectNodes + +P4::Coverage::CollectNodes @@ -812,8 +812,8 @@ var sectionId = 'dynsection-0'; Node114->Node144 - - + + @@ -821,8 +821,8 @@ var sectionId = 'dynsection-0'; Node145 - -P4::DPDK::CheckExternInvocation + +P4::DPDK::CheckExternInvocation @@ -830,8 +830,8 @@ var sectionId = 'dynsection-0'; Node114->Node145 - - + + @@ -839,8 +839,8 @@ var sectionId = 'dynsection-0'; Node146 - -P4::DPDK::CollectActionUses + +P4::DPDK::CollectActionUses @@ -848,8 +848,8 @@ var sectionId = 'dynsection-0'; Node114->Node146 - - + + @@ -857,9 +857,9 @@ var sectionId = 'dynsection-0'; Node147 - -P4::DPDK::CollectAddOnMiss -Table + +P4::DPDK::CollectAddOnMiss +Table @@ -867,8 +867,8 @@ var sectionId = 'dynsection-0'; Node114->Node147 - - + + @@ -876,9 +876,9 @@ var sectionId = 'dynsection-0'; Node148 - -P4::DPDK::CollectDirectCounter -Meter + +P4::DPDK::CollectDirectCounter +Meter @@ -886,8 +886,8 @@ var sectionId = 'dynsection-0'; Node114->Node148 - - + + @@ -895,8 +895,8 @@ var sectionId = 'dynsection-0'; Node149 - -P4::DPDK::CollectErrors + +P4::DPDK::CollectErrors @@ -904,8 +904,8 @@ var sectionId = 'dynsection-0'; Node114->Node149 - - + + @@ -913,8 +913,8 @@ var sectionId = 'dynsection-0'; Node150 - -P4::DPDK::CollectExternDeclaration + +P4::DPDK::CollectExternDeclaration @@ -922,8 +922,8 @@ var sectionId = 'dynsection-0'; Node114->Node150 - - + + @@ -931,8 +931,8 @@ var sectionId = 'dynsection-0'; Node151 - -P4::DPDK::CollectIPSecInfo + +P4::DPDK::CollectIPSecInfo @@ -940,8 +940,8 @@ var sectionId = 'dynsection-0'; Node114->Node151 - - + + @@ -949,9 +949,9 @@ var sectionId = 'dynsection-0'; Node152 - -P4::DPDK::CollectInternet -ChecksumInstance + +P4::DPDK::CollectInternet +ChecksumInstance @@ -959,8 +959,8 @@ var sectionId = 'dynsection-0'; Node114->Node152 - - + + @@ -968,8 +968,8 @@ var sectionId = 'dynsection-0'; Node322->Node110 - - + + @@ -977,44 +977,62 @@ var sectionId = 'dynsection-0'; Node322->Node111 - - + + - + Node329->Node110 - - - + + + + + + + + +Node329->Node111 + + + + + + + + +Node329->Node133 + + + - + Node329->Node138 - - - + + + - - -Node329->Node361 - - - + + +Node329->Node364 + + + - - -Node364->Node111 - - - + + +Node367->Node111 + + + diff --git a/class_p4_1_1_visitor__inherit__graph_org.svg b/class_p4_1_1_visitor__inherit__graph_org.svg index a5612959b48..a5f90cecc38 100644 --- a/class_p4_1_1_visitor__inherit__graph_org.svg +++ b/class_p4_1_1_visitor__inherit__graph_org.svg @@ -4,16 +4,16 @@ - - + + P4::Visitor Node1 - -P4::Visitor + +P4::Visitor @@ -21,8 +21,8 @@ Node2 - -P4::Backtrack + +P4::Backtrack @@ -30,8 +30,8 @@ Node1->Node2 - - + + @@ -39,8 +39,8 @@ Node3 - -P4::OnBacktrack< T > + +P4::OnBacktrack< T > @@ -48,8 +48,8 @@ Node1->Node3 - - + + @@ -57,8 +57,8 @@ Node4 - -P4::PassManager + +P4::PassManager @@ -66,8 +66,8 @@ Node1->Node4 - - + + @@ -75,8 +75,8 @@ Node109 - -P4::ControlFlowVisitor + +P4::ControlFlowVisitor @@ -84,8 +84,8 @@ Node1->Node109 - - + + @@ -93,8 +93,8 @@ Node112 - -P4::DynamicVisitor + +P4::DynamicVisitor @@ -102,8 +102,8 @@ Node1->Node112 - - + + @@ -111,9 +111,9 @@ Node113 - -P4::InlineDriver< Inline -List, InlineWorkList > + +P4::InlineDriver< Inline +List, InlineWorkList > @@ -121,8 +121,8 @@ Node1->Node113 - - + + @@ -130,8 +130,8 @@ Node114 - -P4::Inspector + +P4::Inspector @@ -139,8 +139,8 @@ Node1->Node114 - - + + @@ -148,8 +148,8 @@ Node308 - -P4::Modifier + +P4::Modifier @@ -157,8 +157,8 @@ Node1->Node308 - - + + @@ -166,8 +166,8 @@ Node322 - -P4::P4WriteContext + +P4::P4WriteContext @@ -175,8 +175,8 @@ Node1->Node322 - - + + @@ -184,8 +184,8 @@ Node329 - -P4::ResolutionContext + +P4::ResolutionContext @@ -193,44 +193,44 @@ Node1->Node329 - - + + - - -Node361 - - -P4::TypeInferenceBase + + +Node364 + + +P4::TypeInferenceBase - - -Node1->Node361 - - - + + +Node1->Node364 + + + - - -Node364 - - -P4::Transform + + +Node367 + + +P4::Transform - - -Node1->Node364 - - - + + +Node1->Node367 + + + @@ -244,11 +244,11 @@ - + Node1->Node506 - - - + + + @@ -256,8 +256,8 @@ Node2->Node3 - - + + @@ -265,8 +265,8 @@ Node2->Node4 - - + + @@ -274,8 +274,8 @@ Node110 - -P4::ComputeDefUse + +P4::ComputeDefUse @@ -283,8 +283,8 @@ Node109->Node110 - - + + @@ -292,8 +292,8 @@ Node111 - -P4::DoLocalCopyPropagation + +P4::DoLocalCopyPropagation @@ -301,8 +301,8 @@ Node109->Node111 - - + + @@ -310,8 +310,8 @@ Node114->Node110 - - + + @@ -319,8 +319,8 @@ Node115 - -P4::AnalyzeParser + +P4::AnalyzeParser @@ -328,8 +328,8 @@ Node114->Node115 - - + + @@ -337,8 +337,8 @@ Node116 - -P4::ApplyOptionsPragmas + +P4::ApplyOptionsPragmas @@ -346,8 +346,8 @@ Node114->Node116 - - + + @@ -355,8 +355,8 @@ Node117 - -P4::BMV2::ActionConverter + +P4::BMV2::ActionConverter @@ -364,8 +364,8 @@ Node114->Node117 - - + + @@ -373,8 +373,8 @@ Node118 - -P4::BMV2::CheckUnsupported + +P4::BMV2::CheckUnsupported @@ -382,8 +382,8 @@ Node114->Node118 - - + + @@ -391,9 +391,9 @@ Node119 - -P4::BMV2::ControlConverter -< arch > + +P4::BMV2::ControlConverter +< arch > @@ -401,8 +401,8 @@ Node114->Node119 - - + + @@ -410,8 +410,8 @@ Node120 - -P4::BMV2::ConvertGlobals + +P4::BMV2::ConvertGlobals @@ -419,8 +419,8 @@ Node114->Node120 - - + + @@ -428,8 +428,8 @@ Node121 - -P4::BMV2::ConvertPnaToJson + +P4::BMV2::ConvertPnaToJson @@ -437,8 +437,8 @@ Node114->Node121 - - + + @@ -446,8 +446,8 @@ Node122 - -P4::BMV2::ConvertPsaToJson + +P4::BMV2::ConvertPsaToJson @@ -455,8 +455,8 @@ Node114->Node122 - - + + @@ -464,8 +464,8 @@ Node123 - -P4::BMV2::DeparserConverter + +P4::BMV2::DeparserConverter @@ -473,8 +473,8 @@ Node114->Node123 - - + + @@ -482,8 +482,8 @@ Node124 - -P4::BMV2::ExpressionConverter + +P4::BMV2::ExpressionConverter @@ -491,8 +491,8 @@ Node114->Node124 - - + + @@ -500,8 +500,8 @@ Node128 - -P4::BMV2::HeaderConverter + +P4::BMV2::HeaderConverter @@ -509,8 +509,8 @@ Node114->Node128 - - + + @@ -518,8 +518,8 @@ Node129 - -P4::BMV2::ParseV1Architecture + +P4::BMV2::ParseV1Architecture @@ -527,8 +527,8 @@ Node114->Node129 - - + + @@ -536,8 +536,8 @@ Node130 - -P4::BMV2::ParserConverter + +P4::BMV2::ParserConverter @@ -545,8 +545,8 @@ Node114->Node130 - - + + @@ -554,9 +554,9 @@ Node131 - -P4::BMV2::SharedActionSelector -Check< arch > + +P4::BMV2::SharedActionSelector +Check< arch > @@ -564,8 +564,8 @@ Node114->Node131 - - + + @@ -573,8 +573,8 @@ Node132 - -P4::BuildResourceMap + +P4::BuildResourceMap @@ -582,8 +582,8 @@ Node114->Node132 - - + + @@ -591,9 +591,9 @@ Node133 - -P4::CheckExternInvocation -Common + +P4::CheckExternInvocation +Common @@ -601,8 +601,8 @@ Node114->Node133 - - + + @@ -610,8 +610,8 @@ Node135 - -P4::CheckNamedArgs + +P4::CheckNamedArgs @@ -619,8 +619,8 @@ Node114->Node135 - - + + @@ -628,8 +628,8 @@ Node136 - -P4::ClearTypeMap + +P4::ClearTypeMap @@ -637,8 +637,8 @@ Node114->Node136 - - + + @@ -646,8 +646,8 @@ Node137 - -P4::CompileTimeOperations + +P4::CompileTimeOperations @@ -655,8 +655,8 @@ Node114->Node137 - - + + @@ -664,8 +664,8 @@ Node138 - -P4::ComputeParserCG + +P4::ComputeParserCG @@ -673,8 +673,8 @@ Node114->Node138 - - + + @@ -682,8 +682,8 @@ Node139 - -P4::ComputeWriteSet + +P4::ComputeWriteSet @@ -691,8 +691,8 @@ Node114->Node139 - - + + @@ -700,8 +700,8 @@ Node140 - -P4::ContainsType + +P4::ContainsType @@ -709,8 +709,8 @@ Node114->Node140 - - + + @@ -718,9 +718,9 @@ Node141 - -P4::ControlFlowVisitor -::SetupJoinPoints + +P4::ControlFlowVisitor +::SetupJoinPoints @@ -728,8 +728,8 @@ Node114->Node141 - - + + @@ -737,9 +737,9 @@ Node143 - -P4::ControlPlaneAPI -::TypeSpecConverter + +P4::ControlPlaneAPI +::TypeSpecConverter @@ -747,8 +747,8 @@ Node114->Node143 - - + + @@ -756,8 +756,8 @@ Node144 - -P4::Coverage::CollectNodes + +P4::Coverage::CollectNodes @@ -765,8 +765,8 @@ Node114->Node144 - - + + @@ -774,8 +774,8 @@ Node145 - -P4::DPDK::CheckExternInvocation + +P4::DPDK::CheckExternInvocation @@ -783,8 +783,8 @@ Node114->Node145 - - + + @@ -792,8 +792,8 @@ Node146 - -P4::DPDK::CollectActionUses + +P4::DPDK::CollectActionUses @@ -801,8 +801,8 @@ Node114->Node146 - - + + @@ -810,9 +810,9 @@ Node147 - -P4::DPDK::CollectAddOnMiss -Table + +P4::DPDK::CollectAddOnMiss +Table @@ -820,8 +820,8 @@ Node114->Node147 - - + + @@ -829,9 +829,9 @@ Node148 - -P4::DPDK::CollectDirectCounter -Meter + +P4::DPDK::CollectDirectCounter +Meter @@ -839,8 +839,8 @@ Node114->Node148 - - + + @@ -848,8 +848,8 @@ Node149 - -P4::DPDK::CollectErrors + +P4::DPDK::CollectErrors @@ -857,8 +857,8 @@ Node114->Node149 - - + + @@ -866,8 +866,8 @@ Node150 - -P4::DPDK::CollectExternDeclaration + +P4::DPDK::CollectExternDeclaration @@ -875,8 +875,8 @@ Node114->Node150 - - + + @@ -884,8 +884,8 @@ Node151 - -P4::DPDK::CollectIPSecInfo + +P4::DPDK::CollectIPSecInfo @@ -893,8 +893,8 @@ Node114->Node151 - - + + @@ -902,9 +902,9 @@ Node152 - -P4::DPDK::CollectInternet -ChecksumInstance + +P4::DPDK::CollectInternet +ChecksumInstance @@ -912,8 +912,8 @@ Node114->Node152 - - + + @@ -921,8 +921,8 @@ Node322->Node110 - - + + @@ -930,44 +930,62 @@ Node322->Node111 - - + + - + Node329->Node110 - - - + + + + + + + + +Node329->Node111 + + + + + + + + +Node329->Node133 + + + - + Node329->Node138 - - - + + + - - -Node329->Node361 - - - + + +Node329->Node364 + + + - - -Node364->Node111 - - - + + +Node367->Node111 + + + diff --git a/class_p4_1_1has_side_effects-members.html b/class_p4_1_1has_side_effects-members.html index a307f37f44e..3f782c6a8df 100644 --- a/class_p4_1_1has_side_effects-members.html +++ b/class_p4_1_1has_side_effects-members.html @@ -126,8 +126,10 @@

    This is the complete list of members for P4::hasSideEffects, including all inherited members.

    Public Member Functions

    - - + + + + @@ -152,20 +154,26 @@ + + + + - - - - - - - - - - + + + + + + + + + + + + @@ -177,6 +185,12 @@ + + + + + + diff --git a/class_p4_1_1has_side_effects.html b/class_p4_1_1has_side_effects.html index 908e8c0eb52..107d128fcaf 100644 --- a/class_p4_1_1has_side_effects.html +++ b/class_p4_1_1has_side_effects.html @@ -129,7 +129,7 @@
    Inheritance diagram for P4::hasSideEffects:
    -
    +
    [legend]
    apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Inspector)P4::Inspectorvirtual
    called_by (defined in P4::Visitor)P4::Visitor
    anyOrder (defined in P4::ResolutionContext)P4::ResolutionContextprotected
    apply_visitor(const IR::Node *, const char *name=0) override (defined in P4::Inspector)P4::Inspectorvirtual
    called_by (defined in P4::Visitor)P4::Visitor
    check_clone(const Visitor *a) (defined in P4::Visitor)P4::Visitorinlinevirtual
    check_global(cstring) (defined in P4::Visitor)P4::Visitorinlinevirtual
    clear_globals() (defined in P4::Visitor)P4::Visitorinlinevirtual
    clone() const (defined in P4::Visitor)P4::Visitorinlinevirtual
    getContext() const (defined in P4::Visitor)P4::Visitorinline
    getContextDepth() const (defined in P4::Visitor)P4::Visitorinline
    getCurrentNode() constP4::Visitorinline
    getDeclaration(const IR::Path *path, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
    getDeclaration(const IR::This *, bool notNull=false) const (defined in P4::ResolutionContext)P4::ResolutionContextvirtual
    getDeclarations(const IR::INamespace *ns) constP4::ResolutionContextinline
    getDeclsByName(const IR::INamespace *ns, cstring name) constP4::ResolutionContextinline
    getOriginal() const (defined in P4::Visitor)P4::Visitorinline
    getParent() const (defined in P4::Visitor)P4::Visitorinline
    has_flow_joins() const (defined in P4::Visitor)P4::Visitorinlinevirtual
    hasSideEffects(const IR::Expression *e) (defined in P4::hasSideEffects)P4::hasSideEffectsinlineexplicit
    hasSideEffects(P4::ReferenceMap *rm, P4::TypeMap *tm) (defined in P4::hasSideEffects)P4::hasSideEffectsinline
    hasSideEffects(P4::ReferenceMap *rm, P4::TypeMap *tm, const IR::Expression *e) (defined in P4::hasSideEffects)P4::hasSideEffectsinline
    init_apply(const IR::Node *root) override (defined in P4::Inspector)P4::Inspectorvirtual
    init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
    init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
    internalName (defined in P4::Visitor)P4::Visitormutable
    isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline
    join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
    joinFlows (defined in P4::Visitor)P4::Visitorprotected
    loop_revisit(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
    hasSideEffects(P4::TypeMap *tm, const IR::Expression *e, const Visitor::Context *ctxt) (defined in P4::hasSideEffects)P4::hasSideEffectsinline
    init_apply(const IR::Node *root) override (defined in P4::Inspector)P4::Inspectorvirtual
    init_apply(const IR::Node *root, const Context *parent_context) (defined in P4::Visitor)P4::Visitor
    init_join_flows(const IR::Node *) (defined in P4::Visitor)P4::Visitorinlineprotectedvirtual
    internalName (defined in P4::Visitor)P4::Visitormutable
    isInContext(const IR::Node *n) const (defined in P4::Visitor)P4::Visitorinline
    join_flows(const IR::Node *)P4::Visitorinlineprotectedvirtual
    joinFlows (defined in P4::Visitor)P4::Visitorprotected
    lookup(const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
    lookupMatchKind(const IR::ID &name) const (defined in P4::ResolutionContext)P4::ResolutionContextprotected
    loop_revisit(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
    methodArguments(cstring name) constP4::ResolutionContextprotected
    name() const (defined in P4::Visitor)P4::Visitorinlinevirtual
    operator bool() (defined in P4::hasSideEffects)P4::hasSideEffectsinlineexplicit
    operator()(const IR::Expression *e) (defined in P4::hasSideEffects)P4::hasSideEffectsinline
    postorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
    preorder(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
    print_context() const (defined in P4::Visitor)P4::Visitor
    ResolutionContext() (defined in P4::ResolutionContext)P4::ResolutionContextprotected
    ResolutionContext(bool ao) (defined in P4::ResolutionContext)P4::ResolutionContextinlineexplicitprotected
    resolve(const IR::ID &name, ResolutionType type) constP4::ResolutionContext
    resolvePath(const IR::Path *path, bool isType) constP4::ResolutionContextvirtual
    resolveType(const IR::Type *type) constP4::ResolutionContext
    resolveUnique(const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) constP4::ResolutionContext
    revisit(const IR::Node *) (defined in P4::Inspector)P4::Inspectorinlinevirtual
    revisit_visited() (defined in P4::Inspector)P4::Inspector
    setCalledBy(const Visitor *visitor) (defined in P4::Visitor)P4::Visitorinline
    - - - - + + @@ -330,6 +327,34 @@ + + + + + + + + + + + + + + + + + + + + + + +

    @@ -137,12 +137,9 @@

     hasSideEffects (const IR::Expression *e)
     
    hasSideEffects (P4::ReferenceMap *rm, P4::TypeMap *tm)
     
    hasSideEffects (P4::ReferenceMap *rm, P4::TypeMap *tm, const IR::Expression *e)
     
    hasSideEffects (P4::TypeMap *tm, const IR::Expression *e, const Visitor::Context *ctxt)
     
     operator bool ()
     
     
    bool warning_enabled (int warning_kind) const
     
    - Public Member Functions inherited from P4::ResolutionContext
    const IR::IDeclarationgetDeclaration (const IR::Path *path, bool notNull=false) const
     
    const IR::IDeclarationgetDeclaration (const IR::This *, bool notNull=false) const
     
    +auto getDeclarations (const IR::INamespace *ns) const
     Returns the set of decls that exist in the given namespace.
     
    +auto getDeclsByName (const IR::INamespace *ns, cstring name) const
     Returns the set of decls with the given name that exist in the given namespace.
     
    +std::vector< const IR::IDeclaration * > resolve (const IR::ID &name, ResolutionType type) const
     Resolve references for name, restricted to type declarations.
     
    virtual const IR::IDeclarationresolvePath (const IR::Path *path, bool isType) const
     
    +const IR::Type * resolveType (const IR::Type *type) const
     Resolve a refrence to a type type.
     
    +const IR::IDeclarationresolveUnique (const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) const
     Resolve reference for name, restricted to type declarations, and expect one result.
     
    - Public Member Functions inherited from P4::DeclarationLookup
    @@ -367,6 +392,20 @@ + + + + + + + + + + @@ -377,6 +416,10 @@ + + +

    Additional Inherited Members

    void visit_children (const IR::Node *, std::function< void()> fn)
     
    - Protected Member Functions inherited from P4::ResolutionContext
    ResolutionContext (bool ao)
     
    +std::vector< const IR::IDeclaration * > lookup (const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const
     
    +std::vector< const IR::IDeclaration * > lookupMatchKind (const IR::ID &name) const
     
    +const IR::Vector< IR::Argument > * methodArguments (cstring name) const
     We are resolving a method call. Find the arguments from the context.
     
    - Protected Attributes inherited from P4::Visitor
    bool dontForwardChildrenBeforePreorder = false
    bool visitDagOnce = true
     
    - Protected Attributes inherited from P4::ResolutionContext
    +bool anyOrder = false
     
    diff --git a/class_p4_1_1has_side_effects__inherit__graph.map b/class_p4_1_1has_side_effects__inherit__graph.map index a49e9a106e3..0b4526a1ed7 100644 --- a/class_p4_1_1has_side_effects__inherit__graph.map +++ b/class_p4_1_1has_side_effects__inherit__graph.map @@ -1,7 +1,12 @@ - - - - - + + + + + + + + + + diff --git a/class_p4_1_1has_side_effects__inherit__graph.md5 b/class_p4_1_1has_side_effects__inherit__graph.md5 index ba19b69714c..ba937c55f11 100644 --- a/class_p4_1_1has_side_effects__inherit__graph.md5 +++ b/class_p4_1_1has_side_effects__inherit__graph.md5 @@ -1 +1 @@ -525c1c88eabb3a4a252164b67ff2f4fd \ No newline at end of file +d8c8bbd46d485247208708b9e5e7a7c6 \ No newline at end of file diff --git a/class_p4_1_1has_side_effects__inherit__graph.svg b/class_p4_1_1has_side_effects__inherit__graph.svg index 7b48b04a10e..0e29563ee48 100644 --- a/class_p4_1_1has_side_effects__inherit__graph.svg +++ b/class_p4_1_1has_side_effects__inherit__graph.svg @@ -4,8 +4,8 @@ - + @@ -23,8 +23,8 @@ Node1 - -P4::hasSideEffects + +P4::hasSideEffects @@ -32,8 +32,8 @@ Node2 - -P4::Inspector + +P4::Inspector @@ -41,8 +41,8 @@ Node2->Node1 - - + + @@ -50,8 +50,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -59,8 +59,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/class_p4_1_1has_side_effects__inherit__graph_org.svg b/class_p4_1_1has_side_effects__inherit__graph_org.svg index 1fc2990a80b..4b3845348ec 100644 --- a/class_p4_1_1has_side_effects__inherit__graph_org.svg +++ b/class_p4_1_1has_side_effects__inherit__graph_org.svg @@ -4,16 +4,16 @@ - + P4::hasSideEffects Node1 - -P4::hasSideEffects + +P4::hasSideEffects @@ -21,8 +21,8 @@ Node2 - -P4::Inspector + +P4::Inspector @@ -30,8 +30,8 @@ Node2->Node1 - - + + @@ -39,8 +39,8 @@ Node3 - -P4::Visitor + +P4::Visitor @@ -48,8 +48,53 @@ Node3->Node2 - - + + + + + + + +Node4 + + +P4::ResolutionContext + + + + + +Node3->Node4 + + + + + + + + +Node4->Node1 + + + + + + + + +Node5 + + +P4::DeclarationLookup + + + + + +Node5->Node4 + + + diff --git a/constant_folding_8h_source.html b/constant_folding_8h_source.html index bb01c309b96..62743830bf3 100644 --- a/constant_folding_8h_source.html +++ b/constant_folding_8h_source.html @@ -194,110 +194,98 @@
    116 public:
    118 ConstantFoldingPolicy *policy = nullptr)
    - -
    120 if (policy) {
    -
    121 this->policy = policy;
    -
    122 } else {
    -
    123 this->policy = new ConstantFoldingPolicy();
    -
    124 }
    -
    125 visitDagOnce = true;
    -
    126 setName("DoConstantFolding");
    -
    127 assignmentTarget = false;
    -
    128 }
    -
    129
    -
    130 // If DeclarationLookup is not passed, then resolve by our own.
    +
    119 : policy(policy ? policy : new ConstantFoldingPolicy()),
    +
    120 refMap(refMap),
    + +
    122 typesKnown(typeMap != nullptr),
    + +
    124 visitDagOnce = true;
    +
    125 setName("DoConstantFolding");
    +
    126 assignmentTarget = false;
    +
    127 }
    +
    128
    +
    129 // If DeclarationLookup is not passed, then resolve by our own. We might
    +
    130 // need proper context for this
    131 explicit DoConstantFolding(const TypeMap *typeMap, bool warnings = true,
    132 ConstantFoldingPolicy *policy = nullptr)
    133 : DoConstantFolding(this, typeMap, warnings, policy) {}
    134
    -
    135 const IR::Node *postorder(IR::Declaration_Constant *d) override;
    -
    136 const IR::Node *postorder(IR::PathExpression *e) override;
    -
    137 const IR::Node *postorder(IR::Cmpl *e) override;
    -
    138 const IR::Node *postorder(IR::Neg *e) override;
    -
    139 const IR::Node *postorder(IR::UPlus *e) override;
    -
    140 const IR::Node *postorder(IR::LNot *e) override;
    -
    141 const IR::Node *postorder(IR::LAnd *e) override;
    -
    142 const IR::Node *postorder(IR::LOr *e) override;
    -
    143 const IR::Node *postorder(IR::Slice *e) override;
    -
    144 const IR::Node *postorder(IR::PlusSlice *e) override;
    -
    145 const IR::Node *postorder(IR::Add *e) override;
    -
    146 const IR::Node *postorder(IR::AddSat *e) override;
    -
    147 const IR::Node *postorder(IR::Sub *e) override;
    -
    148 const IR::Node *postorder(IR::SubSat *e) override;
    -
    149 const IR::Node *postorder(IR::Mul *e) override;
    -
    150 const IR::Node *postorder(IR::Div *e) override;
    -
    151 const IR::Node *postorder(IR::Mod *e) override;
    -
    152 const IR::Node *postorder(IR::BXor *e) override;
    -
    153 const IR::Node *postorder(IR::BAnd *e) override;
    -
    154 const IR::Node *postorder(IR::BOr *e) override;
    -
    155 const IR::Node *postorder(IR::Equ *e) override;
    -
    156 const IR::Node *postorder(IR::Neq *e) override;
    -
    157 const IR::Node *postorder(IR::Lss *e) override;
    -
    158 const IR::Node *postorder(IR::Grt *e) override;
    -
    159 const IR::Node *postorder(IR::Leq *e) override;
    -
    160 const IR::Node *postorder(IR::Geq *e) override;
    -
    161 const IR::Node *postorder(IR::Shl *e) override;
    -
    162 const IR::Node *postorder(IR::Shr *e) override;
    -
    163 const IR::Node *postorder(IR::Concat *e) override;
    -
    164 const IR::Node *postorder(IR::Member *e) override;
    -
    165 const IR::Node *postorder(IR::Cast *e) override;
    -
    166 const IR::Node *postorder(IR::Mux *e) override;
    -
    167 const IR::Node *postorder(IR::Type_Bits *type) override;
    -
    168 const IR::Node *postorder(IR::Type_Varbits *type) override;
    -
    169 const IR::Node *postorder(IR::SelectExpression *e) override;
    -
    170 const IR::Node *postorder(IR::IfStatement *statement) override;
    -
    171 const IR::Node *preorder(IR::AssignmentStatement *statement) override;
    -
    172 const IR::Node *preorder(IR::ArrayIndex *e) override;
    -
    173 const IR::Node *preorder(IR::SwitchCase *c) override;
    -
    174 const IR::BlockStatement *preorder(IR::BlockStatement *bs) override {
    -
    175 if (bs->annotations->getSingle("disable_optimization"_cs)) prune();
    -
    176 return bs;
    -
    177 }
    -
    178};
    +
    135 DoConstantFolding() : DoConstantFolding(nullptr, nullptr) {}
    +
    136
    +
    137 const IR::Node *postorder(IR::Declaration_Constant *d) override;
    +
    138 const IR::Node *postorder(IR::PathExpression *e) override;
    +
    139 const IR::Node *postorder(IR::Cmpl *e) override;
    +
    140 const IR::Node *postorder(IR::Neg *e) override;
    +
    141 const IR::Node *postorder(IR::UPlus *e) override;
    +
    142 const IR::Node *postorder(IR::LNot *e) override;
    +
    143 const IR::Node *postorder(IR::LAnd *e) override;
    +
    144 const IR::Node *postorder(IR::LOr *e) override;
    +
    145 const IR::Node *postorder(IR::Slice *e) override;
    +
    146 const IR::Node *postorder(IR::PlusSlice *e) override;
    +
    147 const IR::Node *postorder(IR::Add *e) override;
    +
    148 const IR::Node *postorder(IR::AddSat *e) override;
    +
    149 const IR::Node *postorder(IR::Sub *e) override;
    +
    150 const IR::Node *postorder(IR::SubSat *e) override;
    +
    151 const IR::Node *postorder(IR::Mul *e) override;
    +
    152 const IR::Node *postorder(IR::Div *e) override;
    +
    153 const IR::Node *postorder(IR::Mod *e) override;
    +
    154 const IR::Node *postorder(IR::BXor *e) override;
    +
    155 const IR::Node *postorder(IR::BAnd *e) override;
    +
    156 const IR::Node *postorder(IR::BOr *e) override;
    +
    157 const IR::Node *postorder(IR::Equ *e) override;
    +
    158 const IR::Node *postorder(IR::Neq *e) override;
    +
    159 const IR::Node *postorder(IR::Lss *e) override;
    +
    160 const IR::Node *postorder(IR::Grt *e) override;
    +
    161 const IR::Node *postorder(IR::Leq *e) override;
    +
    162 const IR::Node *postorder(IR::Geq *e) override;
    +
    163 const IR::Node *postorder(IR::Shl *e) override;
    +
    164 const IR::Node *postorder(IR::Shr *e) override;
    +
    165 const IR::Node *postorder(IR::Concat *e) override;
    +
    166 const IR::Node *postorder(IR::Member *e) override;
    +
    167 const IR::Node *postorder(IR::Cast *e) override;
    +
    168 const IR::Node *postorder(IR::Mux *e) override;
    +
    169 const IR::Node *postorder(IR::Type_Bits *type) override;
    +
    170 const IR::Node *postorder(IR::Type_Varbits *type) override;
    +
    171 const IR::Node *postorder(IR::SelectExpression *e) override;
    +
    172 const IR::Node *postorder(IR::IfStatement *statement) override;
    +
    173 const IR::Node *preorder(IR::AssignmentStatement *statement) override;
    +
    174 const IR::Node *preorder(IR::ArrayIndex *e) override;
    +
    175 const IR::Node *preorder(IR::SwitchCase *c) override;
    +
    176 const IR::BlockStatement *preorder(IR::BlockStatement *bs) override {
    +
    177 if (bs->annotations->getSingle("disable_optimization"_cs)) prune();
    +
    178 return bs;
    +
    179 }
    +
    180};
    -
    179
    -
    - -
    185 public:
    - -
    187 : ConstantFolding(refMap, typeMap, true, nullptr, policy) {}
    -
    188
    -
    189 ConstantFolding(ReferenceMap *refMap, TypeMap *typeMap, bool warnings = true,
    -
    190 TypeChecking *typeChecking = nullptr, ConstantFoldingPolicy *policy = nullptr) {
    -
    191 if (typeMap != nullptr) {
    -
    192 if (!typeChecking) typeChecking = new TypeChecking(refMap, typeMap);
    -
    193 passes.push_back(typeChecking);
    -
    194 }
    -
    195 passes.push_back(new DoConstantFolding(refMap, typeMap, warnings, policy));
    -
    196 if (typeMap != nullptr) passes.push_back(new ClearTypeMap(typeMap));
    -
    197 setName("ConstantFolding");
    -
    198 }
    -
    199
    - -
    201 : ConstantFolding(typeMap, true, nullptr, policy) {}
    -
    202
    -
    203 explicit ConstantFolding(ConstantFoldingPolicy *policy)
    -
    204 : ConstantFolding(nullptr, true, nullptr, policy) {}
    -
    205
    -
    206 explicit ConstantFolding(TypeMap *typeMap, bool warnings = true,
    -
    207 TypeChecking *typeChecking = nullptr,
    -
    208 ConstantFoldingPolicy *policy = nullptr) {
    -
    209 if (typeMap != nullptr) {
    -
    210 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    -
    211 passes.push_back(typeChecking);
    -
    212 }
    -
    213 passes.push_back(new DoConstantFolding(typeMap, warnings, policy));
    -
    214 if (typeMap != nullptr) passes.push_back(new ClearTypeMap(typeMap));
    -
    215 setName("ConstantFolding");
    -
    216 }
    -
    217};
    +
    181
    +
    + +
    187 public:
    + +
    189 : ConstantFolding(typeMap, true, nullptr, policy) {}
    +
    190
    +
    191 explicit ConstantFolding(ConstantFoldingPolicy *policy)
    +
    192 : ConstantFolding(nullptr, true, nullptr, policy) {}
    +
    193
    +
    194 explicit ConstantFolding(TypeMap *typeMap, bool warnings = true,
    +
    195 TypeChecking *typeChecking = nullptr,
    +
    196 ConstantFoldingPolicy *policy = nullptr) {
    +
    197 if (typeMap != nullptr) {
    +
    198 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    199 passes.push_back(typeChecking);
    +
    200 }
    +
    201 passes.push_back(new DoConstantFolding(typeMap, warnings, policy));
    +
    202 if (typeMap != nullptr) passes.push_back(new ClearTypeMap(typeMap));
    +
    203 setName("ConstantFolding");
    +
    204 }
    +
    205};
    -
    218
    -
    219} // namespace P4
    -
    220
    -
    221#endif /* COMMON_CONSTANTFOLDING_H_ */
    +
    206
    +
    207} // namespace P4
    +
    208
    +
    209#endif /* COMMON_CONSTANTFOLDING_H_ */
    Definition typeChecker.h:32
    -
    Definition constantFolding.h:184
    +
    Definition constantFolding.h:186
    Definition constantFolding.h:35
    virtual const IR::Node * hook(Visitor &, IR::PathExpression *)
    The default hook does not modify anything.
    Definition constantFolding.h:38
    Definition referenceMap.h:57
    @@ -316,7 +304,6 @@
    const IR::Node * compare(const IR::Operation_Binary *op)
    Definition constantFolding.cpp:433
    Definition node.h:95
    Definition pass_manager.h:40
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    Definition visitor.h:424
    Definition typeChecker.h:55
    diff --git a/convert_errors_8h_source.html b/convert_errors_8h_source.html index 62306e9cfa8..22a76b345e2 100644 --- a/convert_errors_8h_source.html +++ b/convert_errors_8h_source.html @@ -143,86 +143,85 @@
    18
    19#include <map>
    20
    -
    21#include "frontends/common/resolveReferences/referenceMap.h"
    -
    22#include "frontends/p4/typeChecking/typeChecker.h"
    -
    23#include "frontends/p4/typeMap.h"
    -
    24#include "ir/ir.h"
    -
    25#include "ir/node.h"
    -
    26#include "ir/pass_manager.h"
    -
    27#include "ir/visitor.h"
    -
    28#include "lib/cstring.h"
    -
    29#include "lib/null.h"
    -
    30#include "lib/safe_vector.h"
    -
    31#include "midend/convertEnums.h"
    -
    32
    -
    33namespace P4 {
    -
    34
    -
    - -
    41 public:
    -
    42 virtual ~ChooseErrorRepresentation() = default;
    -
    43
    -
    45 virtual bool convert(const IR::Type_Error *type) const = 0;
    -
    46
    -
    51 virtual unsigned errorSize(unsigned errorCount) const = 0;
    -
    52
    -
    55 virtual IR::IndexedVector<IR::SerEnumMember> *assignValues(IR::Type_Error *type,
    -
    56 unsigned width) const;
    -
    57};
    +
    21#include "frontends/p4/typeChecking/typeChecker.h"
    +
    22#include "frontends/p4/typeMap.h"
    +
    23#include "ir/ir.h"
    +
    24#include "ir/node.h"
    +
    25#include "ir/pass_manager.h"
    +
    26#include "ir/visitor.h"
    +
    27#include "lib/cstring.h"
    +
    28#include "lib/null.h"
    +
    29#include "lib/safe_vector.h"
    +
    30#include "midend/convertEnums.h"
    +
    31
    +
    32namespace P4 {
    +
    33
    +
    + +
    40 public:
    +
    41 virtual ~ChooseErrorRepresentation() = default;
    +
    42
    +
    44 virtual bool convert(const IR::Type_Error *type) const = 0;
    +
    45
    +
    50 virtual unsigned errorSize(unsigned errorCount) const = 0;
    +
    51
    +
    54 virtual IR::IndexedVector<IR::SerEnumMember> *assignValues(IR::Type_Error *type,
    +
    55 unsigned width) const;
    +
    56};
    -
    58
    -
    -
    59class DoConvertErrors : public Transform {
    -
    60 friend class ConvertErrors;
    -
    61
    -
    62 std::map<cstring, P4::EnumRepresentation *> repr;
    - -
    64 P4::TypeMap *typeMap;
    -
    65
    -
    66 public:
    - -
    68 : policy(policy), typeMap(typeMap) {
    -
    69 CHECK_NULL(policy);
    -
    70 CHECK_NULL(typeMap);
    -
    71 setName("DoConvertErrors");
    -
    72 }
    -
    73 const IR::Node *preorder(IR::Type_Error *type) override;
    -
    74 const IR::Node *postorder(IR::Type_Name *type) override;
    -
    75 const IR::Node *postorder(IR::Member *member) override;
    -
    76};
    +
    57
    +
    +
    58class DoConvertErrors : public Transform {
    +
    59 friend class ConvertErrors;
    +
    60
    +
    61 std::map<cstring, P4::EnumRepresentation *> repr;
    + +
    63 P4::TypeMap *typeMap;
    +
    64
    +
    65 public:
    + +
    67 : policy(policy), typeMap(typeMap) {
    +
    68 CHECK_NULL(policy);
    +
    69 CHECK_NULL(typeMap);
    +
    70 setName("DoConvertErrors");
    +
    71 }
    +
    72 const IR::Node *preorder(IR::Type_Error *type) override;
    +
    73 const IR::Node *postorder(IR::Type_Name *type) override;
    +
    74 const IR::Node *postorder(IR::Member *member) override;
    +
    75};
    -
    77
    -
    -
    78class ConvertErrors : public PassManager {
    -
    79 DoConvertErrors *convertErrors{nullptr};
    -
    80
    -
    81 public:
    -
    82 using ErrorMapping = decltype(DoConvertErrors::repr);
    - -
    84 P4::TypeChecking *typeChecking = nullptr)
    -
    85 : convertErrors(new DoConvertErrors(policy, typeMap)) {
    -
    86 if (typeChecking == nullptr) {
    -
    87 typeChecking = new P4::TypeChecking(nullptr, typeMap);
    -
    88 }
    -
    89 passes.push_back(typeChecking);
    -
    90 passes.push_back(convertErrors);
    -
    91 passes.push_back(new P4::ClearTypeMap(typeMap));
    -
    92 setName("ConvertErrors");
    -
    93 }
    -
    94
    -
    95 ErrorMapping getErrorMapping() const { return convertErrors->repr; }
    -
    96};
    +
    76
    +
    +
    77class ConvertErrors : public PassManager {
    +
    78 DoConvertErrors *convertErrors{nullptr};
    +
    79
    +
    80 public:
    +
    81 using ErrorMapping = decltype(DoConvertErrors::repr);
    + +
    83 P4::TypeChecking *typeChecking = nullptr)
    +
    84 : convertErrors(new DoConvertErrors(policy, typeMap)) {
    +
    85 if (typeChecking == nullptr) {
    +
    86 typeChecking = new P4::TypeChecking(nullptr, typeMap);
    +
    87 }
    +
    88 passes.push_back(typeChecking);
    +
    89 passes.push_back(convertErrors);
    +
    90 passes.push_back(new P4::ClearTypeMap(typeMap));
    +
    91 setName("ConvertErrors");
    +
    92 }
    +
    93
    +
    94 ErrorMapping getErrorMapping() const { return convertErrors->repr; }
    +
    95};
    -
    97} // namespace P4
    -
    98
    -
    99#endif /* MIDEND_CONVERTERRORS_H_ */
    -
    Definition convertErrors.h:40
    +
    96} // namespace P4
    +
    97
    +
    98#endif /* MIDEND_CONVERTERRORS_H_ */
    +
    Definition convertErrors.h:39
    virtual unsigned errorSize(unsigned errorCount) const =0
    virtual IR::IndexedVector< IR::SerEnumMember > * assignValues(IR::Type_Error *type, unsigned width) const
    Definition convertErrors.cpp:70
    virtual bool convert(const IR::Type_Error *type) const =0
    If true this type has to be converted.
    Definition typeChecker.h:32
    -
    Definition convertErrors.h:78
    -
    Definition convertErrors.h:59
    +
    Definition convertErrors.h:77
    +
    Definition convertErrors.h:58
    Definition node.h:52
    Definition node.h:95
    Definition pass_manager.h:40
    diff --git a/copy_structures_8h_source.html b/copy_structures_8h_source.html index 63ae3006835..e7bdab2d951 100644 --- a/copy_structures_8h_source.html +++ b/copy_structures_8h_source.html @@ -166,58 +166,59 @@
    74
    94class RemoveAliases : public Transform {
    -
    95 ReferenceMap *refMap;
    +
    96 TypeMap *typeMap;
    97
    99
    100 public:
    -
    101 RemoveAliases(ReferenceMap *refMap, TypeMap *typeMap) : refMap(refMap), typeMap(typeMap) {
    -
    102 CHECK_NULL(refMap);
    -
    103 CHECK_NULL(typeMap);
    -
    104 setName("RemoveAliases");
    -
    105 }
    -
    106
    -
    107 const IR::Node *postorder(IR::AssignmentStatement *statement) override;
    -
    108 const IR::Node *postorder(IR::P4Parser *parser) override;
    -
    109 const IR::Node *postorder(IR::P4Control *control) override;
    -
    110};
    -
    +
    101 explicit RemoveAliases(TypeMap *typeMap) : typeMap(typeMap) {
    +
    102 CHECK_NULL(typeMap);
    +
    103 setName("RemoveAliases");
    +
    104 }
    +
    105 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    106 auto rv = Transform::init_apply(node);
    +
    107 node->apply(nameGen);
    +
    108
    +
    109 return rv;
    +
    110 }
    111
    -
    - -
    113 public:
    -
    114 explicit CopyStructures(ReferenceMap *refMap, TypeMap *typeMap, bool errorOnMethodCall = true,
    -
    115 bool copyHeaders = false, TypeChecking *typeChecking = nullptr)
    -
    116 : PassManager({}) {
    -
    117 CHECK_NULL(refMap);
    -
    118 CHECK_NULL(typeMap);
    -
    119 setName("CopyStructures");
    -
    120 if (typeChecking == nullptr) {
    -
    121 typeChecking = new TypeChecking(refMap, typeMap);
    -
    122 }
    -
    123 passes.emplace_back(typeChecking);
    -
    124 passes.emplace_back(new RemoveAliases(refMap, typeMap));
    -
    125 passes.emplace_back(typeChecking);
    -
    126 passes.emplace_back(new DoCopyStructures(typeMap, errorOnMethodCall, copyHeaders));
    -
    127 }
    -
    128};
    +
    112 const IR::Node *postorder(IR::AssignmentStatement *statement) override;
    +
    113 const IR::Node *postorder(IR::P4Parser *parser) override;
    +
    114 const IR::Node *postorder(IR::P4Control *control) override;
    +
    115};
    +
    +
    116
    +
    + +
    118 public:
    +
    119 explicit CopyStructures(TypeMap *typeMap, bool errorOnMethodCall = true,
    +
    120 bool copyHeaders = false, TypeChecking *typeChecking = nullptr) {
    +
    121 CHECK_NULL(typeMap);
    +
    122 setName("CopyStructures");
    +
    123 if (typeChecking == nullptr) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    124 passes.emplace_back(typeChecking);
    +
    125 passes.emplace_back(new RemoveAliases(typeMap));
    +
    126 passes.emplace_back(typeChecking);
    +
    127 passes.emplace_back(new DoCopyStructures(typeMap, errorOnMethodCall, copyHeaders));
    +
    128 }
    +
    129};
    -
    129
    -
    130} // namespace P4
    -
    131
    -
    132#endif /* MIDEND_COPYSTRUCTURES_H_ */
    -
    Definition copyStructures.h:112
    +
    130
    +
    131} // namespace P4
    +
    132
    +
    133#endif /* MIDEND_COPYSTRUCTURES_H_ */
    +
    Definition copyStructures.h:117
    Definition copyStructures.h:55
    Definition node.h:52
    Definition node.h:95
    -
    Definition pass_manager.h:40
    +
    Definition referenceMap.h:36
    Definition pass_manager.h:145
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition copyStructures.h:94
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    +
    Definition visitor.h:78
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/doxygen_crawl.html b/doxygen_crawl.html index ce6a9c59857..501842fc29b 100644 --- a/doxygen_crawl.html +++ b/doxygen_crawl.html @@ -3817,8 +3817,8 @@ - - + + diff --git a/dpdk_2backend_8h_source.html b/dpdk_2backend_8h_source.html index e28c3adffea..fe1eb8bba30 100644 --- a/dpdk_2backend_8h_source.html +++ b/dpdk_2backend_8h_source.html @@ -182,11 +182,11 @@
    55
    56#endif /* BACKENDS_DPDK_BACKEND_H_ */
    Definition dpdk/backend.h:39
    -
    void convert(const IR::ToplevelBlock *tlb)
    Definition dpdk/backend.cpp:38
    +
    void convert(const IR::ToplevelBlock *tlb)
    Definition dpdk/backend.cpp:39
    Definition backends/dpdk/options.h:24
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition typeMap.h:41
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    diff --git a/dpdk_2midend_8h_source.html b/dpdk_2midend_8h_source.html index e1a0396cdfa..8503928f43c 100644 --- a/dpdk_2midend_8h_source.html +++ b/dpdk_2midend_8h_source.html @@ -175,7 +175,7 @@
    Definition pass_manager.h:40
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition typeMap.h:41
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    diff --git a/dpdk_arch_8h_source.html b/dpdk_arch_8h_source.html index 9d5aba59ea8..464b4374afe 100644 --- a/dpdk_arch_8h_source.html +++ b/dpdk_arch_8h_source.html @@ -1558,7 +1558,7 @@
    1443 passes.push_back(new P4::ResolveReferences(refMap));
    1444 passes.push_back(new P4::TypeInference(typeMap, false));
    1445 passes.push_back(new P4::TypeChecking(refMap, typeMap, true));
    -
    1446 passes.push_back(new P4::FlattenInterfaceStructs(refMap, typeMap));
    +
    1446 passes.push_back(new P4::FlattenInterfaceStructs(typeMap));
    1447 }
    1448};
    @@ -1736,7 +1736,7 @@
    Definition removeLeftSlices.h:35
    Definition evaluator.h:114
    Definition methodInstance.h:168
    -
    Definition flattenInterfaceStructs.h:253
    +
    Definition flattenInterfaceStructs.h:249
    Definition node.h:52
    Definition node.h:95
    Definition vector.h:58
    @@ -1757,7 +1757,7 @@
    Definition pass_manager.h:184
    Definition cstring.h:85
    Definition ordered_map.h:32
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    void expressionUnrollSanityCheck(const IR::Expression *e)
    Definition dpdkArch.cpp:47
    Definition dpdkArch.h:815
    Definition dpdkArch.h:820
    diff --git a/dpdk_asm_opt_8h_source.html b/dpdk_asm_opt_8h_source.html index 08166f6ee41..5ccebab93f0 100644 --- a/dpdk_asm_opt_8h_source.html +++ b/dpdk_asm_opt_8h_source.html @@ -783,7 +783,7 @@
    Definition cstring.h:85
    Definition ordered_map.h:32
    Definition ordered_set.h:32
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    Definition cstring.h:80
    Definition id.h:28
    diff --git a/dpdk_check_extern_invocation_8h_source.html b/dpdk_check_extern_invocation_8h_source.html index 3d76e614afb..f80bca50857 100644 --- a/dpdk_check_extern_invocation_8h_source.html +++ b/dpdk_check_extern_invocation_8h_source.html @@ -152,168 +152,163 @@
    27#include "midend/checkExternInvocationCommon.h"
    28
    29namespace P4 {
    -
    30class ReferenceMap;
    -
    31class TypeMap;
    -
    32} // namespace P4
    -
    33
    -
    34namespace P4::DPDK {
    -
    35
    -
    36using namespace P4::literals;
    -
    37
    -
    40
    -
    - -
    42 DpdkProgramStructure *structure;
    -
    43
    -
    44 enum block_t {
    -
    45 MAIN_PARSER = 0,
    -
    46 PRE_CONTROL,
    -
    47 MAIN_CONTROL,
    -
    48 MAIN_DEPARSER,
    -
    49 BLOCK_COUNT,
    -
    50 };
    -
    51
    -
    52 void initPipeConstraints() override {
    -
    53 bitvec validInMainControl;
    -
    54 validInMainControl.setbit(MAIN_CONTROL);
    -
    55 setPipeConstraints("send_to_port"_cs, validInMainControl);
    -
    56 setPipeConstraints("mirror_packet"_cs, validInMainControl);
    -
    57 // Add new constraints here
    -
    58 }
    -
    59
    -
    60 cstring getBlockName(int bit) override {
    -
    61 static const std::array<cstring, BLOCK_COUNT> lookup = {
    -
    62 "main parser"_cs, "pre control"_cs, "main control"_cs, "main deparser"_cs};
    -
    63 return lookup[bit % BLOCK_COUNT];
    -
    64 }
    -
    65
    -
    66 const IR::P4Parser *getParser(const cstring parserName) {
    -
    67 if (auto p = findContext<IR::P4Parser>()) {
    -
    68 if (structure->parsers.count(parserName) != 0 &&
    -
    69 structure->parsers.at(parserName)->name == p->name) {
    -
    70 return p;
    -
    71 }
    -
    72 }
    -
    73 return nullptr;
    -
    74 }
    -
    75
    -
    76 const IR::P4Control *getControl(const cstring controlName) {
    -
    77 if (auto c = findContext<IR::P4Control>()) {
    -
    78 if (structure->pipelines.count(controlName) != 0 &&
    -
    79 structure->pipelines.at(controlName)->name == c->name) {
    -
    80 return c;
    -
    81 }
    -
    82 }
    -
    83 return nullptr;
    -
    84 }
    -
    85
    -
    86 const IR::P4Control *getDeparser(const cstring deparserName) {
    -
    87 if (auto d = findContext<IR::P4Control>()) {
    -
    88 if (structure->deparsers.count(deparserName) != 0 &&
    -
    89 structure->deparsers.at(deparserName)->name == d->name) {
    -
    90 return d;
    -
    91 }
    -
    92 }
    -
    93 return nullptr;
    -
    94 }
    -
    95
    -
    96 void checkBlock(const IR::MethodCallExpression *expr, const cstring externType,
    -
    97 const cstring externName) {
    -
    98 bitvec pos;
    -
    99
    -
    100 LOG4("externType: " << externType << ", externName: " << externName);
    -
    101
    -
    102 if (pipeConstraints.count(externType)) {
    -
    103 if (auto block = getParser("MainParserT"_cs)) {
    -
    104 LOG4("MainParser: " << (void *)block << " " << dbp(block));
    -
    105 pos.setbit(MAIN_PARSER);
    -
    106 checkPipeConstraints(externType, pos, expr, externName, block->name);
    -
    107 } else if (auto block = getControl("PreControlT"_cs)) {
    -
    108 LOG4("PreControl: " << (void *)block << " " << dbp(block));
    -
    109 pos.setbit(PRE_CONTROL);
    -
    110 checkPipeConstraints(externType, pos, expr, externName, block->name);
    -
    111 } else if (auto block = getControl("MainControlT"_cs)) {
    -
    112 LOG4("MainControl: " << (void *)block << " " << dbp(block));
    -
    113 pos.setbit(MAIN_CONTROL);
    -
    114 checkPipeConstraints(externType, pos, expr, externName, block->name);
    -
    115 } else if (auto block = getDeparser("MainDeparserT"_cs)) {
    -
    116 LOG4("MainDeparser: " << (void *)block << " " << dbp(block));
    -
    117 pos.setbit(MAIN_DEPARSER);
    -
    118 checkPipeConstraints(externType, pos, expr, externName, block->name);
    -
    119 } else {
    -
    120 LOG4("Other");
    -
    121 }
    -
    122 } else {
    -
    123 LOG1("Pipe constraints not defined for: " << externType);
    -
    124 }
    -
    125 }
    -
    126
    -
    127 void checkExtern(const P4::ExternMethod *extMethod,
    -
    128 const IR::MethodCallExpression *expr) override {
    -
    129 LOG3("ExternMethod: " << extMethod << ", MethodCallExpression: " << expr);
    -
    130 checkBlock(expr, extMethod->originalExternType->name, extMethod->object->getName().name);
    -
    131 }
    -
    132
    -
    133 void checkExtern(const P4::ExternFunction *extFunction,
    -
    134 const IR::MethodCallExpression *expr) override {
    -
    135 LOG3("ExternFunction: " << extFunction << ", MethodCallExpression: " << expr);
    -
    136 checkBlock(expr, expr->method->toString(), cstring::empty);
    -
    137 }
    -
    138
    -
    139 public:
    - -
    141 DpdkProgramStructure *structure)
    -
    142 : P4::CheckExternInvocationCommon(refMap, typeMap), structure(structure) {
    -
    143 initPipeConstraints();
    -
    144 }
    -
    145};
    +
    30class TypeMap;
    +
    31} // namespace P4
    +
    32
    +
    33namespace P4::DPDK {
    +
    34
    +
    35using namespace P4::literals;
    +
    36
    +
    39
    +
    + +
    41 DpdkProgramStructure *structure;
    +
    42
    +
    43 enum block_t {
    +
    44 MAIN_PARSER = 0,
    +
    45 PRE_CONTROL,
    +
    46 MAIN_CONTROL,
    +
    47 MAIN_DEPARSER,
    +
    48 BLOCK_COUNT,
    +
    49 };
    +
    50
    +
    51 void initPipeConstraints() override {
    +
    52 bitvec validInMainControl;
    +
    53 validInMainControl.setbit(MAIN_CONTROL);
    +
    54 setPipeConstraints("send_to_port"_cs, validInMainControl);
    +
    55 setPipeConstraints("mirror_packet"_cs, validInMainControl);
    +
    56 // Add new constraints here
    +
    57 }
    +
    58
    +
    59 cstring getBlockName(int bit) override {
    +
    60 static const std::array<cstring, BLOCK_COUNT> lookup = {
    +
    61 "main parser"_cs, "pre control"_cs, "main control"_cs, "main deparser"_cs};
    +
    62 return lookup[bit % BLOCK_COUNT];
    +
    63 }
    +
    64
    +
    65 const IR::P4Parser *getParser(const cstring parserName) {
    +
    66 if (auto p = findContext<IR::P4Parser>()) {
    +
    67 if (structure->parsers.count(parserName) != 0 &&
    +
    68 structure->parsers.at(parserName)->name == p->name) {
    +
    69 return p;
    +
    70 }
    +
    71 }
    +
    72 return nullptr;
    +
    73 }
    +
    74
    +
    75 const IR::P4Control *getControl(const cstring controlName) {
    +
    76 if (auto c = findContext<IR::P4Control>()) {
    +
    77 if (structure->pipelines.count(controlName) != 0 &&
    +
    78 structure->pipelines.at(controlName)->name == c->name) {
    +
    79 return c;
    +
    80 }
    +
    81 }
    +
    82 return nullptr;
    +
    83 }
    +
    84
    +
    85 const IR::P4Control *getDeparser(const cstring deparserName) {
    +
    86 if (auto d = findContext<IR::P4Control>()) {
    +
    87 if (structure->deparsers.count(deparserName) != 0 &&
    +
    88 structure->deparsers.at(deparserName)->name == d->name) {
    +
    89 return d;
    +
    90 }
    +
    91 }
    +
    92 return nullptr;
    +
    93 }
    +
    94
    +
    95 void checkBlock(const IR::MethodCallExpression *expr, const cstring externType,
    +
    96 const cstring externName) {
    +
    97 bitvec pos;
    +
    98
    +
    99 LOG4("externType: " << externType << ", externName: " << externName);
    +
    100
    +
    101 if (pipeConstraints.count(externType)) {
    +
    102 if (auto block = getParser("MainParserT"_cs)) {
    +
    103 LOG4("MainParser: " << (void *)block << " " << dbp(block));
    +
    104 pos.setbit(MAIN_PARSER);
    +
    105 checkPipeConstraints(externType, pos, expr, externName, block->name);
    +
    106 } else if (auto block = getControl("PreControlT"_cs)) {
    +
    107 LOG4("PreControl: " << (void *)block << " " << dbp(block));
    +
    108 pos.setbit(PRE_CONTROL);
    +
    109 checkPipeConstraints(externType, pos, expr, externName, block->name);
    +
    110 } else if (auto block = getControl("MainControlT"_cs)) {
    +
    111 LOG4("MainControl: " << (void *)block << " " << dbp(block));
    +
    112 pos.setbit(MAIN_CONTROL);
    +
    113 checkPipeConstraints(externType, pos, expr, externName, block->name);
    +
    114 } else if (auto block = getDeparser("MainDeparserT"_cs)) {
    +
    115 LOG4("MainDeparser: " << (void *)block << " " << dbp(block));
    +
    116 pos.setbit(MAIN_DEPARSER);
    +
    117 checkPipeConstraints(externType, pos, expr, externName, block->name);
    +
    118 } else {
    +
    119 LOG4("Other");
    +
    120 }
    +
    121 } else {
    +
    122 LOG1("Pipe constraints not defined for: " << externType);
    +
    123 }
    +
    124 }
    +
    125
    +
    126 void checkExtern(const P4::ExternMethod *extMethod,
    +
    127 const IR::MethodCallExpression *expr) override {
    +
    128 LOG3("ExternMethod: " << extMethod << ", MethodCallExpression: " << expr);
    +
    129 checkBlock(expr, extMethod->originalExternType->name, extMethod->object->getName().name);
    +
    130 }
    +
    131
    +
    132 void checkExtern(const P4::ExternFunction *extFunction,
    +
    133 const IR::MethodCallExpression *expr) override {
    +
    134 LOG3("ExternFunction: " << extFunction << ", MethodCallExpression: " << expr);
    +
    135 checkBlock(expr, expr->method->toString(), cstring::empty);
    +
    136 }
    +
    137
    +
    138 public:
    + +
    140 : P4::CheckExternInvocationCommon(typeMap), structure(structure) {
    +
    141 initPipeConstraints();
    +
    142 }
    +
    143};
    -
    146
    -
    - -
    150 P4::ReferenceMap *refMap;
    -
    151 P4::TypeMap *typeMap;
    -
    152 DpdkProgramStructure *structure;
    -
    153
    -
    154 public:
    - -
    156 DpdkProgramStructure *structure)
    -
    157 : refMap(refMap), typeMap(typeMap), structure(structure) {}
    -
    158
    -
    159 bool preorder(const IR::P4Program *program) {
    -
    160 if (structure->isPNA()) {
    -
    161 LOG1("Checking extern invocations for PNA architecture.");
    -
    162 auto checker = new CheckPNAExternInvocation(refMap, typeMap, structure);
    -
    163 program->apply(*checker);
    -
    164 } else if (structure->isPSA()) {
    -
    165 LOG1("Checking extern invocations for PSA architecture.");
    -
    166 // Add class checking PSA constraints here.
    -
    167 } else {
    -
    168 LOG1("Unknown architecture: " << structure->p4arch << ", not checking constraints.");
    -
    169 }
    -
    170 return false;
    -
    171 }
    -
    172};
    +
    144
    +
    + +
    148 P4::TypeMap *typeMap;
    +
    149 DpdkProgramStructure *structure;
    +
    150
    +
    151 public:
    + +
    153 : typeMap(typeMap), structure(structure) {}
    +
    154
    +
    155 bool preorder(const IR::P4Program *program) {
    +
    156 if (structure->isPNA()) {
    +
    157 LOG1("Checking extern invocations for PNA architecture.");
    +
    158 CheckPNAExternInvocation checker(typeMap, structure);
    +
    159 program->apply(checker, getChildContext());
    +
    160 } else if (structure->isPSA()) {
    +
    161 LOG1("Checking extern invocations for PSA architecture.");
    +
    162 // Add class checking PSA constraints here.
    +
    163 } else {
    +
    164 LOG1("Unknown architecture: " << structure->p4arch << ", not checking constraints.");
    +
    165 }
    +
    166 return false;
    +
    167 }
    +
    168};
    -
    173
    -
    174} // namespace P4::DPDK
    -
    175
    -
    176#endif /* BACKENDS_DPDK_DPDKCHECKEXTERNINVOCATION_H_ */
    +
    169
    +
    170} // namespace P4::DPDK
    +
    171
    +
    172#endif /* BACKENDS_DPDK_DPDKCHECKEXTERNINVOCATION_H_ */
    Base class which can be used to prepare classes for checking constraints for invocations of externs (...
    Definition checkExternInvocationCommon.h:41
    -
    void setPipeConstraints(cstring extType, bitvec vec)
    Set the pipe (parser/control block) constraints.
    Definition checkExternInvocationCommon.h:116
    -
    void checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)
    Check if the invocation of extern object method or extern function is valid in the block where it is ...
    Definition checkExternInvocationCommon.h:138
    -
    Class which chooses the correct class for checking the constraints for invocations....
    Definition dpdkCheckExternInvocation.h:149
    -
    Class for checking constraints for invocations of PNA architecture extern methods and functions.
    Definition dpdkCheckExternInvocation.h:41
    +
    void setPipeConstraints(cstring extType, bitvec vec)
    Set the pipe (parser/control block) constraints.
    Definition checkExternInvocationCommon.h:115
    +
    void checkPipeConstraints(cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)
    Check if the invocation of extern object method or extern function is valid in the block where it is ...
    Definition checkExternInvocationCommon.h:137
    +
    Class which chooses the correct class for checking the constraints for invocations....
    Definition dpdkCheckExternInvocation.h:147
    +
    Class for checking constraints for invocations of PNA architecture extern methods and functions.
    Definition dpdkCheckExternInvocation.h:40
    Definition methodInstance.h:194
    Definition methodInstance.h:168
    virtual ID getName() const =0
    Definition visitor.h:400
    const IR::IDeclaration * object
    Definition methodInstance.h:79
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition typeMap.h:41
    Definition bitvec.h:120
    Definition cstring.h:85
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    Definition cstring.h:80
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    Collect information related to P4 programs targeting dpdk.
    Definition dpdkProgramStructure.h:16
    diff --git a/dpdk_context_8h_source.html b/dpdk_context_8h_source.html index 5d1584d27c8..110b0870768 100644 --- a/dpdk_context_8h_source.html +++ b/dpdk_context_8h_source.html @@ -308,7 +308,7 @@
    Definition json.h:115
    Definition json.h:164
    Definition cstring.h:85
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    cstring tableType
    Definition dpdkContext.h:52
    unsigned tableHandle
    Unique ID for the table.
    Definition dpdkContext.h:48
    cstring direction
    Direction of the table, can be ["ingress","egress"].
    Definition dpdkContext.h:46
    diff --git a/dpdk_helpers_8h_source.html b/dpdk_helpers_8h_source.html index 72eedb52bb8..5804f09eb07 100644 --- a/dpdk_helpers_8h_source.html +++ b/dpdk_helpers_8h_source.html @@ -345,7 +345,7 @@
    Definition removeComplexExpressions.h:30
    Definition typeMap.h:41
    Definition cstring.h:85
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    const char PnaMainOutputMetadataOutputPortName[]
    Name of the metadata used as output port.
    Definition dpdkHelpers.h:48
    void error(const char *format, Args &&...args)
    Report an error with the given message.
    Definition error.h:51
    Collect information related to P4 programs targeting dpdk.
    Definition dpdkProgramStructure.h:16
    diff --git a/dpdk_metadata_8h_source.html b/dpdk_metadata_8h_source.html index 0384c3e0067..18c567d00ed 100644 --- a/dpdk_metadata_8h_source.html +++ b/dpdk_metadata_8h_source.html @@ -232,7 +232,7 @@
    Definition cstring.h:85
    Definition ordered_map.h:32
    Definition ordered_set.h:32
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    diff --git a/dpdk_program_8h_source.html b/dpdk_program_8h_source.html index 3f374f0622e..5e62f69df29 100644 --- a/dpdk_program_8h_source.html +++ b/dpdk_program_8h_source.html @@ -329,7 +329,7 @@
    Definition typeMap.h:41
    Definition cstring.h:85
    Definition ordered_set.h:32
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    Definition cstring.h:80
    Collect information related to P4 programs targeting dpdk.
    Definition dpdkProgramStructure.h:16
    diff --git a/dpdk_utils_8h_source.html b/dpdk_utils_8h_source.html index 3697833448c..74f5cc12389 100644 --- a/dpdk_utils_8h_source.html +++ b/dpdk_utils_8h_source.html @@ -167,7 +167,7 @@
    44} // namespace P4::DPDK
    45#endif /* BACKENDS_DPDK_DPDKUTILS_H_ */
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37
    IR::Declaration_Instance * createRegDeclarationInstance(cstring instanceName, int regSize, int indexBitWidth, int initValBitWidth)
    Creates Register extern declaration for holding persistent information.
    Definition dpdkUtils.cpp:133
    int getMetadataFieldWidth(int width)
    Update bitwidth of Metadata fields to 32 or 64 bits if it 8-bit aligned.
    Definition dpdkUtils.cpp:161
    bool reservedNames(P4::ReferenceMap *refMap, const std::vector< cstring > &names, cstring &resName)
    Check for reserved names for DPDK target.
    Definition dpdkUtils.cpp:149
    diff --git a/eliminate_invalid_headers_8h_source.html b/eliminate_invalid_headers_8h_source.html index 904b9a98003..966a032f4dd 100644 --- a/eliminate_invalid_headers_8h_source.html +++ b/eliminate_invalid_headers_8h_source.html @@ -142,53 +142,52 @@
    17#ifndef MIDEND_ELIMINATEINVALIDHEADERS_H_
    18#define MIDEND_ELIMINATEINVALIDHEADERS_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/p4/typeChecking/typeChecker.h"
    -
    22#include "ir/ir.h"
    -
    23
    -
    24namespace P4 {
    -
    25
    -
    - - - -
    35 std::vector<const IR::Declaration_Variable *> variables;
    -
    36
    -
    37 public:
    -
    38 DoEliminateInvalidHeaders() { setName("DoEliminateInvalidHeaders"); }
    -
    39
    -
    40 Visitor::profile_t init_apply(const IR::Node *node) override {
    -
    41 auto rv = Transform::init_apply(node);
    -
    42 node->apply(nameGen);
    -
    43
    -
    44 return rv;
    -
    45 }
    -
    46
    -
    47 const IR::Node *postorder(IR::InvalidHeader *expression) override;
    -
    48 const IR::Node *postorder(IR::InvalidHeaderUnion *expression) override;
    -
    49 const IR::Node *postorder(IR::P4Control *control) override;
    -
    50 const IR::Node *postorder(IR::ParserState *parser) override;
    -
    51 const IR::Node *postorder(IR::P4Action *action) override;
    -
    52};
    +
    20#include "frontends/p4/typeChecking/typeChecker.h"
    +
    21#include "ir/ir.h"
    +
    22
    +
    23namespace P4 {
    +
    24
    +
    + + + +
    34 std::vector<const IR::Declaration_Variable *> variables;
    +
    35
    +
    36 public:
    +
    37 DoEliminateInvalidHeaders() { setName("DoEliminateInvalidHeaders"); }
    +
    38
    +
    39 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    40 auto rv = Transform::init_apply(node);
    +
    41 node->apply(nameGen);
    +
    42
    +
    43 return rv;
    +
    44 }
    +
    45
    +
    46 const IR::Node *postorder(IR::InvalidHeader *expression) override;
    +
    47 const IR::Node *postorder(IR::InvalidHeaderUnion *expression) override;
    +
    48 const IR::Node *postorder(IR::P4Control *control) override;
    +
    49 const IR::Node *postorder(IR::ParserState *parser) override;
    +
    50 const IR::Node *postorder(IR::P4Action *action) override;
    +
    51};
    -
    53
    -
    - -
    55 public:
    -
    56 EliminateInvalidHeaders(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    -
    57 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    -
    58 passes.push_back(typeChecking);
    -
    59 passes.push_back(new DoEliminateInvalidHeaders());
    -
    60 setName("EliminateInvalidHeaders");
    -
    61 }
    -
    62};
    +
    52
    +
    + +
    54 public:
    +
    55 EliminateInvalidHeaders(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    +
    56 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    57 passes.push_back(typeChecking);
    +
    58 passes.push_back(new DoEliminateInvalidHeaders());
    +
    59 setName("EliminateInvalidHeaders");
    +
    60 }
    +
    61};
    -
    63
    -
    64} // namespace P4
    -
    65
    -
    66#endif /* MIDEND_ELIMINATEINVALIDHEADERS_H_ */
    -
    Definition eliminateInvalidHeaders.h:32
    -
    Definition eliminateInvalidHeaders.h:54
    +
    62
    +
    63} // namespace P4
    +
    64
    +
    65#endif /* MIDEND_ELIMINATEINVALIDHEADERS_H_ */
    +
    Definition eliminateInvalidHeaders.h:31
    +
    Definition eliminateInvalidHeaders.h:53
    Definition node.h:52
    Definition node.h:95
    Definition referenceMap.h:36
    diff --git a/eliminate_switch_8h_source.html b/eliminate_switch_8h_source.html index 63e48d9058d..6b25b13bb0e 100644 --- a/eliminate_switch_8h_source.html +++ b/eliminate_switch_8h_source.html @@ -142,59 +142,64 @@
    17#ifndef MIDEND_ELIMINATESWITCH_H_
    18#define MIDEND_ELIMINATESWITCH_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/p4/typeChecking/typeChecker.h"
    -
    22#include "ir/ir.h"
    -
    23
    -
    24namespace P4 {
    -
    25
    -
    -
    78class DoEliminateSwitch final : public Transform {
    -
    79 NameGenerator *nameGen;
    -
    80 const TypeMap *typeMap;
    -
    81 std::vector<const IR::Declaration *> toInsert;
    -
    82
    -
    83 public:
    -
    84 bool exactNeeded = false;
    -
    85
    -
    86 DoEliminateSwitch(ReferenceMap *refMap, const TypeMap *typeMap)
    -
    87 : nameGen(refMap), typeMap(typeMap) {
    -
    88 setName("DoEliminateSwitch");
    -
    89 CHECK_NULL(refMap);
    -
    90 CHECK_NULL(typeMap);
    -
    91 }
    -
    92 const IR::Node *postorder(IR::SwitchStatement *statement) override;
    -
    93 const IR::Node *postorder(IR::P4Control *control) override;
    -
    94 const IR::Node *postorder(IR::P4Program *program) override;
    -
    95};
    -
    +
    20#include "frontends/p4/typeChecking/typeChecker.h"
    +
    21#include "ir/ir.h"
    +
    22
    +
    23namespace P4 {
    +
    24
    +
    +
    77class DoEliminateSwitch final : public Transform {
    + +
    79 const TypeMap *typeMap;
    +
    80 std::vector<const IR::Declaration *> toInsert;
    +
    81
    +
    82 public:
    +
    83 bool exactNeeded = false;
    +
    84
    +
    85 explicit DoEliminateSwitch(const TypeMap *typeMap) : typeMap(typeMap) {
    +
    86 setName("DoEliminateSwitch");
    +
    87 CHECK_NULL(typeMap);
    +
    88 }
    +
    89
    +
    90 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    91 auto rv = Transform::init_apply(node);
    +
    92 node->apply(nameGen);
    +
    93
    +
    94 return rv;
    +
    95 }
    96
    -
    -
    97class EliminateSwitch final : public PassManager {
    -
    98 public:
    -
    99 EliminateSwitch(ReferenceMap *refMap, TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    -
    100 if (!typeChecking) typeChecking = new TypeChecking(refMap, typeMap);
    -
    101 passes.push_back(typeChecking);
    -
    102 passes.push_back(new DoEliminateSwitch(refMap, typeMap));
    -
    103 passes.push_back(new ClearTypeMap(typeMap));
    -
    104 setName("EliminateSwitch");
    -
    105 }
    -
    106};
    +
    97 const IR::Node *postorder(IR::SwitchStatement *statement) override;
    +
    98 const IR::Node *postorder(IR::P4Control *control) override;
    +
    99 const IR::Node *postorder(IR::P4Program *program) override;
    +
    100};
    +
    +
    101
    +
    +
    102class EliminateSwitch final : public PassManager {
    +
    103 public:
    +
    104 EliminateSwitch(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
    +
    105 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    106 passes.push_back(typeChecking);
    +
    107 passes.push_back(new DoEliminateSwitch(typeMap));
    +
    108 passes.push_back(new ClearTypeMap(typeMap));
    +
    109 setName("EliminateSwitch");
    +
    110 }
    +
    111};
    -
    107
    -
    108} // namespace P4
    -
    109
    -
    110#endif /* MIDEND_ELIMINATESWITCH_H_ */
    +
    112
    +
    113} // namespace P4
    +
    114
    +
    115#endif /* MIDEND_ELIMINATESWITCH_H_ */
    Definition typeChecker.h:32
    -
    Definition eliminateSwitch.h:78
    -
    Definition eliminateSwitch.h:97
    +
    Definition eliminateSwitch.h:77
    +
    Definition eliminateSwitch.h:102
    Definition node.h:95
    -
    Definition referenceMap.h:29
    +
    Definition referenceMap.h:36
    Definition pass_manager.h:40
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    +
    Definition visitor.h:78
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/eliminate_tuples_8h_source.html b/eliminate_tuples_8h_source.html index 0efe8469982..ca65e297f18 100644 --- a/eliminate_tuples_8h_source.html +++ b/eliminate_tuples_8h_source.html @@ -142,103 +142,102 @@
    17#ifndef MIDEND_ELIMINATETUPLES_H_
    18#define MIDEND_ELIMINATETUPLES_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/common/resolveReferences/resolveReferences.h"
    -
    22#include "frontends/p4/typeChecking/typeChecker.h"
    -
    23#include "ir/ir.h"
    -
    24
    -
    25namespace P4 {
    -
    26
    -
    - - -
    33 std::set<const IR::Type_Struct *> inserted;
    -
    34 const IR::Type *convertType(const IR::Type *type);
    -
    35
    -
    36 public:
    -
    37 NameGenerator &ng;
    -
    38 P4::TypeMap *typeMap;
    -
    39
    -
    40 ReplacementMap(NameGenerator &ng, TypeMap *typeMap) : ng(ng), typeMap(typeMap) {
    -
    41 CHECK_NULL(typeMap);
    -
    42 }
    -
    43 const IR::Type_Struct *getReplacement(const IR::Type_BaseList *tt);
    -
    44 IR::IndexedVector<IR::Node> *getNewReplacements();
    -
    45};
    +
    20#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    21#include "frontends/p4/typeChecking/typeChecker.h"
    +
    22#include "ir/ir.h"
    +
    23
    +
    24namespace P4 {
    +
    25
    +
    + + +
    32 std::set<const IR::Type_Struct *> inserted;
    +
    33 const IR::Type *convertType(const IR::Type *type);
    +
    34
    +
    35 public:
    +
    36 NameGenerator &ng;
    +
    37 P4::TypeMap *typeMap;
    +
    38
    +
    39 ReplacementMap(NameGenerator &ng, TypeMap *typeMap) : ng(ng), typeMap(typeMap) {
    +
    40 CHECK_NULL(typeMap);
    +
    41 }
    +
    42 const IR::Type_Struct *getReplacement(const IR::Type_BaseList *tt);
    +
    43 IR::IndexedVector<IR::Node> *getNewReplacements();
    +
    44};
    -
    46
    -
    -
    78class DoReplaceTuples final : public Transform {
    -
    79 ReplacementMap repl;
    - -
    81
    -
    82 public:
    -
    83 explicit DoReplaceTuples(TypeMap *typeMap) : repl(ng, typeMap) { setName("DoReplaceTuples"); }
    -
    84 Visitor::profile_t init_apply(const IR::Node *node) override {
    -
    85 auto rv = Transform::init_apply(node);
    -
    86 node->apply(ng);
    -
    87
    -
    88 return rv;
    -
    89 }
    -
    90 const IR::Node *skip(const IR::Node *node) {
    -
    91 prune();
    -
    92 return node;
    -
    93 }
    -
    94 const IR::Node *postorder(IR::Type_BaseList *type) override;
    -
    95 const IR::Node *insertReplacements(const IR::Node *before);
    -
    96 const IR::Node *postorder(IR::Type_Struct *type) override { return insertReplacements(type); }
    -
    97 const IR::Node *postorder(IR::ArrayIndex *expression) override;
    -
    98 const IR::Node *postorder(IR::Type_Typedef *type) override { return insertReplacements(type); }
    -
    99 const IR::Node *postorder(IR::Type_Newtype *type) override { return insertReplacements(type); }
    -
    100 const IR::Node *postorder(IR::P4Parser *parser) override { return insertReplacements(parser); }
    -
    101 const IR::Node *postorder(IR::P4Control *control) override {
    -
    102 return insertReplacements(control);
    -
    103 }
    -
    104 const IR::Node *postorder(IR::Method *method) override { return insertReplacements(method); }
    -
    105 const IR::Node *postorder(IR::Type_Extern *ext) override { return insertReplacements(ext); }
    -
    106 const IR::Node *postorder(IR::Declaration_Instance *decl) override {
    -
    107 return insertReplacements(decl);
    -
    108 }
    -
    109 const IR::Node *preorder(IR::P4ValueSet *set) override {
    -
    110 // Disable substitution of type parameters for value sets.
    -
    111 // We want to keep these as tuples.
    -
    112 return skip(set);
    -
    113 }
    -
    114 const IR::Node *preorder(IR::P4ListExpression *expression) override { return skip(expression); }
    -
    115 const IR::Node *preorder(IR::Type_P4List *list) override { return skip(list); }
    -
    116};
    +
    45
    +
    +
    77class DoReplaceTuples final : public Transform {
    +
    78 ReplacementMap repl;
    + +
    80
    +
    81 public:
    +
    82 explicit DoReplaceTuples(TypeMap *typeMap) : repl(ng, typeMap) { setName("DoReplaceTuples"); }
    +
    83 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    84 auto rv = Transform::init_apply(node);
    +
    85 node->apply(ng);
    +
    86
    +
    87 return rv;
    +
    88 }
    +
    89 const IR::Node *skip(const IR::Node *node) {
    +
    90 prune();
    +
    91 return node;
    +
    92 }
    +
    93 const IR::Node *postorder(IR::Type_BaseList *type) override;
    +
    94 const IR::Node *insertReplacements(const IR::Node *before);
    +
    95 const IR::Node *postorder(IR::Type_Struct *type) override { return insertReplacements(type); }
    +
    96 const IR::Node *postorder(IR::ArrayIndex *expression) override;
    +
    97 const IR::Node *postorder(IR::Type_Typedef *type) override { return insertReplacements(type); }
    +
    98 const IR::Node *postorder(IR::Type_Newtype *type) override { return insertReplacements(type); }
    +
    99 const IR::Node *postorder(IR::P4Parser *parser) override { return insertReplacements(parser); }
    +
    100 const IR::Node *postorder(IR::P4Control *control) override {
    +
    101 return insertReplacements(control);
    +
    102 }
    +
    103 const IR::Node *postorder(IR::Method *method) override { return insertReplacements(method); }
    +
    104 const IR::Node *postorder(IR::Type_Extern *ext) override { return insertReplacements(ext); }
    +
    105 const IR::Node *postorder(IR::Declaration_Instance *decl) override {
    +
    106 return insertReplacements(decl);
    +
    107 }
    +
    108 const IR::Node *preorder(IR::P4ValueSet *set) override {
    +
    109 // Disable substitution of type parameters for value sets.
    +
    110 // We want to keep these as tuples.
    +
    111 return skip(set);
    +
    112 }
    +
    113 const IR::Node *preorder(IR::P4ListExpression *expression) override { return skip(expression); }
    +
    114 const IR::Node *preorder(IR::Type_P4List *list) override { return skip(list); }
    +
    115};
    -
    117
    -
    -
    118class EliminateTuples final : public PassManager {
    -
    119 public:
    -
    120 explicit EliminateTuples(TypeMap *typeMap, TypeChecking *typeChecking = nullptr,
    -
    121 TypeInference *typeInference = nullptr) {
    -
    122 passes.push_back(typeChecking ? typeChecking : new TypeChecking(nullptr, typeMap));
    -
    123 passes.push_back(new DoReplaceTuples(typeMap));
    -
    124 passes.push_back(new ClearTypeMap(typeMap));
    -
    125 // We do a round of type-checking which may mutate the program.
    -
    126 // This will convert some ListExpressions
    -
    127 // into StructExpression where tuples were converted
    -
    128 // to structs.
    -
    129 passes.push_back(typeInference ? typeInference : new TypeInference(typeMap, false));
    -
    130 setName("EliminateTuples");
    -
    131 }
    -
    132};
    +
    116
    +
    +
    117class EliminateTuples final : public PassManager {
    +
    118 public:
    +
    119 explicit EliminateTuples(TypeMap *typeMap, TypeChecking *typeChecking = nullptr,
    +
    120 TypeInference *typeInference = nullptr) {
    +
    121 passes.push_back(typeChecking ? typeChecking : new TypeChecking(nullptr, typeMap));
    +
    122 passes.push_back(new DoReplaceTuples(typeMap));
    +
    123 passes.push_back(new ClearTypeMap(typeMap));
    +
    124 // We do a round of type-checking which may mutate the program.
    +
    125 // This will convert some ListExpressions
    +
    126 // into StructExpression where tuples were converted
    +
    127 // to structs.
    +
    128 passes.push_back(typeInference ? typeInference : new TypeInference(typeMap, false));
    +
    129 setName("EliminateTuples");
    +
    130 }
    +
    131};
    -
    133
    -
    134} // namespace P4
    -
    135
    -
    136#endif /* MIDEND_ELIMINATETUPLES_H_ */
    +
    132
    +
    133} // namespace P4
    +
    134
    +
    135#endif /* MIDEND_ELIMINATETUPLES_H_ */
    Definition typeChecker.h:32
    -
    Definition eliminateTuples.h:78
    -
    Definition eliminateTuples.h:118
    +
    Definition eliminateTuples.h:77
    +
    Definition eliminateTuples.h:117
    Definition node.h:52
    Definition node.h:95
    Definition referenceMap.h:36
    Definition referenceMap.h:29
    Definition pass_manager.h:40
    -
    Definition eliminateTuples.h:31
    +
    Definition eliminateTuples.h:30
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeChecker.h:483
    diff --git a/expand_lookahead_8h_source.html b/expand_lookahead_8h_source.html index 328b8f21599..d06cfe205dd 100644 --- a/expand_lookahead_8h_source.html +++ b/expand_lookahead_8h_source.html @@ -142,80 +142,79 @@
    17#ifndef MIDEND_EXPANDLOOKAHEAD_H_
    18#define MIDEND_EXPANDLOOKAHEAD_H_
    19
    -
    20#include "frontends/common/resolveReferences/referenceMap.h"
    -
    21#include "frontends/common/resolveReferences/resolveReferences.h"
    -
    22#include "frontends/p4/typeChecking/typeChecker.h"
    -
    23#include "frontends/p4/typeMap.h"
    -
    24#include "ir/ir.h"
    -
    25
    -
    26namespace P4 {
    -
    27
    -
    - - -
    43 P4::TypeMap *typeMap;
    - -
    50 bool expandHeader = true;
    -
    51
    -
    52 struct ExpansionInfo {
    -
    53 const IR::Statement *statement;
    -
    54 unsigned width;
    -
    55 const IR::Type *origType;
    -
    56 const IR::PathExpression *tmp; // temporary used for result
    -
    57 };
    -
    58
    -
    59 void expand(const IR::PathExpression *bitvector, const IR::Type *type, unsigned *offset,
    -
    60 const IR::Expression *destination, IR::IndexedVector<IR::StatOrDecl> *output);
    -
    61 ExpansionInfo *convertLookahead(const IR::MethodCallExpression *expression);
    -
    62
    -
    63 public:
    -
    64 explicit DoExpandLookahead(TypeMap *typeMap, bool expandHeader = true)
    -
    65 : typeMap(typeMap), expandHeader(expandHeader) {
    -
    66 CHECK_NULL(typeMap);
    -
    67 setName("DoExpandLookahead");
    -
    68 }
    -
    69 Visitor::profile_t init_apply(const IR::Node *node) override {
    -
    70 auto rv = Transform::init_apply(node);
    -
    71 node->apply(nameGen);
    -
    72
    -
    73 return rv;
    -
    74 }
    -
    75
    -
    76 const IR::Node *postorder(IR::AssignmentStatement *statement) override;
    -
    77 const IR::Node *postorder(IR::MethodCallStatement *statement) override;
    -
    78 const IR::Node *preorder(IR::P4Control *control) override {
    -
    79 prune();
    -
    80 return control;
    -
    81 }
    -
    82 const IR::Node *preorder(IR::P4Parser *parser) override {
    -
    83 newDecls.clear();
    -
    84 return parser;
    -
    85 }
    -
    86 const IR::Node *postorder(IR::P4Parser *parser) override {
    -
    87 if (!newDecls.empty()) parser->parserLocals.append(newDecls);
    -
    88 return parser;
    -
    89 }
    -
    90};
    +
    20#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    21#include "frontends/p4/typeChecking/typeChecker.h"
    +
    22#include "frontends/p4/typeMap.h"
    +
    23#include "ir/ir.h"
    +
    24
    +
    25namespace P4 {
    +
    26
    +
    + + +
    42 P4::TypeMap *typeMap;
    + +
    49 bool expandHeader = true;
    +
    50
    +
    51 struct ExpansionInfo {
    +
    52 const IR::Statement *statement;
    +
    53 unsigned width;
    +
    54 const IR::Type *origType;
    +
    55 const IR::PathExpression *tmp; // temporary used for result
    +
    56 };
    +
    57
    +
    58 void expand(const IR::PathExpression *bitvector, const IR::Type *type, unsigned *offset,
    +
    59 const IR::Expression *destination, IR::IndexedVector<IR::StatOrDecl> *output);
    +
    60 ExpansionInfo *convertLookahead(const IR::MethodCallExpression *expression);
    +
    61
    +
    62 public:
    +
    63 explicit DoExpandLookahead(TypeMap *typeMap, bool expandHeader = true)
    +
    64 : typeMap(typeMap), expandHeader(expandHeader) {
    +
    65 CHECK_NULL(typeMap);
    +
    66 setName("DoExpandLookahead");
    +
    67 }
    +
    68 Visitor::profile_t init_apply(const IR::Node *node) override {
    +
    69 auto rv = Transform::init_apply(node);
    +
    70 node->apply(nameGen);
    +
    71
    +
    72 return rv;
    +
    73 }
    +
    74
    +
    75 const IR::Node *postorder(IR::AssignmentStatement *statement) override;
    +
    76 const IR::Node *postorder(IR::MethodCallStatement *statement) override;
    +
    77 const IR::Node *preorder(IR::P4Control *control) override {
    +
    78 prune();
    +
    79 return control;
    +
    80 }
    +
    81 const IR::Node *preorder(IR::P4Parser *parser) override {
    +
    82 newDecls.clear();
    +
    83 return parser;
    +
    84 }
    +
    85 const IR::Node *postorder(IR::P4Parser *parser) override {
    +
    86 if (!newDecls.empty()) parser->parserLocals.append(newDecls);
    +
    87 return parser;
    +
    88 }
    +
    89};
    -
    91
    -
    - -
    96 public:
    -
    97 explicit ExpandLookahead(TypeMap *typeMap, TypeChecking *typeChecking = nullptr,
    -
    98 bool expandHeader = true) {
    -
    99 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    -
    100 passes.push_back(typeChecking);
    -
    101 passes.push_back(new DoExpandLookahead(typeMap, expandHeader));
    -
    102 setName("ExpandLookahead");
    -
    103 }
    -
    104};
    +
    90
    +
    + +
    95 public:
    +
    96 explicit ExpandLookahead(TypeMap *typeMap, TypeChecking *typeChecking = nullptr,
    +
    97 bool expandHeader = true) {
    +
    98 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
    +
    99 passes.push_back(typeChecking);
    +
    100 passes.push_back(new DoExpandLookahead(typeMap, expandHeader));
    +
    101 setName("ExpandLookahead");
    +
    102 }
    +
    103};
    -
    105
    -
    106} // namespace P4
    -
    107
    -
    108#endif /* MIDEND_EXPANDLOOKAHEAD_H_ */
    -
    Definition expandLookahead.h:41
    -
    Definition expandLookahead.h:95
    +
    104
    +
    105} // namespace P4
    +
    106
    +
    107#endif /* MIDEND_EXPANDLOOKAHEAD_H_ */
    +
    Definition expandLookahead.h:40
    +
    Definition expandLookahead.h:94
    Definition node.h:52
    Definition node.h:95
    Definition referenceMap.h:36
    diff --git a/flatten_headers_8h_source.html b/flatten_headers_8h_source.html index d9bac0a25c1..8b0845fdece 100644 --- a/flatten_headers_8h_source.html +++ b/flatten_headers_8h_source.html @@ -207,7 +207,7 @@
    151} // namespace P4
    152
    153#endif /* MIDEND_FLATTENHEADERS_H_ */
    -
    Definition flattenInterfaceStructs.h:30
    +
    Definition flattenInterfaceStructs.h:31
    Definition typeChecker.h:32
    Definition flattenHeaders.h:30
    Definition flattenHeaders.h:139
    @@ -222,7 +222,7 @@
    Definition cstring.h:85
    Definition ordered_map.h:32
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    -
    Definition flattenInterfaceStructs.h:67
    +
    Definition flattenInterfaceStructs.h:68
    diff --git a/flatten_interface_structs_8h_source.html b/flatten_interface_structs_8h_source.html index d0de2efafea..f3dd98b0e3d 100644 --- a/flatten_interface_structs_8h_source.html +++ b/flatten_interface_structs_8h_source.html @@ -142,196 +142,192 @@
    17#ifndef MIDEND_FLATTENINTERFACESTRUCTS_H_
    18#define MIDEND_FLATTENINTERFACESTRUCTS_H_
    19
    -
    20#include "frontends/p4/typeChecking/typeChecker.h"
    -
    21#include "ir/ir.h"
    -
    22#include "lib/cstring.h"
    -
    23
    -
    24namespace P4 {
    -
    25
    -
    - -
    31 public:
    - -
    33
    -
    42 virtual bool keep(const IR::Annotation *) { return true; }
    -
    43};
    +
    20#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    21#include "frontends/p4/typeChecking/typeChecker.h"
    +
    22#include "ir/ir.h"
    +
    23#include "lib/cstring.h"
    +
    24
    +
    25namespace P4 {
    +
    26
    +
    + +
    32 public:
    + +
    34
    +
    43 virtual bool keep(const IR::Annotation *) { return true; }
    +
    44};
    -
    44
    -
    65template <typename T>
    -
    66// T is the type of objects that will be replaced. E.g., IR::Type_Struct
    -
    - -
    68 StructTypeReplacement(const P4::TypeMap *typeMap, const IR::Type_StructLike *type,
    - - -
    71 flatten(typeMap, cstring::empty, type, type->annotations, vec, policy);
    -
    72 if (type->is<IR::Type_Struct>()) {
    -
    73 replacementType =
    -
    74 new IR::Type_Struct(type->srcInfo, type->name, IR::Annotations::empty, *vec);
    -
    75 } else if (type->is<IR::Type_Header>()) {
    -
    76 replacementType =
    -
    77 new IR::Type_Header(type->srcInfo, type->name, IR::Annotations::empty, *vec);
    -
    78 } else {
    -
    79 BUG("Unexpected type %1%", type);
    -
    80 }
    -
    81 }
    -
    82
    -
    83 // Maps nested field names to final field names.
    -
    84 // In our example this could be:
    -
    85 // .t.s.a -> _t_s_a0;
    -
    86 // .t.s.b -> _t_s_b1;
    -
    87 // .t.y -> _t_y2;
    -
    88 // .x -> _x3;
    -
    89 std::map<cstring, cstring> fieldNameRemap;
    -
    90 // Maps internal fields names to types.
    -
    91 // .t -> T
    -
    92 // .t.s -> S
    -
    93 std::map<cstring, const IR::Type_StructLike *> structFieldMap;
    -
    94 // Holds a new flat type
    -
    95 // struct M {
    -
    96 // bit _t_s_a0;
    -
    97 // bool _t_s_b1;
    -
    98 // bit<6> _t_y2;
    -
    99 // bit<3> _x3;
    -
    100 // }
    -
    101 const IR::Type *replacementType;
    -
    102 virtual void dbprint(std::ostream &out) const { out << replacementType; }
    -
    103
    -
    104 // Helper for constructor
    -
    105 void flatten(const P4::TypeMap *typeMap, cstring prefix, const IR::Type *type,
    -
    106 const IR::Annotations *annotations, IR::IndexedVector<IR::StructField> *fields,
    - -
    108 // Drop name annotations
    -
    109 annotations = annotations->where(
    -
    110 [](const IR::Annotation *a) { return a->name != IR::Annotation::nameAnnotation; });
    -
    111 if (auto st = type->to<T>()) {
    -
    112 auto sannotations = st->annotations->where([policy](const IR::Annotation *annot) {
    -
    113 if (!policy) return false;
    -
    114 return policy->keep(annot);
    -
    115 });
    -
    116 structFieldMap.emplace(prefix, st);
    -
    117 for (auto f : st->fields) {
    -
    118 auto na = new IR::Annotations();
    -
    119 na->append(sannotations);
    -
    120 na->append(annotations);
    -
    121 na->append(f->annotations);
    -
    122 auto ft = typeMap->getType(f, true);
    -
    123 flatten(typeMap, prefix + "." + f->name, ft, na, fields, policy);
    -
    124 }
    -
    125 return;
    -
    126 }
    -
    127 cstring fieldName = prefix.replace('.', '_') + std::to_string(fieldNameRemap.size());
    -
    128 fieldNameRemap.emplace(prefix, fieldName);
    -
    129 fields->push_back(new IR::StructField(IR::ID(fieldName), annotations, type->getP4Type()));
    -
    130 LOG3("Flatten: " << type << " | " << prefix);
    -
    131 }
    -
    132
    -
    -
    137 const IR::StructExpression *explode(const IR::Expression *root, cstring prefix) {
    - -
    139 auto fieldType = ::P4::get(structFieldMap, prefix);
    -
    140 BUG_CHECK(fieldType, "No field for %1%", prefix);
    -
    141 for (auto f : fieldType->fields) {
    -
    142 cstring fieldName = prefix + "." + f->name.name;
    -
    143 auto newFieldname = ::P4::get(fieldNameRemap, fieldName);
    -
    144 const IR::Expression *expr;
    -
    145 if (!newFieldname.isNullOrEmpty()) {
    -
    146 expr = new IR::Member(root, newFieldname);
    -
    147 } else {
    -
    148 expr = explode(root, fieldName);
    -
    149 }
    -
    150 vec->push_back(new IR::NamedExpression(f->name, expr));
    -
    151 }
    -
    152 auto type = fieldType->getP4Type()->template to<IR::Type_Name>();
    -
    153 return new IR::StructExpression(root->srcInfo, type, type, *vec);
    -
    154 }
    +
    45
    +
    66template <typename T>
    +
    67// T is the type of objects that will be replaced. E.g., IR::Type_Struct
    +
    + +
    69 StructTypeReplacement(const P4::TypeMap *typeMap, const IR::Type_StructLike *type,
    + + +
    72 flatten(typeMap, cstring::empty, type, type->annotations, vec, policy);
    +
    73 if (type->is<IR::Type_Struct>()) {
    +
    74 replacementType =
    +
    75 new IR::Type_Struct(type->srcInfo, type->name, IR::Annotations::empty, *vec);
    +
    76 } else if (type->is<IR::Type_Header>()) {
    +
    77 replacementType =
    +
    78 new IR::Type_Header(type->srcInfo, type->name, IR::Annotations::empty, *vec);
    +
    79 } else {
    +
    80 BUG("Unexpected type %1%", type);
    +
    81 }
    +
    82 }
    +
    83
    +
    84 // Maps nested field names to final field names.
    +
    85 // In our example this could be:
    +
    86 // .t.s.a -> _t_s_a0;
    +
    87 // .t.s.b -> _t_s_b1;
    +
    88 // .t.y -> _t_y2;
    +
    89 // .x -> _x3;
    +
    90 std::map<cstring, cstring> fieldNameRemap;
    +
    91 // Maps internal fields names to types.
    +
    92 // .t -> T
    +
    93 // .t.s -> S
    +
    94 std::map<cstring, const IR::Type_StructLike *> structFieldMap;
    +
    95 // Holds a new flat type
    +
    96 // struct M {
    +
    97 // bit _t_s_a0;
    +
    98 // bool _t_s_b1;
    +
    99 // bit<6> _t_y2;
    +
    100 // bit<3> _x3;
    +
    101 // }
    +
    102 const IR::Type *replacementType;
    +
    103 virtual void dbprint(std::ostream &out) const { out << replacementType; }
    +
    104
    +
    105 // Helper for constructor
    +
    106 void flatten(const P4::TypeMap *typeMap, cstring prefix, const IR::Type *type,
    +
    107 const IR::Annotations *annotations, IR::IndexedVector<IR::StructField> *fields,
    + +
    109 // Drop name annotations
    +
    110 annotations = annotations->where(
    +
    111 [](const IR::Annotation *a) { return a->name != IR::Annotation::nameAnnotation; });
    +
    112 if (auto st = type->to<T>()) {
    +
    113 auto sannotations = st->annotations->where([policy](const IR::Annotation *annot) {
    +
    114 if (!policy) return false;
    +
    115 return policy->keep(annot);
    +
    116 });
    +
    117 structFieldMap.emplace(prefix, st);
    +
    118 for (auto f : st->fields) {
    +
    119 auto na = new IR::Annotations();
    +
    120 na->append(sannotations);
    +
    121 na->append(annotations);
    +
    122 na->append(f->annotations);
    +
    123 auto ft = typeMap->getType(f, true);
    +
    124 flatten(typeMap, prefix + "." + f->name, ft, na, fields, policy);
    +
    125 }
    +
    126 return;
    +
    127 }
    +
    128 cstring fieldName = prefix.replace('.', '_') + std::to_string(fieldNameRemap.size());
    +
    129 fieldNameRemap.emplace(prefix, fieldName);
    +
    130 fields->push_back(new IR::StructField(IR::ID(fieldName), annotations, type->getP4Type()));
    +
    131 LOG3("Flatten: " << type << " | " << prefix);
    +
    132 }
    +
    133
    +
    +
    138 const IR::StructExpression *explode(const IR::Expression *root, cstring prefix) {
    + +
    140 auto fieldType = ::P4::get(structFieldMap, prefix);
    +
    141 BUG_CHECK(fieldType, "No field for %1%", prefix);
    +
    142 for (auto f : fieldType->fields) {
    +
    143 cstring fieldName = prefix + "." + f->name.name;
    +
    144 auto newFieldname = ::P4::get(fieldNameRemap, fieldName);
    +
    145 const IR::Expression *expr;
    +
    146 if (!newFieldname.isNullOrEmpty()) {
    +
    147 expr = new IR::Member(root, newFieldname);
    +
    148 } else {
    +
    149 expr = explode(root, fieldName);
    +
    150 }
    +
    151 vec->push_back(new IR::NamedExpression(f->name, expr));
    +
    152 }
    +
    153 auto type = fieldType->getP4Type()->template to<IR::Type_Name>();
    +
    154 return new IR::StructExpression(root->srcInfo, type, type, *vec);
    +
    155 }
    -
    155};
    +
    156};
    -
    156
    -
    - -
    162 P4::ReferenceMap *refMap;
    +
    157
    +
    +
    163 P4::TypeMap *typeMap;
    164
    166
    - -
    168 : refMap(refMap), typeMap(typeMap) {
    -
    169 CHECK_NULL(refMap);
    -
    170 CHECK_NULL(typeMap);
    +
    167 explicit NestedStructMap(P4::TypeMap *typeMap) : typeMap(typeMap) { CHECK_NULL(typeMap); }
    +
    168 void createReplacement(const IR::Type_Struct *type);
    +
    169 StructTypeReplacement<IR::Type_Struct> *getReplacement(const IR::Type *type) const {
    +
    170 return ::P4::get(replacement, type);
    171 }
    -
    172 void createReplacement(const IR::Type_Struct *type);
    -
    173 StructTypeReplacement<IR::Type_Struct> *getReplacement(const IR::Type *type) const {
    -
    174 return ::P4::get(replacement, type);
    -
    175 }
    -
    176 bool empty() const { return replacement.empty(); }
    -
    177};
    +
    172 bool empty() const { return replacement.empty(); }
    +
    173};
    -
    178
    -
    - -
    184 NestedStructMap *map;
    -
    185
    -
    186 public:
    -
    187 explicit FindTypesToReplace(NestedStructMap *map) : map(map) {
    -
    188 setName("FindTypesToReplace");
    -
    189 CHECK_NULL(map);
    -
    190 }
    -
    191 bool preorder(const IR::Declaration_Instance *inst) override;
    -
    192};
    +
    174
    +
    + +
    180 NestedStructMap *map;
    +
    181
    +
    182 public:
    +
    183 explicit FindTypesToReplace(NestedStructMap *map) : map(map) {
    +
    184 setName("FindTypesToReplace");
    +
    185 CHECK_NULL(map);
    +
    186 }
    +
    187 bool preorder(const IR::Declaration_Instance *inst) override;
    +
    188};
    -
    193
    -
    - -
    237 NestedStructMap *replacementMap;
    -
    238 std::map<const IR::Parameter *, StructTypeReplacement<IR::Type_Struct> *> toReplace;
    -
    239
    -
    240 public:
    -
    241 explicit ReplaceStructs(NestedStructMap *sm) : replacementMap(sm) {
    -
    242 CHECK_NULL(sm);
    -
    243 setName("ReplaceStructs");
    -
    244 }
    -
    245
    -
    246 const IR::Node *preorder(IR::P4Program *program) override;
    -
    247 const IR::Node *postorder(IR::Member *expression) override;
    -
    248 const IR::Node *preorder(IR::P4Parser *parser) override;
    -
    249 const IR::Node *preorder(IR::P4Control *control) override;
    -
    250 const IR::Node *postorder(IR::Type_Struct *type) override;
    -
    251};
    +
    189
    +
    + +
    233 NestedStructMap *replacementMap;
    +
    234 std::map<const IR::Parameter *, StructTypeReplacement<IR::Type_Struct> *> toReplace;
    +
    235
    +
    236 public:
    +
    237 explicit ReplaceStructs(NestedStructMap *sm) : replacementMap(sm) {
    +
    238 CHECK_NULL(sm);
    +
    239 setName("ReplaceStructs");
    +
    240 }
    +
    241
    +
    242 const IR::Node *preorder(IR::P4Program *program) override;
    +
    243 const IR::Node *postorder(IR::Member *expression) override;
    +
    244 const IR::Node *preorder(IR::P4Parser *parser) override;
    +
    245 const IR::Node *preorder(IR::P4Control *control) override;
    +
    246 const IR::Node *postorder(IR::Type_Struct *type) override;
    +
    247};
    -
    252
    -
    - - -
    255
    -
    256 public:
    -
    257 FlattenInterfaceStructs(ReferenceMap *refMap, TypeMap *typeMap) : sm(refMap, typeMap) {
    -
    258 passes.push_back(new TypeChecking(refMap, typeMap));
    -
    259 passes.push_back(new FindTypesToReplace(&sm));
    -
    260 passes.push_back(new ReplaceStructs(&sm));
    -
    261 passes.push_back(new ClearTypeMap(typeMap));
    -
    262 setName("FlattenInterfaceStructs");
    -
    263 }
    -
    264};
    +
    248
    +
    + + +
    251
    +
    252 public:
    +
    253 explicit FlattenInterfaceStructs(TypeMap *typeMap) : sm(typeMap) {
    +
    254 passes.push_back(new TypeChecking(nullptr, typeMap));
    +
    255 passes.push_back(new FindTypesToReplace(&sm));
    +
    256 passes.push_back(new ReplaceStructs(&sm));
    +
    257 passes.push_back(new ClearTypeMap(typeMap));
    +
    258 setName("FlattenInterfaceStructs");
    +
    259 }
    +
    260};
    -
    265
    -
    266} // namespace P4
    -
    267
    -
    268#endif /* MIDEND_FLATTENINTERFACESTRUCTS_H_ */
    -
    Definition flattenInterfaceStructs.h:30
    -
    virtual bool keep(const IR::Annotation *)
    Definition flattenInterfaceStructs.h:42
    +
    261
    +
    262} // namespace P4
    +
    263
    +
    264#endif /* MIDEND_FLATTENINTERFACESTRUCTS_H_ */
    +
    Definition flattenInterfaceStructs.h:31
    +
    virtual bool keep(const IR::Annotation *)
    Definition flattenInterfaceStructs.h:43
    Definition typeChecker.h:32
    -
    Definition flattenInterfaceStructs.h:183
    -
    Definition flattenInterfaceStructs.h:253
    +
    Definition flattenInterfaceStructs.h:179
    +
    Definition flattenInterfaceStructs.h:249
    Definition stringify.h:33
    Definition node.h:52
    Definition node.h:95
    Definition visitor.h:400
    Definition visitor.h:788
    Definition pass_manager.h:40
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    -
    Definition flattenInterfaceStructs.h:236
    +
    Definition flattenInterfaceStructs.h:232
    +
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    Definition visitor.h:424
    Definition typeChecker.h:55
    Definition typeMap.h:41
    @@ -339,9 +335,9 @@
    Definition ordered_map.h:32
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    Definition id.h:28
    -
    Definition flattenInterfaceStructs.h:161
    -
    Definition flattenInterfaceStructs.h:67
    -
    const IR::StructExpression * explode(const IR::Expression *root, cstring prefix)
    Definition flattenInterfaceStructs.h:137
    +
    Definition flattenInterfaceStructs.h:162
    +
    Definition flattenInterfaceStructs.h:68
    +
    const IR::StructExpression * explode(const IR::Expression *root, cstring prefix)
    Definition flattenInterfaceStructs.h:138
    diff --git a/flatten_log_msg_8h_source.html b/flatten_log_msg_8h_source.html index 705f7fcf53b..b346885b648 100644 --- a/flatten_log_msg_8h_source.html +++ b/flatten_log_msg_8h_source.html @@ -195,10 +195,10 @@
    83class FlattenLogMsg final : public PassManager {
    84 public:
    -
    85 FlattenLogMsg(P4::ReferenceMap *refMap, P4::TypeMap *typeMap) {
    +
    85 explicit FlattenLogMsg(P4::TypeMap *typeMap) {
    86 auto findTypesInLogMsgInvocationToReplace =
    -
    88 passes.push_back(new TypeChecking(refMap, typeMap));
    +
    88 passes.push_back(new TypeChecking(nullptr, typeMap));
    89 passes.push_back(findTypesInLogMsgInvocationToReplace);
    90 passes.push_back(new ReplaceLogMsg(typeMap, findTypesInLogMsgInvocationToReplace));
    91 passes.push_back(new ClearTypeMap(typeMap));
    @@ -218,7 +218,6 @@
    Definition visitor.h:400
    Definition visitor.h:788
    Definition pass_manager.h:40
    -
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    Definition flattenLogMsg.h:64
    Definition visitor.h:424
    Definition typeChecker.h:55
    diff --git a/flatten_unions_8h_source.html b/flatten_unions_8h_source.html index 30145e50d69..1bff997d304 100644 --- a/flatten_unions_8h_source.html +++ b/flatten_unions_8h_source.html @@ -271,7 +271,7 @@
    Class used to encode maps from paths to declarations.
    Definition referenceMap.h:66
    bool isUsed(const IR::IDeclaration *decl) const
    Definition referenceMap.h:118
    Iterates RemoveUnusedDeclarations until convergence.
    Definition unusedDeclarations.h:146
    -
    Definition parserControlFlow.h:115
    +
    Definition parserControlFlow.h:114
    Definition flattenUnions.h:167
    Definition unusedDeclarations.h:28
    Definition resolveReferences.h:121
    diff --git a/frontends_2p4-14_2fromv1_80_2program_structure_8h_source.html b/frontends_2p4-14_2fromv1_80_2program_structure_8h_source.html index 0d983c1056d..7a29b7b105c 100644 --- a/frontends_2p4-14_2fromv1_80_2program_structure_8h_source.html +++ b/frontends_2p4-14_2fromv1_80_2program_structure_8h_source.html @@ -422,16 +422,16 @@
    Information about the structure of a P4-14 program, used to convert it to a P4-16 program.
    Definition frontends/p4-14/fromv1.0/programStructure.h:45
    std::map< const IR::MethodCallExpression *, const IR::Type_Header * > extractsSynthesized
    Definition frontends/p4-14/fromv1.0/programStructure.h:181
    cstring fieldListsEnum
    Name of the serializable enum that holds one id for each field list.
    Definition frontends/p4-14/fromv1.0/programStructure.h:185
    -
    virtual const IR::Vector< IR::Expression > * listIndexes(cstring type, cstring field) const
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:155
    +
    virtual const IR::Vector< IR::Expression > * listIndexes(cstring type, cstring field) const
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:154
    std::map< cstring, const IR::Meter * > directMeters
    Maps table name to direct meter.
    Definition frontends/p4-14/fromv1.0/programStructure.h:161
    -
    virtual const IR::ParserState * convertParser(const IR::V1Parser *, IR::IndexedVector< IR::Declaration > *)
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:509
    +
    virtual const IR::ParserState * convertParser(const IR::V1Parser *, IR::IndexedVector< IR::Declaration > *)
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:508
    std::vector< const IR::Declaration * > localInstances
    extra local instances to control created by primitive translation
    Definition frontends/p4-14/fromv1.0/programStructure.h:202
    -
    static const IR::Annotations * addGlobalNameAnnotation(cstring name, const IR::Annotations *annos=nullptr)
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:91
    +
    static const IR::Annotations * addGlobalNameAnnotation(cstring name, const IR::Annotations *annos=nullptr)
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:90
    const IR::Expression * latest
    Represents 'latest' P4-14 construct.
    Definition frontends/p4-14/fromv1.0/programStructure.h:322
    std::map< cstring, const IR::Type * > finalHeaderType
    Definition frontends/p4-14/fromv1.0/programStructure.h:173
    -
    virtual void createControls()
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:2330
    -
    const IR::Expression * listIndex(const IR::Expression *fl) const
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:166
    -
    void populateOutputNames()
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:2640
    +
    virtual void createControls()
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:2329
    +
    const IR::Expression * listIndex(const IR::Expression *fl) const
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:165
    +
    void populateOutputNames()
    Definition frontends/p4-14/fromv1.0/programStructure.cpp:2639
    std::map< cstring, cstring > registerLayoutType
    Definition frontends/p4-14/fromv1.0/programStructure.h:176
    ordered_set< const IR::FieldList * > allFieldLists
    Field lists that appear in the program.
    Definition frontends/p4-14/fromv1.0/programStructure.h:165
    Definition frontends/p4-14/fromv1.0/v1model.h:262
    diff --git a/functions_e.html b/functions_e.html index 94e38b56977..9158cc130e1 100644 --- a/functions_e.html +++ b/functions_e.html @@ -192,7 +192,7 @@

    - e -

    diff --git a/functions_func_i.html b/functions_func_i.html index 3465f54e3b4..64c1a2fe552 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -160,7 +160,7 @@

    - i -

    • isLibraryMethod() : P4::EBPF::EBPFProgram, P4::UBPF::UBPFProgram
    • isLoAligned() : P4::ClosedRange< Unit, Order >, P4::HalfOpenRange< Unit, Order >
    • isLPMTable() : P4::EBPF::EBPFTable
    • -
    • isNestedStruct() : P4::ComplexValues
    • +
    • isNestedStruct() : P4::ComplexValues
    • isNot() : P4::P4Tools::P4Testgen::Bmv2::Token
    • isOne() : P4::DoStrengthReduction
    • isOneOf() : P4::P4Tools::P4Testgen::Bmv2::Token
    • diff --git a/functions_i.html b/functions_i.html index ffcaa0b445a..d7b6150ca69 100644 --- a/functions_i.html +++ b/functions_i.html @@ -181,7 +181,7 @@

      - i -

      • isLibraryMethod() : P4::EBPF::EBPFProgram, P4::UBPF::UBPFProgram
      • isLoAligned() : P4::ClosedRange< Unit, Order >, P4::HalfOpenRange< Unit, Order >
      • isLPMTable() : P4::EBPF::EBPFTable
      • -
      • isNestedStruct() : P4::ComplexValues
      • +
      • isNestedStruct() : P4::ComplexValues
      • isNot() : P4::P4Tools::P4Testgen::Bmv2::Token
      • isOne() : P4::DoStrengthReduction
      • isOneOf() : P4::P4Tools::P4Testgen::Bmv2::Token
      • diff --git a/has__side__effects_8h_source.html b/has__side__effects_8h_source.html index 71995fdb4a5..8e7c003dd5e 100644 --- a/has__side__effects_8h_source.html +++ b/has__side__effects_8h_source.html @@ -142,7 +142,7 @@
        17#ifndef MIDEND_HAS_SIDE_EFFECTS_H_
        18#define MIDEND_HAS_SIDE_EFFECTS_H_
        19
        -
        20#include "frontends/common/resolveReferences/referenceMap.h"
        +
        20#include "frontends/common/resolveReferences/resolveReferences.h"
        21#include "frontends/p4/methodInstance.h"
        22#include "ir/ir.h"
        23
        @@ -151,68 +151,64 @@
        26/* Should this be a method on IR::Expression? Maybe after the refMap/typeMap go away */
        27
        -
        28class hasSideEffects : public Inspector {
        -
        29 P4::ReferenceMap *refMap = nullptr;
        -
        30 P4::TypeMap *typeMap = nullptr;
        -
        31
        -
        32 bool result = false;
        -
        33 bool preorder(const IR::AssignmentStatement *) override {
        -
        34 result = true;
        -
        35 return false;
        -
        36 }
        -
        37 bool preorder(const IR::MethodCallExpression *mc) override {
        -
        38 if (result) {
        -
        39 return false;
        -
        40 }
        -
        41 /* assume has side effects if we can't look it up */
        -
        42 if (refMap && typeMap) {
        -
        43 auto *mi = P4::MethodInstance::resolve(mc, refMap, typeMap, true);
        -
        44 if (auto *bm = mi->to<P4::BuiltInMethod>()) {
        -
        45 if (bm->name == "isValid") {
        -
        46 return true;
        -
        47 }
        -
        48 }
        -
        49 if (auto *em = mi->to<P4::ExternMethod>()) {
        -
        50 if (em->method->getAnnotation(IR::Annotation::noSideEffectsAnnotation)) return true;
        -
        51 }
        -
        52 }
        -
        53 result = true;
        -
        54 return false;
        -
        55 }
        -
        56
        -
        57 bool preorder(const IR::Primitive *) override {
        -
        58 result = true;
        -
        59 return false;
        -
        60 }
        -
        61 bool preorder(const IR::Expression *) override { return !result; }
        -
        62
        -
        63 public:
        -
        64 explicit hasSideEffects(const IR::Expression *e) { e->apply(*this); }
        -
        65 hasSideEffects(P4::ReferenceMap *rm, P4::TypeMap *tm) : refMap(rm), typeMap(tm) {}
        -
        66 hasSideEffects(P4::ReferenceMap *rm, P4::TypeMap *tm, const IR::Expression *e)
        -
        67 : refMap(rm), typeMap(tm) {
        -
        68 e->apply(*this);
        + +
        29 P4::TypeMap *typeMap = nullptr;
        +
        30
        +
        31 bool result = false;
        +
        32 bool preorder(const IR::AssignmentStatement *) override {
        +
        33 result = true;
        +
        34 return false;
        +
        35 }
        +
        36 bool preorder(const IR::MethodCallExpression *mc) override {
        +
        37 if (result) return false;
        +
        38
        +
        39 /* assume has side effects if we can't look it up */
        +
        40 if (typeMap) {
        +
        41 auto *mi = P4::MethodInstance::resolve(mc, this, typeMap, true);
        +
        42 if (auto *bm = mi->to<P4::BuiltInMethod>()) {
        +
        43 if (bm->name == "isValid") return true;
        +
        44 }
        +
        45 if (auto *em = mi->to<P4::ExternMethod>()) {
        +
        46 if (em->method->getAnnotation(IR::Annotation::noSideEffectsAnnotation)) return true;
        +
        47 }
        +
        48 }
        +
        49 result = true;
        +
        50 return false;
        +
        51 }
        +
        52
        +
        53 bool preorder(const IR::Primitive *) override {
        +
        54 result = true;
        +
        55 return false;
        +
        56 }
        +
        57 bool preorder(const IR::Expression *) override { return !result; }
        +
        58
        +
        59 public:
        +
        60 explicit hasSideEffects(const IR::Expression *e) { e->apply(*this); }
        +
        61 hasSideEffects(P4::TypeMap *tm, const IR::Expression *e, const Visitor::Context *ctxt)
        +
        62 : typeMap(tm) {
        +
        63 e->apply(*this, ctxt);
        +
        64 }
        +
        65 bool operator()(const IR::Expression *e) {
        +
        66 result = false;
        +
        67 e->apply(*this);
        +
        68 return result;
        69 }
        -
        70 bool operator()(const IR::Expression *e) {
        -
        71 result = false;
        -
        72 e->apply(*this);
        -
        73 return result;
        -
        74 }
        -
        75 explicit operator bool() { return result; }
        -
        76};
        +
        70 explicit operator bool() { return result; }
        +
        71};
        -
        77
        -
        78} // namespace P4
        -
        79
        -
        80#endif /* MIDEND_HAS_SIDE_EFFECTS_H_ */
        +
        72
        +
        73} // namespace P4
        +
        74
        +
        75#endif /* MIDEND_HAS_SIDE_EFFECTS_H_ */
        Definition methodInstance.h:260
        Definition methodInstance.h:168
        Definition visitor.h:400
        static MethodInstance * resolve(const IR::MethodCallExpression *mce, const DeclarationLookup *refMap, TypeMap *typeMap, bool useExpressionType=false, const Visitor::Context *ctxt=nullptr, bool incomplete=false)
        Definition methodInstance.cpp:27
        -
        Class used to encode maps from paths to declarations.
        Definition referenceMap.h:66
        +
        Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
        Definition resolveReferences.h:33
        Definition typeMap.h:41
        Definition has_side_effects.h:28
        TODO: this is not really specific to BMV2, it should reside somewhere else.
        Definition applyOptionsPragmas.cpp:24
        +
        Definition visitor.h:47
    diff --git a/hierarchy.html b/hierarchy.html index 6e45850bcfa..e592bc192d3 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -319,55 +319,63 @@

     CP4::detail::DbprintDispatchPtr< T >
     CP4::detail::DbprintDispatchRef< T >
     CP4::DiagnosticCountInfo
    createReplacement(const IR::Type_Struct *type) (defined in P4::NestedStructMap)P4::NestedStructMap
    empty() const (defined in P4::NestedStructMap)P4::NestedStructMapinline
    getReplacement(const IR::Type *type) const (defined in P4::NestedStructMap)P4::NestedStructMapinline
    NestedStructMap(P4::ReferenceMap *refMap, P4::TypeMap *typeMap) (defined in P4::NestedStructMap)P4::NestedStructMapinline
    refMap (defined in P4::NestedStructMap)P4::NestedStructMap
    replacement (defined in P4::NestedStructMap)P4::NestedStructMap
    typeMap (defined in P4::NestedStructMap)P4::NestedStructMap
    NestedStructMap(P4::TypeMap *typeMap) (defined in P4::NestedStructMap)P4::NestedStructMapinlineexplicit
    replacement (defined in P4::NestedStructMap)P4::NestedStructMap
    typeMap (defined in P4::NestedStructMap)P4::NestedStructMap
    diff --git a/struct_p4_1_1_nested_struct_map.html b/struct_p4_1_1_nested_struct_map.html index cfdce933afc..b4f4450c279 100644 --- a/struct_p4_1_1_nested_struct_map.html +++ b/struct_p4_1_1_nested_struct_map.html @@ -132,9 +132,9 @@ - - + + @@ -147,9 +147,6 @@

    Public Member Functions

    NestedStructMap (P4::ReferenceMap *refMap, P4::TypeMap *typeMap)
     
    NestedStructMap (P4::TypeMap *typeMap)
     
    void createReplacement (const IR::Type_Struct *type)
     
    - - diff --git a/substitute_parameters_8h_source.html b/substitute_parameters_8h_source.html index 14370199d07..4b32546af8e 100644 --- a/substitute_parameters_8h_source.html +++ b/substitute_parameters_8h_source.html @@ -144,44 +144,43 @@
    19#ifndef EVALUATOR_SUBSTITUTEPARAMETERS_H_
    20#define EVALUATOR_SUBSTITUTEPARAMETERS_H_
    21
    -
    22#include "frontends/common/resolveReferences/referenceMap.h"
    -
    23#include "frontends/common/resolveReferences/resolveReferences.h"
    -
    24#include "frontends/p4/parameterSubstitution.h"
    -
    25#include "frontends/p4/typeChecking/typeSubstitutionVisitor.h"
    -
    26#include "ir/ir.h"
    -
    27
    -
    28namespace P4 {
    -
    29
    -
    -
    30class SubstituteParameters : public TypeVariableSubstitutionVisitor, public ResolutionContext {
    -
    31 protected:
    -
    32 const DeclarationLookup *refMap; // input
    -
    33 const ParameterSubstitution *subst; // input
    -
    34 public:
    -
    35 SubstituteParameters(const DeclarationLookup *refMap, const ParameterSubstitution *subst,
    -
    36 const TypeVariableSubstitution *tvs)
    -
    37 : TypeVariableSubstitutionVisitor(tvs), refMap(refMap), subst(subst) {
    -
    38 CHECK_NULL(subst);
    -
    39 CHECK_NULL(tvs);
    -
    40 visitDagOnce = true;
    -
    41 setName("SubstituteParameters");
    -
    42 LOG1("Will substitute " << std::endl << subst << bindings);
    -
    43 }
    -
    44 using TypeVariableSubstitutionVisitor::postorder;
    -
    45 const IR::Node *postorder(IR::PathExpression *expr) override;
    -
    46 const IR::Node *postorder(IR::Type_Name *type) override;
    -
    47 const IR::Node *postorder(IR::This *t) override;
    -
    48};
    +
    22#include "frontends/common/resolveReferences/resolveReferences.h"
    +
    23#include "frontends/p4/parameterSubstitution.h"
    +
    24#include "frontends/p4/typeChecking/typeSubstitutionVisitor.h"
    +
    25#include "ir/ir.h"
    +
    26
    +
    27namespace P4 {
    +
    28
    +
    + +
    30 protected:
    +
    31 const DeclarationLookup *refMap; // input
    +
    32 const ParameterSubstitution *subst; // input
    +
    33 public:
    + +
    35 const TypeVariableSubstitution *tvs)
    +
    36 : TypeVariableSubstitutionVisitor(tvs), refMap(refMap), subst(subst) {
    +
    37 CHECK_NULL(subst);
    +
    38 CHECK_NULL(tvs);
    +
    39 visitDagOnce = true;
    +
    40 setName("SubstituteParameters");
    +
    41 LOG1("Will substitute " << std::endl << subst << bindings);
    +
    42 }
    +
    43 using TypeVariableSubstitutionVisitor::postorder;
    +
    44 const IR::Node *postorder(IR::PathExpression *expr) override;
    +
    45 const IR::Node *postorder(IR::Type_Name *type) override;
    +
    46 const IR::Node *postorder(IR::This *t) override;
    +
    47};
    -
    49
    -
    50} // namespace P4
    -
    51
    -
    52#endif /* EVALUATOR_SUBSTITUTEPARAMETERS_H_ */
    +
    48
    +
    49} // namespace P4
    +
    50
    +
    51#endif /* EVALUATOR_SUBSTITUTEPARAMETERS_H_ */
    Definition referenceMap.h:57
    Definition node.h:95
    Definition parameterSubstitution.h:30
    Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
    Definition resolveReferences.h:33
    -
    Definition substituteParameters.h:30
    +
    Definition substituteParameters.h:29
    Definition typeSubstitution.h:73
    Definition typeSubstitutionVisitor.h:45
    TODO: this is not really specific to BMV2, it should reside somewhere else.
    Definition applyOptionsPragmas.cpp:24
    diff --git a/tdi_conf_8h_source.html b/tdi_conf_8h_source.html index 8dc205bc833..33dc09b1745 100644 --- a/tdi_conf_8h_source.html +++ b/tdi_conf_8h_source.html @@ -165,7 +165,7 @@
    Definition backends/dpdk/options.h:24
    Definition tdiConf.h:24
    static void generate(const IR::P4Program *prog, DPDK::DpdkOptions &options)
    Generate the TDI configuration file required by the tdi-pipeline-builder.
    Definition tdiConf.cpp:70
    -
    Definition dpdk/backend.cpp:36
    +
    Definition dpdk/backend.cpp:37

    Public Attributes

    -P4::ReferenceMaprefMap
     
    ordered_map< const IR::Type *, StructTypeReplacement< IR::Type_Struct > * > replacement