static
void removeRedundantLiteralsFromInfixes(RoseInGraph &g,
const CompileContext &cc) {
- map<NGHolder *, vector<RoseInEdge> > infixes;
+ vector<NGHolder *> seen_order;
+ map<NGHolder *, vector<RoseInEdge>> infixes;
for (const RoseInEdge &e : edges_range(g)) {
RoseInVertex s = source(e, g);
}
assert(!g[t].delay);
- infixes[&*g[e].graph].push_back(e);
+
+ NGHolder *h = g[e].graph.get();
+ if (!contains(infixes, h)) {
+ seen_order.push_back(h);
+ }
+ infixes[h].push_back(e);
}
- for (const auto &info : infixes) {
- removeRedundantLiteralsFromInfix(*info.first, g, info.second, cc);
+ for (NGHolder *h : seen_order) {
+ removeRedundantLiteralsFromInfix(*h, g, infixes[h], cc);
}
}