summaryrefslogtreecommitdiff
path: root/chapter12
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2024-07-26 11:46:59 +0300
committerDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2024-08-05 23:28:33 +0100
commitf985590bee537977952dd3017fc6cb16f014161b (patch)
tree35f47daf174077a1b1d3bd04940e860fcacb403d /chapter12
parent799ba3a8d2603a51fc5b860f7845e72e6af61c38 (diff)
downloadSimple-f985590bee537977952dd3017fc6cb16f014161b.tar.gz
Simple-f985590bee537977952dd3017fc6cb16f014161b.zip
Better filter on Load clone
Diffstat (limited to 'chapter12')
-rw-r--r--chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java10
-rw-r--r--chapter12/src/test/java/com/seaofnodes/simple/Chapter12Test.java16
2 files changed, 20 insertions, 6 deletions
diff --git a/chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java b/chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java
index 4ed06da4..95d49662 100644
--- a/chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java
+++ b/chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java
@@ -61,9 +61,13 @@ public class LoadNode extends MemOpNode {
if( profit(memphi,2) ||
// Else must not be a loop to count profit on LHS.
(!(memphi.region() instanceof LoopNode) && profit(memphi,1)) ) {
- Node ld1 = new LoadNode(_name,_alias,_declaredType,memphi.in(1),ptr()).peephole();
- Node ld2 = new LoadNode(_name,_alias,_declaredType,memphi.in(2),ptr()).peephole();
- return new PhiNode(_name,_type,memphi.region(),ld1,ld2);
+ if( ptr() instanceof NewNode || !(ptr() instanceof CastNode) ) {
+ if( !(ptr() instanceof NewNode) ) throw Utils.TODO(); // Validate
+
+ Node ld1 = new LoadNode(_name,_alias,_declaredType,memphi.in(1),ptr()).peephole();
+ Node ld2 = new LoadNode(_name,_alias,_declaredType,memphi.in(2),ptr()).peephole();
+ return new PhiNode(_name,_type,memphi.region(),ld1,ld2);
+ }
}
}
diff --git a/chapter12/src/test/java/com/seaofnodes/simple/Chapter12Test.java b/chapter12/src/test/java/com/seaofnodes/simple/Chapter12Test.java
index af8fdfe9..2eeccba9 100644
--- a/chapter12/src/test/java/com/seaofnodes/simple/Chapter12Test.java
+++ b/chapter12/src/test/java/com/seaofnodes/simple/Chapter12Test.java
@@ -13,11 +13,21 @@ public class Chapter12Test {
public void testJig() {
Parser parser = new Parser(
"""
-return 3.14;
+struct s0 {
+ int v0;
+}
+s0? fIflMOdp;
+while(1) {
+ if(fIflMOdp){
+ fIflMOdp.v0=-fIflMOdp.v0;
+ continue;
+ }
+ break;
+}
""");
StopNode stop = parser.parse(false).iterate(false);
- assertEquals("return 3.14;", stop.toString());
- assertEquals(3.14, Evaluator.evaluate(stop, 0));
+ assertEquals("return 0;", stop.toString());
+ assertEquals(0L, Evaluator.evaluate(stop, 0));
}
@Test