summaryrefslogtreecommitdiff
path: root/chapter17b/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'chapter17b/src/main/java/com')
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/AddNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/AndNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/DivNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/MulNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/OrNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/SarNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/ShlNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/ShrNode.java2
-rw-r--r--chapter17b/src/main/java/com/seaofnodes/simple/node/XorNode.java2
9 files changed, 9 insertions, 9 deletions
diff --git a/chapter17b/src/main/java/com/seaofnodes/simple/node/AddNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/AddNode.java
index 5eb0b0a3..0f9ecec9 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/AddNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/AddNode.java
@@ -42,7 +42,7 @@ public class AddNode extends Node {
// Add of 0. We do not check for (0+x) because this will already
// canonicalize to (x+0)
- if( t2 instanceof TypeInteger i && i.isConstant() && i.value()==0 )
+ if( t2 instanceof TypeInteger i && i.isConstant() && i.value()==0 && lhs._type instanceof TypeInteger )
return lhs;
// Add of same to a multiply by 2
diff --git a/chapter17b/src/main/java/com/seaofnodes/simple/node/AndNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/AndNode.java
index bd03d6cb..d80e25e7 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/AndNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/AndNode.java
@@ -37,7 +37,7 @@ public class AndNode extends Node {
// And of -1. We do not check for (-1&x) because this will already
// canonicalize to (x&-1)
- if( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==-1 )
+ if( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==-1 && lhs._type instanceof TypeInteger )
return lhs;
// Move constants to RHS: con*arg becomes arg*con
diff --git a/chapter17b/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/DivNode.java
index cd749a03..5b31d216 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -30,7 +30,7 @@ public class DivNode extends Node {
@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 null;
}
diff --git a/chapter17b/src/main/java/com/seaofnodes/simple/node/MulNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/MulNode.java
index a9ac07e6..50404922 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/MulNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/MulNode.java
@@ -36,7 +36,7 @@ public class MulNode extends Node {
// Mul of 1. We do not check for (1*x) because this will already
// canonicalize to (x*1)
- if ( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==1 )
+ if ( t2.isConstant() && t2 instanceof TypeInteger i && i.value()==1 && lhs._type instanceof TypeInteger )
return lhs;
// Move constants to RHS: con*arg becomes arg*con
diff --git a/chapter17b/src/main/java/com/seaofnodes/simple/node/OrNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/OrNode.java
index 5be31b88..ae54a67d 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/OrNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/OrNode.java
@@ -34,7 +34,7 @@ public class OrNode extends Node {
// 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/chapter17b/src/main/java/com/seaofnodes/simple/node/SarNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/SarNode.java
index 44233b3d..9f07956c 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/SarNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/SarNode.java
@@ -38,7 +38,7 @@ public class SarNode extends Node {
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/chapter17b/src/main/java/com/seaofnodes/simple/node/ShlNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/ShlNode.java
index 65dfe684..89d205c5 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/ShlNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/ShlNode.java
@@ -34,7 +34,7 @@ public class ShlNode extends Node {
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 && add.addDep(this).in(2)._type instanceof TypeInteger c && c.isConstant() && c!=TypeInteger.ZERO ) {
diff --git a/chapter17b/src/main/java/com/seaofnodes/simple/node/ShrNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/ShrNode.java
index 757fd69e..22b42f3e 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/ShrNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/ShrNode.java
@@ -34,7 +34,7 @@ public class ShrNode extends Node {
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/chapter17b/src/main/java/com/seaofnodes/simple/node/XorNode.java b/chapter17b/src/main/java/com/seaofnodes/simple/node/XorNode.java
index ef7273b8..5efe23e2 100644
--- a/chapter17b/src/main/java/com/seaofnodes/simple/node/XorNode.java
+++ b/chapter17b/src/main/java/com/seaofnodes/simple/node/XorNode.java
@@ -34,7 +34,7 @@ public class XorNode extends Node {
// 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