P4C
The P4 Compiler
Loading...
Searching...
No Matches
check_design_pattern.h
1
18
47#ifndef BACKENDS_TOFINO_BF_P4C_MIDEND_CHECK_DESIGN_PATTERN_H_
48#define BACKENDS_TOFINO_BF_P4C_MIDEND_CHECK_DESIGN_PATTERN_H_
49
50#include "backends/tofino/bf-p4c/bf-p4c-options.h"
51#include "frontends/common/resolveReferences/referenceMap.h"
52#include "frontends/p4/methodInstance.h"
53#include "frontends/p4/typeMap.h"
54#include "ir/ir.h"
55
56namespace BFN {
71class CheckExternValidity : public Inspector {
72 P4::ReferenceMap *refMap;
73 P4::TypeMap *typeMap;
74
75 public:
76 CheckExternValidity(P4::ReferenceMap *refMap, P4::TypeMap *typeMap)
77 : refMap(refMap), typeMap(typeMap) {}
78 bool preorder(const IR::MethodCallExpression *) override;
79};
80
85typedef std::map<const IR::P4Action *, std::vector<const P4::ExternMethod *>> ActionExterns;
89class FindDirectExterns : public Inspector {
90 P4::ReferenceMap *refMap;
91 P4::TypeMap *typeMap;
92 ActionExterns &directExterns;
93
94 public:
95 FindDirectExterns(P4::ReferenceMap *refMap, P4::TypeMap *typeMap, ActionExterns &directExterns)
96 : refMap(refMap), typeMap(typeMap), directExterns(directExterns) {}
97 bool preorder(const IR::MethodCallExpression *) override;
98 profile_t init_apply(const IR::Node *root) override;
99};
100
104class CheckDirectExternsOnTables : public Modifier {
105 P4::ReferenceMap *refMap;
106 ActionExterns &directExterns;
107
108 public:
109 CheckDirectExternsOnTables(P4::ReferenceMap *refMap, P4::TypeMap *,
110 ActionExterns &directExterns)
111 : refMap(refMap), directExterns(directExterns) {}
112 bool preorder(IR::P4Table *) override;
113};
114
123class CheckDirectResourceInvocation : public PassManager {
124 ActionExterns directExterns;
125
126 public:
127 static const std::map<cstring, cstring> externsToProperties;
128 CheckDirectResourceInvocation(P4::ReferenceMap *refMap, P4::TypeMap *typeMap) {
129 passes.push_back(new FindDirectExterns(refMap, typeMap, directExterns));
130 passes.push_back(new CheckDirectExternsOnTables(refMap, typeMap, directExterns));
131 }
132};
133
142
143class CheckTableConstEntries : public Inspector {
144 public:
145 CheckTableConstEntries() {}
146 bool preorder(const IR::P4Table *) override;
147};
148
153class CheckDesignPattern : public PassManager {
154 public:
155 CheckDesignPattern(P4::ReferenceMap *refMap, P4::TypeMap *typeMap) {
156 passes.push_back(new CheckExternValidity(refMap, typeMap));
157 if (BackendOptions().arch != "v1model")
158 passes.push_back(new CheckDirectResourceInvocation(refMap, typeMap));
159 }
160};
161
162} // namespace BFN
163
164#endif // BACKENDS_TOFINO_BF_P4C_MIDEND_CHECK_DESIGN_PATTERN_H_
Definition node.h:94
Definition visitor.h:413
Definition visitor.h:385
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition typeMap.h:41
Definition visitor.h:78
bool preorder(const IR::MethodCallExpression *) override
Definition check_design_pattern.cpp:23
Definition check_design_pattern.h:104
Definition check_design_pattern.h:123
Checks if the emit function call is valid with the TNA constraints.
Definition check_design_pattern.h:71
Definition check_design_pattern.h:89
The namespace encapsulating Barefoot/Intel-specific stuff.
Definition add_t2na_meta.cpp:21