17#ifndef BACKENDS_BMV2_COMMON_PROGRAMSTRUCTURE_H_ 
   18#define BACKENDS_BMV2_COMMON_PROGRAMSTRUCTURE_H_ 
   20#include "ir/visitor.h" 
   21#include "lib/ordered_set.h" 
   28enum class BlockConverted {
 
   52    std::vector<const IR::Declaration_Variable *> 
variables;
 
 
   76        setName(
"DiscoverStructure");
 
   78    void postorder(
const IR::ParameterList *paramList) 
override;
 
   79    void postorder(
const IR::P4Action *action) 
override;
 
   80    void postorder(
const IR::Declaration_Variable *decl) 
override;
 
   81    void postorder(
const IR::Type_Error *errors) 
override;
 
   82    void postorder(
const IR::Declaration_MatchKind *kind) 
override;
 
 
   94        CHECK_NULL(resourceMap);
 
   97    bool preorder(
const IR::ControlBlock *control)
 override {
 
   98        resourceMap->emplace(control->container, control);
 
   99        for (
auto cv : control->constantValue) {
 
  100            resourceMap->emplace(cv.first, cv.second);
 
  103        for (
auto c : control->container->controlLocals) {
 
  104            if (c->is<IR::InstantiatedBlock>()) {
 
  105                resourceMap->emplace(c, control->getValue(c));
 
  111    bool preorder(
const IR::ParserBlock *parser)
 override {
 
  112        resourceMap->emplace(parser->container, parser);
 
  113        for (
auto cv : parser->constantValue) {
 
  114            resourceMap->emplace(cv.first, cv.second);
 
  115            if (cv.second->is<IR::Block>()) {
 
  116                visit(cv.second->getNode());
 
  120        for (
auto c : parser->container->parserLocals) {
 
  121            if (c->is<IR::InstantiatedBlock>()) {
 
  122                resourceMap->emplace(c, parser->getValue(c));
 
  128    bool preorder(
const IR::TableBlock *table)
 override {
 
  129        resourceMap->emplace(table->container, table);
 
  130        for (
auto cv : table->constantValue) {
 
  131            resourceMap->emplace(cv.first, cv.second);
 
  132            if (cv.second->is<IR::Block>()) {
 
  133                visit(cv.second->getNode());
 
  139    bool preorder(
const IR::PackageBlock *package)
 override {
 
  140        for (
auto cv : package->constantValue) {
 
  141            if (cv.second->is<IR::Block>()) {
 
  142                visit(cv.second->getNode());
 
  148    bool preorder(
const IR::ToplevelBlock *tlb)
 override {
 
  149        auto package = tlb->getMain();
 
 
Definition backends/bmv2/common/programStructure.h:89
 
Definition bmv2/common/metermap.h:24
 
Definition backends/bmv2/common/programStructure.h:71
 
Definition backends/bmv2/common/programStructure.h:40
 
ResourceMap resourceMap
map IR node to compile-time allocated resource blocks.
Definition backends/bmv2/common/programStructure.h:66
 
ordered_map< const IR::P4Action *, unsigned > ids
For each action its json id.
Definition backends/bmv2/common/programStructure.h:50
 
std::map< const IR::StructField *, cstring > scalarMetadataFields
Definition backends/bmv2/common/programStructure.h:58
 
std::set< cstring > match_kinds
All match kinds.
Definition backends/bmv2/common/programStructure.h:64
 
ordered_map< const IR::Parameter *, unsigned > index
Definition backends/bmv2/common/programStructure.h:46
 
ordered_map< const IR::IDeclaration *, unsigned int > errorCodesMap
All error codes.
Definition backends/bmv2/common/programStructure.h:54
 
std::vector< const IR::Declaration_Variable * > variables
All local variables.
Definition backends/bmv2/common/programStructure.h:52
 
ordered_map< const IR::P4Action *, const IR::P4Control * > actions
Map action to parent control.
Definition backends/bmv2/common/programStructure.h:43
 
ordered_set< const IR::Parameter * > nonActionParameters
Parameters of controls/parsers.
Definition backends/bmv2/common/programStructure.h:48
 
DirectMeterMap directMeterMap
All the direct meters.
Definition backends/bmv2/common/programStructure.h:60
 
ordered_map< cstring, const IR::P4Table * > directCounterMap
All the direct counters.
Definition backends/bmv2/common/programStructure.h:62
 
Definition ordered_map.h:30
 
Definition ordered_set.h:30
 
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition action.cpp:21