18#ifndef BACKENDS_BMV2_PSA_SWITCH_PSAPROGRAMSTRUCTURE_H_
19#define BACKENDS_BMV2_PSA_SWITCH_PSAPROGRAMSTRUCTURE_H_
21#include "backends/bmv2/common/backend.h"
22#include "backends/bmv2/common/programStructure.h"
24#include "lib/cstring.h"
38 unsigned scalars_width = 0;
39 unsigned error_width = 32;
40 unsigned bool_width = 1;
61 std::vector<const IR::ExternBlock *> globals;
65 : refMap(refMap), typeMap(typeMap) {
70 std::set<cstring> non_pipeline_controls;
71 std::set<cstring> pipeline_controls;
73 bool hasVisited(
const IR::Type_StructLike *
st) {
74 if (
auto h =
st->to<IR::Type_Header>())
75 return header_types.count(
h->getName());
76 else if (
auto s =
st->to<IR::Type_Struct>())
77 return metadata_types.count(
s->getName());
78 else if (
auto u =
st->to<IR::Type_HeaderUnion>())
79 return header_union_types.count(
u->getName());
94 return (!
strcmp(
ptName,
"psa_ingress_parser_input_metadata_t") ||
99 !
strcmp(
ptName,
"psa_egress_deparser_input_metadata_t") ||
109 CHECK_NULL(structure);
112 void modelError(
const char *
format,
const IR::INode *node) {
113 ::error(ErrorType::ERR_MODEL,
114 (
cstring(
format) +
"\nAre you using an up-to-date 'psa.p4'?").c_str(),
118 bool preorder(
const IR::ToplevelBlock *block)
override;
119 bool preorder(
const IR::PackageBlock *block)
override;
120 bool preorder(
const IR::ExternBlock *block)
override;
122 profile_t init_apply(
const IR::Node *root)
override {
123 structure->block_type.clear();
124 structure->globals.clear();
125 return Inspector::init_apply(root);
136 : refMap(refMap), typeMap(typeMap), pinfo(pinfo) {
143 void postorder(
const IR::P4Parser *p)
override;
144 void postorder(
const IR::P4Control *
c)
override;
145 void postorder(
const IR::Declaration_Instance *
di)
override;
147 bool isHeaders(
const IR::Type_StructLike *
st);
148 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
149 void addHeaderType(
const IR::Type_StructLike *
st);
150 void addHeaderInstance(
const IR::Type_StructLike *
st,
cstring name);
151 bool preorder(
const IR::Declaration_Variable *
dv)
override;
152 bool preorder(
const IR::Parameter *
parameter)
override;
Definition psaProgramStructure.h:129
Definition psaProgramStructure.h:104
bool preorder(const IR::ToplevelBlock *block) override
Definition psaProgramStructure.cpp:227
Definition programStructure.h:40
Definition psaProgramStructure.h:29
static bool isStandardMetadata(cstring ptName)
Definition psaProgramStructure.h:93
static bool isCounterMetadata(cstring ptName)
Definition psaProgramStructure.h:87
Definition sharedActionSelectorCheck.h:40
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66