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