17#ifndef BACKENDS_TC_PNAPROGRAMSTRUCTURE_H_
18#define BACKENDS_TC_PNAPROGRAMSTRUCTURE_H_
20#include "backends/bmv2/common/backend.h"
21#include "backends/bmv2/common/programStructure.h"
23#include "lib/cstring.h"
36 unsigned scalars_width = 0;
37 unsigned error_width = 32;
38 unsigned bool_width = 1;
59 std::vector<const IR::ExternBlock *> globals;
63 : refMap(refMap), typeMap(typeMap) {
68 std::set<cstring> non_pipeline_controls;
69 std::set<cstring> pipeline_controls;
71 bool hasVisited(
const IR::Type_StructLike *st) {
72 if (
auto h = st->to<IR::Type_Header>())
73 return header_types.count(h->getName());
74 else if (
auto s = st->to<IR::Type_Struct>())
75 return metadata_types.count(s->getName());
76 else if (
auto u = st->to<IR::Type_HeaderUnion>())
77 return header_union_types.count(u->getName());
92 return (!strcmp(ptName,
"pna_main_parser_input_metadata_t") ||
93 !strcmp(ptName,
"pna_main_input_metadata_t") ||
94 !strcmp(ptName,
"pna_main_output_metadata_t"));
103 CHECK_NULL(structure);
106 void modelError(
const char *format,
const IR::INode *node) {
107 ::error(ErrorType::ERR_MODEL,
108 (
cstring(format) +
"\nAre you using an up-to-date 'pna.p4'?").c_str(),
112 bool preorder(
const IR::ToplevelBlock *block)
override;
113 bool preorder(
const IR::PackageBlock *block)
override;
114 bool preorder(
const IR::ExternBlock *block)
override;
116 profile_t init_apply(
const IR::Node *root)
override {
117 structure->block_type.clear();
118 structure->globals.clear();
119 return Inspector::init_apply(root);
130 : refMap(refMap), typeMap(typeMap), pinfo(pinfo) {
134 setName(
"InspectPnaProgram");
137 void postorder(
const IR::P4Parser *p)
override;
138 void postorder(
const IR::P4Control *c)
override;
139 void postorder(
const IR::Declaration_Instance *di)
override;
141 bool isHeaders(
const IR::Type_StructLike *st);
142 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
143 void addHeaderType(
const IR::Type_StructLike *st);
144 void addHeaderInstance(
const IR::Type_StructLike *st,
cstring name);
145 bool preorder(
const IR::Declaration_Variable *dv)
override;
146 bool preorder(
const IR::Parameter *parameter)
override;
Definition programStructure.h:40
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition pnaProgramStructure.h:123
Definition pnaProgramStructure.h:98
bool preorder(const IR::ToplevelBlock *block) override
Definition pnaProgramStructure.cpp:219
Definition pnaProgramStructure.h:27
static bool isStandardMetadata(cstring ptName)
Definition pnaProgramStructure.h:91
static bool isCounterMetadata(cstring ptName)
Definition pnaProgramStructure.h:85
Definition ordered_map.h:30
This file defines functions for the pass to generate the introspection file.
Definition backend.cpp:24