54 std::map<cstring, const IR::MAU::Table *> name_to_table;
56 bool edge(
const IR::MAU::Table *a,
const IR::MAU::Table *b)
const {
57 if (edges_to_add.count(a) == 0)
return false;
58 return edges_to_add.at(a).count(b);
62 : dg(d), ctrl_paths(cp) {}
66 auto rv = MauInspector::init_apply(node);
71 void postorder(
const IR::MAU::Table *tbl)
override;
72 void end_apply()
override;
103class InjectMetadataControlDependencies :
public AbstractDependencyInjector {
106 std::map<cstring, const IR::MAU::Table *> name_to_table;
109 auto rv = AbstractDependencyInjector::init_apply(node);
110 name_to_table.clear();
114 bool preorder(
const IR::MAU::Table *t)
override {
115 auto rv = AbstractDependencyInjector::preorder(t);
116 name_to_table[t->name] = t;
120 void end_apply()
override;
125 : AbstractDependencyInjector(g, cp), phv(p), fg(f) {}
139class InjectControlExitDependencies :
public AbstractDependencyInjector {
140 std::map<gress_t, std::vector<const IR::MAU::Table *>> run_before_exit_tables;
143 LOG3(
"InjectControlExitDependencies begins");
144 auto rv = AbstractDependencyInjector::init_apply(node);
145 run_before_exit_tables.clear();
149 void end_apply(
const IR::Node *node)
override {
150 Visitor::end_apply(node);
151 link_run_before_exit_tables();
152 LOG3(
"InjectControlExitDependencies ends");
155 bool preorder(
const IR::MAU::Table *table)
override;
156 void postorder(
const IR::MAU::Table *table)
override;
158 void collect_run_before_exit_table(
const IR::MAU::Table *table);
159 void inject_dependencies_from_gress_root_tables_to_first_rbe_table(
160 const IR::MAU::Table *first_rbe_table);
161 bool is_first_run_before_exit_table_in_gress(
const IR::MAU::Table *rbe_table);
162 const IR::MAU::TableSeq *get_gress_root_table_seq(
const IR::MAU::Table *table);
163 void link_run_before_exit_tables();
164 void inject_control_exit_dependency(
const IR::MAU::Table *source,
165 const IR::MAU::Table *destination);
169 : AbstractDependencyInjector(dg, cp) {}
172class InjectDarkAntiDependencies :
public AbstractDependencyInjector {
175 std::map<UniqueId, const IR::MAU::Table *> id_to_table;
178 auto rv = AbstractDependencyInjector::init_apply(node);
184 bool preorder(
const IR::MAU::Table *)
override;
185 void end_apply()
override;
188 const IR::MAU::Table *getTable(
UniqueId uid);
193 : AbstractDependencyInjector(g, cp), phv(p) {}
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24