43 const IR::DpdkAsmProgram *dpdk_program;
48 : typemap(typemap), refmap(refmap), structure(structure), options(options) {}
50 const IR::DpdkAsmProgram *
create(IR::P4Program *prog);
51 IR::IndexedVector<IR::DpdkAsmStatement> create_pna_preamble();
52 IR::IndexedVector<IR::DpdkAsmStatement> create_psa_preamble();
53 IR::IndexedVector<IR::DpdkAsmStatement> create_pna_postamble();
54 IR::IndexedVector<IR::DpdkAsmStatement> create_psa_postamble();
55 const IR::Node *preorder(IR::P4Program *p)
override;
56 const IR::DpdkAsmProgram *getDpdkProgram() {
return dpdk_program; }
57 IR::IndexedVector<IR::DpdkStructType> UpdateHeaderMetadata(IR::P4Program *prog,
58 IR::Type_Struct *metadata);
62 IR::IndexedVector<IR::DpdkAsmStatement> instructions;
66 IR::Type_Struct *metadataStruct;
71 : refmap(refmap), typemap(typemap), structure(structure), metadataStruct(metadataStruct) {}
72 IR::IndexedVector<IR::DpdkAsmStatement> getInstructions() {
return instructions; }
74 bool preorder(
const IR::P4Parser *a)
override;
75 bool preorder(
const IR::ParserState *s)
override;
76 void add_instr(
const IR::DpdkAsmStatement *s) { instructions.push_back(s); }
78 IR::Declaration_Variable *addNewTmpVarToMetadata(
cstring name,
const IR::Type *type);
79 void handleTupleExpression(
const IR::ListExpression *cl,
const IR::ListExpression *input,
81 void getCondVars(
const IR::Expression *sv,
const IR::Expression *ce, IR::Expression **leftExpr,
82 IR::Expression **rightExpr);
89 IR::Type_Struct *metadataStruct;
90 IR::IndexedVector<IR::DpdkAsmStatement> instructions;
91 IR::IndexedVector<IR::DpdkTable> tables;
92 IR::IndexedVector<IR::DpdkSelector> selectors;
93 IR::IndexedVector<IR::DpdkLearner> learners;
94 IR::IndexedVector<IR::DpdkAction> actions;
95 std::set<cstring> unique_actions;
101 bool deparser =
false)
104 structure(structure),
105 metadataStruct(metadataStruct),
106 deparser(deparser) {}
108 IR::IndexedVector<IR::DpdkTable> &getTables() {
return tables; }
109 IR::IndexedVector<IR::DpdkSelector> &getSelectors() {
return selectors; }
110 IR::IndexedVector<IR::DpdkLearner> &getLearners() {
return learners; }
111 IR::IndexedVector<IR::DpdkAction> &getActions() {
return actions; }
112 IR::IndexedVector<IR::DpdkAsmStatement> &getInstructions() {
return instructions; }
114 bool preorder(
const IR::P4Action *a)
override;
115 bool preorder(
const IR::P4Table *a)
override;
116 bool preorder(
const IR::P4Control *)
override;
117 bool checkTableValid(
const IR::P4Table *a);
119 void add_inst(
const IR::DpdkAsmStatement *s) { instructions.push_back(s); }
120 void add_table(
const IR::DpdkTable *t) { tables.push_back(t); }
121 void add_table(
const IR::DpdkSelector *s) { selectors.push_back(s); }
122 void add_table(
const IR::DpdkLearner *s) { learners.push_back(s); }
123 void add_action(
const IR::DpdkAction *a) { actions.push_back(a); }
125 std::optional<const IR::Member *> getMemExprFromProperty(
const IR::P4Table *,
cstring);
126 std::optional<int> getNumberFromProperty(
const IR::P4Table *,
cstring);