summaryrefslogtreecommitdiff
path: root/src/main/java/com/seaofnodes/simple/GraphVisualizer.java
diff options
context:
space:
mode:
authorThalia Archibald <thalia@archibald.dev>2024-03-03 17:55:47 +0000
committerThalia Archibald <thalia@archibald.dev>2024-10-23 17:51:09 -0700
commit9ed409df4516e0089afbc7d5ccf9b029d431be04 (patch)
treec0ae90716b9551dc0e58d0ec52f5e4e91bb1152f /src/main/java/com/seaofnodes/simple/GraphVisualizer.java
parent425f05826799e9da06a630187d2ad05c656266a1 (diff)
downloadSimple-linear-chapter09.tar.gz
Simple-linear-chapter09.zip
Chapter 9: Global Value Numbering and Iterative Peepholeslinear-chapter09
Co-authored-by: Cliff Click <cliffc@acm.org> Co-authored-by: XmiliaH <45106915+XmiliaH@users.noreply.github.com> Co-authored-by: Robert Obkircher <robert.obkircher@gmail.com> Co-authored-by: Dibyendu Majumdar <mobile@majumdar.org.uk> Co-authored-by: Darrick Wiebe <darrickw@untether.ai>
Diffstat (limited to 'src/main/java/com/seaofnodes/simple/GraphVisualizer.java')
-rw-r--r--src/main/java/com/seaofnodes/simple/GraphVisualizer.java30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/main/java/com/seaofnodes/simple/GraphVisualizer.java b/src/main/java/com/seaofnodes/simple/GraphVisualizer.java
index d75e5bea..b4d64d4c 100644
--- a/src/main/java/com/seaofnodes/simple/GraphVisualizer.java
+++ b/src/main/java/com/seaofnodes/simple/GraphVisualizer.java
@@ -20,15 +20,16 @@ public class GraphVisualizer {
public GraphVisualizer(boolean separateControlCluster) { this._separateControlCluster = separateControlCluster; }
public GraphVisualizer() { this(false); }
- public String generateDotOutput(Parser parser) {
+ public String generateDotOutput(Parser parse) { return generateDotOutput(parse.STOP,parse._scope,parse._xScopes); }
+ public String generateDotOutput(StopNode stop, Node scope, Stack<ScopeNode> xScopes) {
// Since the graph has cycles, we need to create a flat list of all the
// nodes in the graph.
- Collection<Node> all = findAll(parser);
+ Collection<Node> all = findAll(stop, scope);
StringBuilder sb = new StringBuilder();
- sb.append("digraph chapter08 {\n");
+ sb.append("digraph chapter09 {\n");
sb.append("/*\n");
- sb.append(parser.src());
+ sb.append(stop._src);
sb.append("\n*/\n");
// To keep the Scopes below the graph and pointing up into the graph we
@@ -52,15 +53,19 @@ public class GraphVisualizer {
nodes(sb, all);
// Now the scopes, in a cluster no edges
- for( ScopeNode scope : parser._xScopes )
- scope( sb, scope );
+ if( xScopes != null )
+ for( ScopeNode xscope : xScopes )
+ if( !xscope.isDead() )
+ scope( sb, xscope );
// Walk the Node edges
nodeEdges(sb, all);
// Walk the active Scope edges
- for( ScopeNode scope : parser._xScopes )
- scopeEdges( sb, scope );
+ if( xScopes != null )
+ for( ScopeNode xscope : xScopes )
+ if( !xscope.isDead() )
+ scopeEdges( sb, xscope );
sb.append("}\n");
return sb.toString();
@@ -232,12 +237,13 @@ public class GraphVisualizer {
/**
* Finds all nodes in the graph.
*/
- private Collection<Node> findAll(Parser parser) {
+ private Collection<Node> findAll(Node stop, Node scope) {
final HashMap<Integer, Node> all = new HashMap<>();
- for( Node n : Parser.START._outputs )
- walk(all, n);
- for( Node n : parser._scope._inputs )
+ for( Node n : stop._inputs )
walk(all, n);
+ if( scope != null )
+ for( Node n : scope._inputs )
+ walk(all, n);
return all.values();
}