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());
90 return (!strcmp(ptName,
"psa_ingress_parser_input_metadata_t") ||
91 !strcmp(ptName,
"psa_egress_parser_input_metadata_t") ||
92 !strcmp(ptName,
"psa_ingress_input_metadata_t") ||
93 !strcmp(ptName,
"psa_ingress_output_metadata_t") ||
94 !strcmp(ptName,
"psa_egress_input_metadata_t") ||
95 !strcmp(ptName,
"psa_egress_deparser_input_metadata_t") ||
96 !strcmp(ptName,
"psa_egress_output_metadata_t"));
105 CHECK_NULL(structure);
108 void modelError(
const char *format,
const IR::INode *node) {
109 ::error(ErrorType::ERR_MODEL,
110 (
cstring(format) +
"\nAre you using an up-to-date 'psa.p4'?").c_str(),
114 bool preorder(
const IR::ToplevelBlock *block)
override;
115 bool preorder(
const IR::PackageBlock *block)
override;
116 bool preorder(
const IR::ExternBlock *block)
override;
120 structure->globals.clear();
121 return Inspector::init_apply(root);
132 : refMap(refMap), typeMap(typeMap), pinfo(pinfo) {
136 setName(
"InspectPsaProgram");
139 void postorder(
const IR::P4Parser *p)
override;
140 void postorder(
const IR::P4Control *c)
override;
141 void postorder(
const IR::Declaration_Instance *di)
override;
143 bool isHeaders(
const IR::Type_StructLike *st);
144 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
145 void addHeaderType(
const IR::Type_StructLike *st);
146 void addHeaderInstance(
const IR::Type_StructLike *st,
cstring name);
147 bool preorder(
const IR::Declaration_Variable *dv)
override;
148 bool preorder(
const IR::Parameter *parameter)
override;
Definition bmv2/psa_switch/psaProgramStructure.h:125
Definition bmv2/psa_switch/psaProgramStructure.h:100
Definition backends/bmv2/common/programStructure.h:40
Definition bmv2/psa_switch/psaProgramStructure.h:29
ordered_map< const IR::Node *, std::pair< gress_t, block_t > > block_type
Architecture related information.
Definition bmv2/psa_switch/psaProgramStructure.h:43
static bool isStandardMetadata(cstring ptName)
Definition bmv2/psa_switch/psaProgramStructure.h:89
ordered_map< cstring, const IR::Declaration_Variable * > scalars
Definition bmv2/psa_switch/psaProgramStructure.h:37
static bool isCounterMetadata(cstring ptName)
Definition bmv2/psa_switch/psaProgramStructure.h:85
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition ordered_map.h:30
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition action.cpp:21