From a5fb3fb98c67ff0d2803ba7b6c0cd9933e7d7001 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Tue, 1 Oct 2024 16:37:14 -0700 Subject: Sharpen null checks Look for chances to sharpen checks of all kinds, especially null checks. Not terribly cheap check, probably needs a O(n^2) check Fix a bunch gold test result spelling. --- .../com/seaofnodes/simple/node/RegionNode.java | 56 ++++++++++++++++++++++ .../main/java/com/seaofnodes/simple/type/Type.java | 1 + .../com/seaofnodes/simple/type/TypeInteger.java | 8 +++- .../com/seaofnodes/simple/type/TypeMemPtr.java | 1 + 4 files changed, 65 insertions(+), 1 deletion(-) (limited to 'chapter15/src/main/java/com/seaofnodes') diff --git a/chapter15/src/main/java/com/seaofnodes/simple/node/RegionNode.java b/chapter15/src/main/java/com/seaofnodes/simple/node/RegionNode.java index d5105614..0c7cd1e4 100644 --- a/chapter15/src/main/java/com/seaofnodes/simple/node/RegionNode.java +++ b/chapter15/src/main/java/com/seaofnodes/simple/node/RegionNode.java @@ -72,9 +72,65 @@ public class RegionNode extends CFGNode { p1.in(0) instanceof IfNode iff ) return iff.ctrl(); + + + // Look for direct uses of a guarded expression, and replace with the guard result. + if( !(idom() instanceof StartNode) && // Dead or dying + !(this instanceof LoopNode) ) { + VISIT.clear(); + boolean progress = false; + outer: + for( int i=1; i>32)) *(_max ^ (_max>>32))); } @Override public boolean eq( Type t ) { diff --git a/chapter15/src/main/java/com/seaofnodes/simple/type/TypeMemPtr.java b/chapter15/src/main/java/com/seaofnodes/simple/type/TypeMemPtr.java index 7743c80d..8b484235 100644 --- a/chapter15/src/main/java/com/seaofnodes/simple/type/TypeMemPtr.java +++ b/chapter15/src/main/java/com/seaofnodes/simple/type/TypeMemPtr.java @@ -58,6 +58,7 @@ public class TypeMemPtr extends Type { @Override public TypeMemPtr glb() { return make(_obj.glb(),true); } @Override public TypeMemPtr makeInit() { return NULLPTR; } + @Override public Type nonZero() { return VOIDPTR; } @Override public boolean isHigh() { return this==TOP; } -- cgit v1.2.3