diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-28 12:26:28 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-28 12:26:28 -0700 |
| commit | e481e3d215882faa82b19f29cfde5746d4e51863 (patch) | |
| tree | d6035c13e4ee471b67d7dd4732a62bc04020fbd1 /chapter28b/src/main | |
| parent | 07a87b4461015dd81f1d40cef1e2378882c86479 (diff) | |
| download | Simple-e481e3d215882faa82b19f29cfde5746d4e51863.tar.gz Simple-e481e3d215882faa82b19f29cfde5746d4e51863.zip | |
Backport Opto speedups and Minus fix
Diffstat (limited to 'chapter28b/src/main')
| -rw-r--r-- | chapter28b/src/main/java/com/seaofnodes/simple/codegen/Opto.java | 7 |
1 files changed, 5 insertions, 2 deletions
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<Node> deps = new WorkList<>(); WorkList<Node> changes = new WorkList<>(); Ary<Node> 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<Type> oldTypes, Ary<Node> modes ) { + private static void resetToTop(CodeGen code, Ary<Type> oldTypes, Ary<Node> modes, WorkList<Node> 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); |
