Skip to content

Commit 4eacd1a

Browse files
author
Roland Leißa
committed
forward/backward mode
1 parent 45a0532 commit 4eacd1a

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

include/graphtool/graph.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class Graph {
7171
fe::Driver& driver() { return driver_; }
7272
Sym name() const { return name_; }
7373
const auto& nodes() const { return nodes_; }
74+
template<size_t mode> Node* entry() const { return mode == 0 ? entry_ : exit_; }
75+
template<size_t mode> Node* exit() const { return mode == 0 ? exit_ : exit_; }
7476
template<size_t mode> const auto& rpo() const { return rpo_[mode]; }
7577
///@}
7678

src/graphtool/graph.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void Graph::number() {
2727

2828
template<size_t mode>
2929
void 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

5454
void 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

8184
std::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

Comments
 (0)