18#ifndef BACKENDS_COMMON_PSAPROGRAMSTRUCTURE_H_
19#define BACKENDS_COMMON_PSAPROGRAMSTRUCTURE_H_
21#include "portableProgramStructure.h"
25enum gress_t { INGRESS, EGRESS };
32class PsaProgramStructure :
public PortableProgramStructure {
39 : PortableProgramStructure(refMap, typeMap) {}
48 return (!strcmp(ptName,
"psa_ingress_parser_input_metadata_t") ||
49 !strcmp(ptName,
"psa_egress_parser_input_metadata_t") ||
50 !strcmp(ptName,
"psa_ingress_input_metadata_t") ||
51 !strcmp(ptName,
"psa_ingress_output_metadata_t") ||
52 !strcmp(ptName,
"psa_egress_input_metadata_t") ||
53 !strcmp(ptName,
"psa_egress_deparser_input_metadata_t") ||
54 !strcmp(ptName,
"psa_egress_output_metadata_t"));
63 CHECK_NULL(structure);
66 void modelError(
const char *format,
const IR::INode *node) {
68 (
cstring(format) +
"\nAre you using an up-to-date 'psa.p4'?").c_str(),
72 bool preorder(
const IR::PackageBlock *block)
override;
73 bool preorder(
const IR::ExternBlock *block)
override;
76 structure->block_type.clear();
77 structure->globals.clear();
78 return Inspector::init_apply(root);
82class InspectPsaProgram :
public InspectPortableProgram {
87 : InspectPortableProgram(refMap, typeMap), pinfo(pinfo) {
89 setName(
"InspectPsaProgram");
92 void postorder(
const IR::P4Parser *p)
override;
93 void postorder(
const IR::P4Control *c)
override;
94 void postorder(
const IR::Declaration_Instance *di)
override;
96 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
97 void addHeaderType(
const IR::Type_StructLike *st);
98 void addHeaderInstance(
const IR::Type_StructLike *st,
cstring name);
99 bool preorder(
const IR::Declaration_Variable *dv)
override;
100 bool preorder(
const IR::Parameter *parameter)
override;
Definition portableProgramStructure.h:79
Definition psaProgramStructure.h:32
static bool isCounterMetadata(cstring ptName)
Definition psaProgramStructure.h:43
ordered_map< const IR::Node *, std::pair< gress_t, block_t > > block_type
Architecture related information.
Definition psaProgramStructure.h:35
static bool isStandardMetadata(cstring ptName)
Definition psaProgramStructure.h:47
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition ordered_map.h:32
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition error.h:51