44 using StateExtract = std::pair<const IR::BFN::ParserState *, const IR::BFN::Extract *>;
45 using StatePrimitiveMap =
49 const CollectParserInfo &parser_info_i;
52 mutable bool is_trivial_pass =
false;
53 mutable bool is_trivial_alloc =
false;
54 std::set<FieldRange> &mauInitFields;
59 std::vector<const IR::BFN::ParserPrimitive *>>
63 StatePrimitiveMap get_primitives(
const FieldSlice &fs)
const;
67 bool parser_zero_init(
const Field *f)
const {
68 return (defuse_i.hasUninitializedRead(f->
id) && !pa_no_init_i.getFields().count(f));
72 bool allow_clobber(
const Field *f)
const;
75 bool is_parser_error(
const Field *f)
const;
78 const AllocError *will_buf_extract_clobber_the_other(
79 const FieldSlice &fs,
const StateExtract &state_extract,
const int cont_idx,
80 const FieldSlice &other_fs,
const StatePrimitiveMap &other_extracts,
81 const int other_cont_idx,
bool add_mau_inits)
const;
84 const AllocError *will_a_extracts_clobber_b(
const FieldSliceStart &a,
const FieldSliceStart &b,
85 bool add_mau_inits)
const;
89 const CollectParserInfo &parser_info,
const FieldDefUse &defuse,
91 std::set<FieldRange> &mauInitFields)
94 parser_info_i(parser_info),
96 pa_no_init_i(pa_no_init),
97 mauInitFields(mauInitFields) {}
102 bool add_mau_inits =
false)
const;
107 bool add_mau_inits =
false)
const override;
110 void set_trivial_pass(
bool trivial)
const;
112 void set_trivial_alloc(
bool trivial)
const;