From ce4c47a5bec87ca404fbb49a2d91f34ab6f4e545 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Thu, 12 Sep 2024 10:11:51 -0700 Subject: Fix GCM of CSE stores Stop CSE of stores. Backports to ch11,12,13,14 --- chapter12/src/main/java/com/seaofnodes/simple/Parser.java | 4 ++-- chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java | 2 +- chapter12/src/main/java/com/seaofnodes/simple/node/MemOpNode.java | 8 ++------ chapter12/src/main/java/com/seaofnodes/simple/node/StoreNode.java | 4 ++-- 4 files changed, 7 insertions(+), 11 deletions(-) (limited to 'chapter12/src/main/java') diff --git a/chapter12/src/main/java/com/seaofnodes/simple/Parser.java b/chapter12/src/main/java/com/seaofnodes/simple/Parser.java index e919449f..1a223726 100644 --- a/chapter12/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter12/src/main/java/com/seaofnodes/simple/Parser.java @@ -584,7 +584,7 @@ public class Parser { Node n = new NewNode(TypeMemPtr.make(obj), ctrl()).peephole().keep(); int alias = START._aliasStarts.get(obj._name); for( Field field : obj._fields ) { - memAlias(alias, new StoreNode(field._fname, alias, memAlias(alias), n, ZERO).peephole()); + memAlias(alias, new StoreNode(field._fname, alias, ctrl(), memAlias(alias), n, ZERO).peephole()); alias++; } return n.unkeep(); @@ -623,7 +623,7 @@ public class Parser { if( peek('=') ) _lexer._position--; else { Node val = parseExpression(); - memAlias(alias, new StoreNode(name, alias, memAlias(alias), expr, val).peephole()); + memAlias(alias, new StoreNode(name, alias, ctrl(), memAlias(alias), expr, val).peephole()); return expr; // "obj.a = expr" returns the expression while updating memory } } 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 95d49662..244a0919 100644 --- a/chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java +++ b/chapter12/src/main/java/com/seaofnodes/simple/node/LoadNode.java @@ -21,7 +21,7 @@ public class LoadNode extends MemOpNode { * @param memPtr The ptr to the struct from where we load a field */ public LoadNode(String name, int alias, Type glb, Node memSlice, Node memPtr) { - super(name, alias, memSlice, memPtr); + super(name, alias, null, memSlice, memPtr); _declaredType = glb; } diff --git a/chapter12/src/main/java/com/seaofnodes/simple/node/MemOpNode.java b/chapter12/src/main/java/com/seaofnodes/simple/node/MemOpNode.java index 7f8d060a..551d2aa9 100644 --- a/chapter12/src/main/java/com/seaofnodes/simple/node/MemOpNode.java +++ b/chapter12/src/main/java/com/seaofnodes/simple/node/MemOpNode.java @@ -12,15 +12,11 @@ public abstract class MemOpNode extends Node { public final String _name; public final int _alias; - public MemOpNode(String name, int alias, Node memSlice, Node memPtr) { - super(null, memSlice, memPtr); + public MemOpNode(String name, int alias, Node... nodes) { + super(nodes); _name = name; _alias = alias; } - public MemOpNode(String name, int alias, Node memSlice, Node memPtr, Node value) { - this(name, alias, memSlice, memPtr); - addDef(value); - } public Node mem() { return in(1); } public Node ptr() { return in(2); } diff --git a/chapter12/src/main/java/com/seaofnodes/simple/node/StoreNode.java b/chapter12/src/main/java/com/seaofnodes/simple/node/StoreNode.java index 7c41e767..db8e2ce6 100644 --- a/chapter12/src/main/java/com/seaofnodes/simple/node/StoreNode.java +++ b/chapter12/src/main/java/com/seaofnodes/simple/node/StoreNode.java @@ -17,8 +17,8 @@ public class StoreNode extends MemOpNode { * @param memPtr The ptr to the struct where we will store a value * @param value Value to be stored */ - public StoreNode(String name, int alias, Node memSlice, Node memPtr, Node value) { - super(name, alias, memSlice, memPtr, value); + public StoreNode(String name, int alias, Node ctrl, Node memSlice, Node memPtr, Node value) { + super(name, alias, ctrl, memSlice, memPtr, value); } @Override -- cgit v1.2.3