summaryrefslogtreecommitdiff
path: root/chapter25/src
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-09-16 14:41:40 -0700
committerCliff Click <cliffc@acm.org>2026-09-16 14:41:40 -0700
commit8adb94d5405d2235e721590d365beab8a8bf7696 (patch)
tree741a3395ad6ab71d8ac11cd84f9405f22f265cd2 /chapter25/src
parentb4514841e4c3ac621acdf6c195a67e3c71805051 (diff)
downloadSimple-8adb94d5405d2235e721590d365beab8a8bf7696.tar.gz
Simple-8adb94d5405d2235e721590d365beab8a8bf7696.zip
up timeouts
add deps on dominance crawls
Diffstat (limited to 'chapter25/src')
-rw-r--r--chapter25/src/main/java/com/seaofnodes/simple/IterPeeps.java2
-rw-r--r--chapter25/src/main/java/com/seaofnodes/simple/node/CFGNode.java3
-rw-r--r--chapter25/src/main/java/com/seaofnodes/simple/node/PhiNode.java2
-rw-r--r--chapter25/src/main/java/com/seaofnodes/simple/node/ScopeNode.java2
-rw-r--r--chapter25/src/test/java/com/seaofnodes/simple/FuzzerWrap.java2
-rw-r--r--chapter25/src/test/java/com/seaofnodes/simple/TestC.java2
6 files changed, 8 insertions, 5 deletions
diff --git a/chapter25/src/main/java/com/seaofnodes/simple/IterPeeps.java b/chapter25/src/main/java/com/seaofnodes/simple/IterPeeps.java
index be8cc9ed..fda5af65 100644
--- a/chapter25/src/main/java/com/seaofnodes/simple/IterPeeps.java
+++ b/chapter25/src/main/java/com/seaofnodes/simple/IterPeeps.java
@@ -216,7 +216,7 @@ public class IterPeeps {
}
if( lca == null ) return null;
if( !early.sameFun(lca) ) return null;
- assert early.dominates(lca) : badSchedule(n,early,lca);
+ assert early.dominates(lca,null) : badSchedule(n,early,lca);
return null;
});
return bad == null;
diff --git a/chapter25/src/main/java/com/seaofnodes/simple/node/CFGNode.java b/chapter25/src/main/java/com/seaofnodes/simple/node/CFGNode.java
index cde88ffa..0ff74a2b 100644
--- a/chapter25/src/main/java/com/seaofnodes/simple/node/CFGNode.java
+++ b/chapter25/src/main/java/com/seaofnodes/simple/node/CFGNode.java
@@ -109,10 +109,11 @@ public abstract class CFGNode extends Node {
}
// True when this node dominates `sub` in the current idom tree.
- public boolean dominates(CFGNode sub) {
+ public boolean dominates(CFGNode sub, Node dep) {
for( CFGNode cfg=sub; cfg!=null; cfg=cfg.idom() )
if( cfg == this )
return true;
+ else if( dep != null ) dep.addDep(cfg);
return false;
}
diff --git a/chapter25/src/main/java/com/seaofnodes/simple/node/PhiNode.java b/chapter25/src/main/java/com/seaofnodes/simple/node/PhiNode.java
index 70f678cb..5ed4382f 100644
--- a/chapter25/src/main/java/com/seaofnodes/simple/node/PhiNode.java
+++ b/chapter25/src/main/java/com/seaofnodes/simple/node/PhiNode.java
@@ -152,7 +152,7 @@ public class PhiNode extends Node {
n = guard.in(1);
}
CFGNode early = CFGNode.earlyCFG(n);
- return tested!=null && (early==null || early.dominates(r)) ? n : null;
+ return tested!=null && (early==null || early.dominates(r,this)) ? n : null;
}
// Same op on all Phi paths; all ops have only the Phi as a use.
diff --git a/chapter25/src/main/java/com/seaofnodes/simple/node/ScopeNode.java b/chapter25/src/main/java/com/seaofnodes/simple/node/ScopeNode.java
index 57dcd66b..7fb84394 100644
--- a/chapter25/src/main/java/com/seaofnodes/simple/node/ScopeNode.java
+++ b/chapter25/src/main/java/com/seaofnodes/simple/node/ScopeNode.java
@@ -536,7 +536,7 @@ public class ScopeNode extends MemMergeNode {
if( pred==null || pred.isDead() )
return;
CFGNode early = CFGNode.earlyCFG(pred);
- if( early != null && !early.dominates(ctrl) )
+ if( early != null && !early.dominates(ctrl,null) )
return;
// Short-circuit logic is represented by a Phi. For `a || b` being
// false, or `a && b` being true, both individual operands have the
diff --git a/chapter25/src/test/java/com/seaofnodes/simple/FuzzerWrap.java b/chapter25/src/test/java/com/seaofnodes/simple/FuzzerWrap.java
index 882a4028..1ba123fe 100644
--- a/chapter25/src/test/java/com/seaofnodes/simple/FuzzerWrap.java
+++ b/chapter25/src/test/java/com/seaofnodes/simple/FuzzerWrap.java
@@ -29,9 +29,11 @@ public class FuzzerWrap {
-673501011619761901L, // peephole killed self
-8212834489697770130L, // bad keep/unkeep in parser
478567486335112458L, // dying escape node
+ -5114548365532699915L, // dominate flags dependencies
};
private static final long[] OPEN_FAILING_SEEDS = {
+ -4710931876754133070L,
};
diff --git a/chapter25/src/test/java/com/seaofnodes/simple/TestC.java b/chapter25/src/test/java/com/seaofnodes/simple/TestC.java
index b43d117f..d9595282 100644
--- a/chapter25/src/test/java/com/seaofnodes/simple/TestC.java
+++ b/chapter25/src/test/java/com/seaofnodes/simple/TestC.java
@@ -189,7 +189,7 @@ public abstract class TestC {
Process gcc = new ProcessBuilder(params.asAry()).redirectErrorStream(true).start();
int exit;
try {
- boolean normal = gcc.waitFor(2, TimeUnit.SECONDS);
+ boolean normal = gcc.waitFor(10, TimeUnit.SECONDS);
exit = normal ? gcc.exitValue() : -1; // no exit???
} catch( InterruptedException e ) {
throw new IOException("interrupted");