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