39 ParserCallGraph &parserCallGraph;
40 std::set<cstring> &cumulativeTypes;
41 std::unordered_map<cstring, size_t> stateEncounters;
43 cstring getPacketType(
const IR::ParserState *state)
const;
44 void dfsCumulativeTypes(
const IR::ParserState *state,
const ParserCallGraph &pcg,
46 std::unordered_map<const IR::ParserState *, cstring> &types,
47 std::unordered_set<const IR::ParserState *> ¤tPath);
50 ParserAnalyzer(ParserCallGraph &graph, std::set<cstring> &types)
51 : parserCallGraph(graph), cumulativeTypes(types) {
52 setName(
"ParserAnalyzer");
55 bool preorder(
const IR::P4Parser *parser)
override;
62 ParserCallGraph parserCallGraph;
63 std::set<cstring> cumulativeTypes;
64 bool insideParserState;
67 void updateMetrics(
const cstring &headerName,
size_t size,
bool isModification);
68 size_t getHeaderFieldSize(
const IR::Type *type)
const;
69 size_t getHeaderSize(
const IR::Type_Header *header)
const;
73 : typeMap(typeMap), metrics(metrics), parserCallGraph(
"parserCallGraph") {
74 setName(
"HeaderPacketMetricsPass");
77 bool preorder(
const IR::P4Program *program)
override;
78 void postorder(
const IR::P4Program * )
override;
79 bool preorder(
const IR::AssignmentStatement *assign)
override;
80 bool preorder(
const IR::MethodCallStatement *mcs)
override;
81 bool preorder(
const IR::ParserState * )
override;
82 void postorder(
const IR::ParserState * )
override;
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24