From 3e950abc9eb2bcafbb36761ace5fcf5707a503a3 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 5 Oct 2026 09:35:31 -0700 Subject: Partial integer update --- chapter24/src/main/java/com/seaofnodes/simple/node/AddNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/DivNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/MinusNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/MulNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/OrNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/SarNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/ShlNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/ShrNode.java | 2 +- chapter24/src/main/java/com/seaofnodes/simple/node/XorNode.java | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) (limited to 'chapter24/src/main/java/com/seaofnodes/simple/node') diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/AddNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/AddNode.java index c7fd4daa..2bbe1053 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/AddNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/AddNode.java @@ -29,7 +29,7 @@ public class AddNode extends ArithNode { // Add of 0. We do not check for (0+x) because this will already // canonicalize to (x+0) - if( t2 == TypeInteger.ZERO ) + if( t2 == TypeInteger.ZERO && lhs._type instanceof TypeInteger ) return lhs; // Add of same to a multiply by 2 diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/DivNode.java index 0de1c946..7b5ae16c 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/DivNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/DivNode.java @@ -18,7 +18,7 @@ public class DivNode extends ArithNode { @Override public Node idealize() { // Div of 1. - if( in(2)._type == TypeInteger.TRUE ) + if( in(2)._type == TypeInteger.TRUE && in(1)._type instanceof TypeInteger ) return in(1); return super.idealize(); } diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/MinusNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/MinusNode.java index 3ab74625..bca8c6ed 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/MinusNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/MinusNode.java @@ -30,7 +30,7 @@ public class MinusNode extends Node { @Override public Node idealize() { // -(-x) is x - if( in(1) instanceof MinusNode minus ) + if( in(1) instanceof MinusNode minus && minus.in(1)._type instanceof TypeInteger ) return minus.in(1); return null; diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/MulNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/MulNode.java index debc2c56..6e1dc053 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/MulNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/MulNode.java @@ -32,7 +32,7 @@ public class MulNode extends ArithNode { // Mul of 1. We do not check for (1*x) because this will already // canonicalize to (x*1) long c = i.value(); - if( c==1 ) return lhs; + if( c==1 ) return lhs._type instanceof TypeInteger ? lhs : null; if( c==0 ) return Parser.ZERO; // Mul by a power of 2, +/-1. Bit patterns more complex than this // are unlikely to win on an X86 vs the normal "imul", and so diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/OrNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/OrNode.java index ac0d8454..96e5bc2e 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/OrNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/OrNode.java @@ -26,7 +26,7 @@ public class OrNode extends ArithNode { // Or of 0. We do not check for (0|x) because this will already // canonicalize to (x|0) - if( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==0 ) + if( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==0 && lhs._type instanceof TypeInteger ) return lhs; // Move constants to RHS: con*arg becomes arg*con diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/SarNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/SarNode.java index ee15fa65..b46b8f76 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/SarNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/SarNode.java @@ -27,7 +27,7 @@ public class SarNode extends ArithNode { Type t2 = rhs._type; // Sar of 0. - if( t2.isConstant() && t2 instanceof TypeInteger i && (i.value()&63)==0 ) + if( t2.isConstant() && t2 instanceof TypeInteger i && (i.value()&63)==0 && lhs._type instanceof TypeInteger ) return lhs; // TODO: x >> 3 >> (y ? 1 : 2) ==> x >> (y ? 4 : 5) diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/ShlNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/ShlNode.java index 2557bf6b..fbeabd5f 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/ShlNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/ShlNode.java @@ -32,7 +32,7 @@ public class ShlNode extends ArithNode { if( rhs._type instanceof TypeInteger shl && shl.isConstant() ) { // Shl of 0. - if( (shl.value()&63)==0 ) + if( (shl.value()&63)==0 && lhs._type instanceof TypeInteger ) return lhs; // (x + c) << i => (x << i) + (c << i) if( lhs instanceof AddNode add && addDep(add).in(2)._type instanceof TypeInteger c && c.isConstant() ) { diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/ShrNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/ShrNode.java index 269f6b7f..ee6f6821 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/ShrNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/ShrNode.java @@ -23,7 +23,7 @@ public class ShrNode extends ArithNode { Type t2 = rhs._type; // Shr of 0. - if( t2.isConstant() && t2 instanceof TypeInteger i && (i.value()&63)==0 ) + if( t2.isConstant() && t2 instanceof TypeInteger i && (i.value()&63)==0 && lhs._type instanceof TypeInteger ) return lhs; // TODO: x >>> 3 >>> (y ? 1 : 2) ==> x >>> (y ? 4 : 5) diff --git a/chapter24/src/main/java/com/seaofnodes/simple/node/XorNode.java b/chapter24/src/main/java/com/seaofnodes/simple/node/XorNode.java index fdb4863e..38986c85 100644 --- a/chapter24/src/main/java/com/seaofnodes/simple/node/XorNode.java +++ b/chapter24/src/main/java/com/seaofnodes/simple/node/XorNode.java @@ -25,7 +25,7 @@ public class XorNode extends ArithNode { // Xor of 0. We do not check for (0^x) because this will already // canonicalize to (x^0) - if( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==0 ) + if( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==0 && lhs._type instanceof TypeInteger ) return lhs; // Move constants to RHS: con*arg becomes arg*con -- cgit v1.2.3