
Public Member Functions | |
| ReplaceHeaders (P4::TypeMap *typeMap, FindHeaderTypesToReplace *findHeaderTypesToReplace) | |
| const IR::Node * | postorder (IR::Member *expression) override |
| const IR::Node * | postorder (IR::Type_Header *type) override |
| const IR::Node * | preorder (IR::P4Program *program) override |
This pass flattens any nested struct inside a P4 header. This pass will fail if a header with nested fields is used as a left-value.
Should be run before the flattenInterfaceStructs pass.
For example, see the data structures below.
struct alt_t { bit<1> valid; bit<7> port; };
struct row_t { alt_t alt0; alt_t alt1; };
header bitvec_hdr { row_t row; }
struct col_t { bitvec_hdr bvh; }
struct local_metadata_t { row_t row0; row_t row1; col_t col; bitvec_hdr bvh0; bitvec_hdr bvh1; };
The flattened data structures are shown below.
struct alt_t { bit<1> valid; bit<7> port; }
struct row_t { alt_t alt0; alt_t alt1; }
header bitvec_hdr { bit<1> _row_alt0_valid0; bit<7> _row_alt0_port1; bit<1> _row_alt1_valid2; bit<7> _row_alt1_port3; }
struct col_t { bitvec_hdr bvh; }
struct local_metadata_t { bit<1> _row0_alt0_valid0; bit<7> _row0_alt0_port1; bit<1> _row0_alt1_valid2; bit<7> _row0_alt1_port3; bit<1> _row1_alt0_valid4; bit<7> _row1_alt0_port5; bit<1> _row1_alt1_valid6; bit<7> _row1_alt1_port7; bitvec_hdr _col_bvh8; bitvec_hdr _bvh09; bitvec_hdr _bvh110; }