summaryrefslogtreecommitdiff
path: root/chapter14/src/main
diff options
context:
space:
mode:
authorThalia Archibald <thalia@archibald.dev>2024-09-07 10:45:59 -0700
committerThalia Archibald <thalia@archibald.dev>2024-09-07 10:54:48 -0700
commitd02bfad6b99710510901acb943b648b7a6d2778f (patch)
tree2e5c5a04aa53607aeb77e68a41629b9f1f69cda7 /chapter14/src/main
parent7584bb74cd50f6f43d8652e9a69aeb36a1a92353 (diff)
downloadSimple-d02bfad6b99710510901acb943b648b7a6d2778f.tar.gz
Simple-d02bfad6b99710510901acb943b648b7a6d2778f.zip
Remove commutative peepholes for shifts
Diffstat (limited to 'chapter14/src/main')
-rw-r--r--chapter14/src/main/java/com/seaofnodes/simple/node/SarNode.java7
-rw-r--r--chapter14/src/main/java/com/seaofnodes/simple/node/ShlNode.java7
-rw-r--r--chapter14/src/main/java/com/seaofnodes/simple/node/ShrNode.java7
3 files changed, 3 insertions, 18 deletions
diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/SarNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/SarNode.java
index 195d0538..ba99fde8 100644
--- a/chapter14/src/main/java/com/seaofnodes/simple/node/SarNode.java
+++ b/chapter14/src/main/java/com/seaofnodes/simple/node/SarNode.java
@@ -37,18 +37,13 @@ public class SarNode extends Node {
public Node idealize() {
Node lhs = in(1);
Node rhs = in(2);
- Type t1 = lhs._type;
Type t2 = rhs._type;
// Sar of 0.
if( t2.isConstant() && t2 instanceof TypeInteger i && (i.value()&63)==0 )
return lhs;
- // Do we have ((x & (phi cons)) & con) ?
- // Do we have ((x & (phi cons)) & (phi cons)) ?
- // Push constant up through the phi: x & (phi con0&con0 con1&con1...)
- Node phicon = AddNode.phiCon(this,true);
- if( phicon!=null ) return phicon;
+ // TODO: x >> 3 >> (y ? 1 : 2) ==> x >> (y ? 4 : 5)
return null;
}
diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/ShlNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/ShlNode.java
index 749d44c8..097a899c 100644
--- a/chapter14/src/main/java/com/seaofnodes/simple/node/ShlNode.java
+++ b/chapter14/src/main/java/com/seaofnodes/simple/node/ShlNode.java
@@ -33,18 +33,13 @@ public class ShlNode extends Node {
public Node idealize() {
Node lhs = in(1);
Node rhs = in(2);
- Type t1 = lhs._type;
Type t2 = rhs._type;
// Shl of 0.
if( t2.isConstant() && t2 instanceof TypeInteger i && (i.value()&63)==0 )
return lhs;
- // Do we have ((x & (phi cons)) & con) ?
- // Do we have ((x & (phi cons)) & (phi cons)) ?
- // Push constant up through the phi: x & (phi con0&con0 con1&con1...)
- Node phicon = AddNode.phiCon(this,true);
- if( phicon!=null ) return phicon;
+ // TODO: x << 3 << (y ? 1 : 2) ==> x << (y ? 4 : 5)
return null;
}
diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/ShrNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/ShrNode.java
index 15f02db4..16d78ebf 100644
--- a/chapter14/src/main/java/com/seaofnodes/simple/node/ShrNode.java
+++ b/chapter14/src/main/java/com/seaofnodes/simple/node/ShrNode.java
@@ -33,18 +33,13 @@ public class ShrNode extends Node {
public Node idealize() {
Node lhs = in(1);
Node rhs = in(2);
- Type t1 = lhs._type;
Type t2 = rhs._type;
// Shr of 0.
if( t2.isConstant() && t2 instanceof TypeInteger i && (i.value()&63)==0 )
return lhs;
- // Do we have ((x & (phi cons)) & con) ?
- // Do we have ((x & (phi cons)) & (phi cons)) ?
- // Push constant up through the phi: x & (phi con0&con0 con1&con1...)
- Node phicon = AddNode.phiCon(this,true);
- if( phicon!=null ) return phicon;
+ // TODO: x >>> 3 >>> (y ? 1 : 2) ==> x >>> (y ? 4 : 5)
return null;
}