Skip to content

Commit 7f4c44e

Browse files
committed
Working on DFS / Scheduling
1 parent b17d8bc commit 7f4c44e

1 file changed

Lines changed: 40 additions & 4 deletions

File tree

  • src/main/java/de/mirkosertic/metair/ir

src/main/java/de/mirkosertic/metair/ir/DFS.java

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,37 @@ public DFS(final Node startNode) {
2626
for (final Node.UseEdge edge : user.uses) {
2727
if (edge.node() == currentNode) {
2828
if (edge.use() instanceof final ControlFlowUse cfu && cfu.type == ControlType.FORWARD) {
29-
forwardNodes.add(user);
29+
final Set<Node> preds = predecessorsOf(user);
30+
if (marked.containsAll(preds)) {
31+
//System.out.println("All predecessors of node " + currentNode + " visited, continuing");
32+
forwardNodes.add(user);
33+
} else {
34+
//System.out.println("Not all preds of node " + currentNode + " visited yet, skipping for now");
35+
}
3036
} else if (edge.use() instanceof DefinedByUse) {
31-
forwardNodes.add(user);
37+
final Set<Node> preds = predecessorsOf(user);
38+
if (marked.containsAll(preds)) {
39+
//System.out.println("All predecessors of node " + currentNode + " visited, continuing");
40+
forwardNodes.add(user);
41+
} else {
42+
//System.out.println("Not all preds of node " + currentNode + " visited yet, skipping for now");
43+
}
3244
} else if (edge.use() instanceof DataFlowUse) {
33-
forwardNodes.add(user);
45+
final Set<Node> preds = predecessorsOf(user);
46+
if (marked.containsAll(preds)) {
47+
//System.out.println("All predecessors of node " + currentNode + " visited, continuing");
48+
forwardNodes.add(user);
49+
} else {
50+
//System.out.println("Not all preds of node " + currentNode + " visited yet, skipping for now");
51+
}
3452
} else if (edge.use() instanceof MemoryUse) {
35-
forwardNodes.add(user);
53+
final Set<Node> preds = predecessorsOf(user);
54+
if (marked.containsAll(preds)) {
55+
//System.out.println("All predecessors of node " + currentNode + " visited, continuing");
56+
forwardNodes.add(user);
57+
} else {
58+
//System.out.println("Not all preds of node " + currentNode + " visited yet, skipping for now");
59+
}
3660
}
3761
}
3862
}
@@ -65,6 +89,18 @@ public DFS(final Node startNode) {
6589
}
6690
}
6791

92+
private Set<Node> predecessorsOf(final Node node) {
93+
final Set<Node> predecessors = new HashSet<>();
94+
for (final Node.UseEdge edge : node.uses) {
95+
if (edge.use() instanceof final ControlFlowUse cfu) {
96+
if (cfu.type == ControlType.FORWARD) {
97+
predecessors.add(edge.node());
98+
}
99+
} else predecessors.add(edge.node());
100+
}
101+
return predecessors;
102+
}
103+
68104
public List<Node> getTopologicalOrder() {
69105
return nodesInOrder;
70106
}

0 commit comments

Comments
 (0)