18#ifndef BACKENDS_COMMON_PSAPROGRAMSTRUCTURE_H_
19#define BACKENDS_COMMON_PSAPROGRAMSTRUCTURE_H_
21#include "backends/common/programStructure.h"
22#include "frontends/common/resolveReferences/referenceMap.h"
23#include "frontends/p4/typeMap.h"
25#include "lib/cstring.h"
29enum gress_t { INGRESS, EGRESS };
45 unsigned scalars_width = 0;
46 unsigned error_width = 32;
47 unsigned bool_width = 1;
68 std::vector<const IR::ExternBlock *> globals;
72 : refMap(refMap), typeMap(typeMap) {
77 std::set<cstring> non_pipeline_controls;
78 std::set<cstring> pipeline_controls;
80 bool hasVisited(
const IR::Type_StructLike *st) {
81 if (
auto h = st->to<IR::Type_Header>())
82 return header_types.count(h->getName());
83 else if (
auto s = st->to<IR::Type_Struct>())
84 return metadata_types.count(s->getName());
85 else if (
auto u = st->to<IR::Type_HeaderUnion>())
86 return header_union_types.count(u->getName());
97 return (!strcmp(ptName,
"psa_ingress_parser_input_metadata_t") ||
98 !strcmp(ptName,
"psa_egress_parser_input_metadata_t") ||
99 !strcmp(ptName,
"psa_ingress_input_metadata_t") ||
100 !strcmp(ptName,
"psa_ingress_output_metadata_t") ||
101 !strcmp(ptName,
"psa_egress_input_metadata_t") ||
102 !strcmp(ptName,
"psa_egress_deparser_input_metadata_t") ||
103 !strcmp(ptName,
"psa_egress_output_metadata_t"));
112 CHECK_NULL(structure);
115 void modelError(
const char *format,
const IR::INode *node) {
116 ::error(ErrorType::ERR_MODEL,
117 (
cstring(format) +
"\nAre you using an up-to-date 'psa.p4'?").c_str(),
121 bool preorder(
const IR::ToplevelBlock *block)
override;
122 bool preorder(
const IR::PackageBlock *block)
override;
123 bool preorder(
const IR::ExternBlock *block)
override;
127 structure->globals.clear();
128 return Inspector::init_apply(root);
139 : refMap(refMap), typeMap(typeMap), pinfo(pinfo) {
143 setName(
"InspectPsaProgram");
146 void postorder(
const IR::P4Parser *p)
override;
147 void postorder(
const IR::P4Control *c)
override;
148 void postorder(
const IR::Declaration_Instance *di)
override;
150 bool isHeaders(
const IR::Type_StructLike *st);
151 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
152 void addHeaderType(
const IR::Type_StructLike *st);
153 void addHeaderInstance(
const IR::Type_StructLike *st,
cstring name);
154 bool preorder(
const IR::Declaration_Variable *dv)
override;
155 bool preorder(
const IR::Parameter *parameter)
override;
Definition common/psaProgramStructure.h:132
Definition common/psaProgramStructure.h:107
Definition backends/common/programStructure.h:32
Definition common/psaProgramStructure.h:36
ordered_map< cstring, const IR::Declaration_Variable * > scalars
Definition common/psaProgramStructure.h:44
static bool isCounterMetadata(cstring ptName)
Definition common/psaProgramStructure.h:92
ordered_map< const IR::Node *, std::pair< gress_t, block_t > > block_type
Architecture related information.
Definition common/psaProgramStructure.h:50
static bool isStandardMetadata(cstring ptName)
Definition common/psaProgramStructure.h:96
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition ordered_map.h:30
Definition applyOptionsPragmas.cpp:24