From e481e3d215882faa82b19f29cfde5746d4e51863 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Wed, 28 Oct 2026 12:26:28 -0700 Subject: Backport Opto speedups and Minus fix --- chapter28b/src/main/java/com/seaofnodes/simple/codegen/Opto.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'chapter28b/src/main/java/com') diff --git a/chapter28b/src/main/java/com/seaofnodes/simple/codegen/Opto.java b/chapter28b/src/main/java/com/seaofnodes/simple/codegen/Opto.java index e288d838..511e0027 100644 --- a/chapter28b/src/main/java/com/seaofnodes/simple/codegen/Opto.java +++ b/chapter28b/src/main/java/com/seaofnodes/simple/codegen/Opto.java @@ -30,7 +30,7 @@ abstract public class Opto { WorkList deps = new WorkList<>(); WorkList changes = new WorkList<>(); Ary modes = new Ary<>(Node.class); - resetToTop(code,oldTypes,modes); + resetToTop(code,oldTypes,modes,deps); unlinkStart(code); // OPTIMISTIC INTERPROCEDURAL SCCP @@ -53,8 +53,11 @@ abstract public class Opto { } // Reset Types before running the worklist algorithm - private static void resetToTop(CodeGen code, Ary oldTypes, Ary modes ) { + private static void resetToTop(CodeGen code, Ary oldTypes, Ary modes, WorkList deps ) { code._start.walk( x -> { + // Opto ends Parm.inProgress(), enabling constant folding even + // when a parameter's type was already constant before SCCP. + if( x instanceof ParmNode && x._type.isHighOrConst() ) deps.push(x); // SCCP adds call edges and default arguments, not numeric // operations. Gather unresolved modes on this required walk. if( x instanceof ModeNode mode && mode.mode()==0 ) modes.push(x); -- cgit v1.2.3