diff options
Diffstat (limited to 'chapter08')
| -rw-r--r-- | chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java | 7 | ||||
| -rw-r--r-- | chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java | 7 |
2 files changed, 9 insertions, 5 deletions
diff --git a/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java index 2213d2e7..7207fd48 100644 --- a/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java +++ b/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java @@ -33,7 +33,12 @@ public class DivNode extends Node { } @Override - public Node idealize() { return null; } + public Node idealize() { + // Div of 1. + if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 ) + return in(1); + return null; + } @Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); } } diff --git a/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java index 4a06fcb3..98aa679f 100644 --- a/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java +++ b/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java @@ -27,15 +27,14 @@ public class SubNode extends Node { return TypeInteger.constant(i0.value()-i1.value()); return i0.meet(i1); } + // Sub of same is 0 + if( in(1)==in(2) ) + return TypeInteger.ZERO; return Type.BOTTOM; } @Override public Node idealize() { - // Sub of same is 0 - if( in(1)==in(2) ) - return new ConstantNode(TypeInteger.constant(0)); - return null; } |
