From 2aa8c5d1d0659bd1c828134f1a1f14d025a2d0f1 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Fri, 7 Feb 2025 08:58:36 -0800 Subject: Ch# Chapter 19: Instruction Selection and Portable Compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hadha Co-authored-by: Tamás Hadházy <85063808+Hels15@users.noreply.github.com> --- src/main/java/com/seaofnodes/simple/IRPrinter.java | 27 +++++++++++----------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'src/main/java/com/seaofnodes/simple/IRPrinter.java') diff --git a/src/main/java/com/seaofnodes/simple/IRPrinter.java b/src/main/java/com/seaofnodes/simple/IRPrinter.java index aa498b16..3cddacfd 100644 --- a/src/main/java/com/seaofnodes/simple/IRPrinter.java +++ b/src/main/java/com/seaofnodes/simple/IRPrinter.java @@ -6,7 +6,7 @@ import java.util.ArrayList; import java.util.BitSet; import java.util.HashMap; -public class IRPrinter { +public abstract class IRPrinter { // Print a node on 1 line, columnar aligned, as: // NNID NNAME DDEF DDEF [[ UUSE UUSE ]] TYPE @@ -55,10 +55,8 @@ public class IRPrinter { Node n = rpos.get(i); if( n instanceof CFGNode || n.isMultiHead() ) { if( !gap ) sb.p("\n"); // Blank before multihead - if( n instanceof FunNode fun ) { - TypeFunPtr sig = fun.sig(); - sig.print(sb.p("--- ").p(sig._name==null ? "" : sig._name).p(" "),false).p("----------------------\n"); - } + if( n instanceof FunNode fun ) + fun.sig().print(sb.p("--- ").p(fun._name==null ? "" : fun._name).p(" "),false).p("----------------------\n"); printLine( n, sb ); // Print head while( --i >= 0 ) { Node t = rpos.get(i); @@ -66,8 +64,8 @@ public class IRPrinter { printLine( t, sb ); } if( n instanceof ReturnNode ret ) { - TypeFunPtr sig = ret.fun().sig(); - sig.print(sb.p("--- ").p(sig._name==null ? "" : sig._name).p(" "),false).p("----------------------\n"); + FunNode fun = ret.fun(); + fun.sig().print(sb.p("--- ").p(fun._name==null ? "" : fun._name).p(" "),false).p("----------------------\n"); } if( !(n instanceof CallNode) ) { sb.p("\n"); // Blank after multitail @@ -176,12 +174,12 @@ public class IRPrinter { private static String _prettyPrintScheduled( Node node, int depth ) { // Backwards DFS walk to depth. HashMap ds = new HashMap<>(); - ArrayList ns = new ArrayList<>(); + Ary ns = new Ary<>(Node.class); _walk(ds,ns,node,depth); // Remove data projections, these are force-printed behind their multinode head for( int i=0; i ds, ArrayList ns, Node node, int d ) { + private static void _walk( HashMap ds, Ary ns, Node node, int d ) { Integer nd = ds.get(node._nid); if( nd!=null && d <= nd ) return; // Been there, done that Integer old = ds.put(node._nid,d) ; @@ -270,11 +268,12 @@ public class IRPrinter { if( !blk.blockHead() ) blk = blk.cfg(0); sb.p( "%-9.9s ".formatted( label( blk ) ) ); } - static void printLine( Node n, SB sb, Ary bns, int i, HashMap ds, ArrayList ns ) { + static void printLine( Node n, SB sb, Ary bns, int i, HashMap ds, Ary ns ) { printLine( n, sb ); if( i != -1 ) bns.del(i); ds.remove(n._nid); - ns.remove(n); + int idx = ns.find(n); + if( idx!=-1 ) ns.del(idx); } } -- cgit v1.2.3