@@ -27,7 +27,7 @@ void Graph::number() {
2727
2828template <size_t mode>
2929void Graph::number_ () {
30- auto [n, m] = entry_-> number <mode>(0 , 0 );
30+ auto [n, m] = entry<mode>()-> template number <mode>(0 , 0 );
3131 assert (n == m);
3232 rpo_[mode].resize (n);
3333 for (auto [_, node] : nodes ()) {
@@ -53,6 +53,7 @@ std::pair<size_t, size_t> Graph::Node::number(size_t pre, size_t post) {
5353
5454void Graph::critical_edge_elimination () {
5555 std::vector<std::pair<Node*, Node*>> crit;
56+ auto x = exit_; // we create new nodes below - so memorize proper exit ...
5657
5758 for (auto [_, node] : nodes_) {
5859 if (node->succs ().size () > 1 ) {
@@ -72,14 +73,16 @@ void Graph::critical_edge_elimination() {
7273 v->link (x);
7374 x->link (w);
7475 }
76+
77+ exit_ = x; // ... and restore again
7578}
7679
7780/*
7881 * ostream
7982 */
8083
8184std::ostream& operator <<(std::ostream& os, const Graph::Node& node) {
82- return os << std::format (" \t\" {}[{}|{}|{}][{}|{}|{}]\" " , node.name (),
85+ return os << std::format (" \t\" {}\\ n [{}|{}|{}]\\ n [{}|{}|{}]\" " , node.name (),
8386 node.pre <0 >(), node.post <0 >(), node.rp <0 >(),
8487 node.pre <1 >(), node.post <1 >(), node.rp <1 >());
8588}
0 commit comments