blob: 17850f4ec9a19d3d021294dc29e34501b0fc7cd4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package com.seaofnodes.simple;
import com.seaofnodes.simple.node.*;
public class IRPrinter {
// Inspect raw edges so a partly built/dead node is still useful to print.
private static String label(Node n) {
if( n._inputs==null ) return n.getClass().getSimpleName();
try { return n.label(); }
catch( RuntimeException | AssertionError ex ) { return n.getClass().getSimpleName(); }
}
private static String type(Node n) {
if( n._type==null ) return "";
try { return n._type.toString(); }
catch( RuntimeException | AssertionError ex ) { return "<incomplete type>"; }
}
public static void _printLine(Node n, StringBuilder sb) {
if( n==null ) return;
sb.append("%4d %-7.7s ".formatted(n._nid,label(n)));
if( n._inputs==null ) { sb.append("DEAD\n"); return; }
for( Node def : n._inputs )
sb.append(def==null ? "____ " : "%4d ".formatted(def._nid));
for( int i=n._inputs.size(); i<4; i++ ) sb.append(" ");
sb.append(" [[ ");
if( n._outputs!=null ) for( Node use : n._outputs )
sb.append(use==null ? "____ " : "%4d ".formatted(use._nid));
sb.append(" ]] ").append(type(n)).append('\n');
}
public static String prettyPrint(Node node, int depth) {
StringBuilder sb = new StringBuilder();
for( Node n : DebugSchedule.schedule(node,depth) ) {
if( DebugSchedule.gap(n) ) sb.append('\n');
_printLine(n,sb);
}
return sb.toString();
}
}
|