diff options
| author | Cliff Click <cliffc@acm.org> | 2024-09-12 10:11:51 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2024-09-12 12:04:37 -0700 |
| commit | ce4c47a5bec87ca404fbb49a2d91f34ab6f4e545 (patch) | |
| tree | 8cfddded5827858d444915c97b8da42faa0e642f /chapter14/src/main/java/com | |
| parent | 180e0612d0395ad23f7b5782e799c05a145734c7 (diff) | |
| download | Simple-ce4c47a5bec87ca404fbb49a2d91f34ab6f4e545.tar.gz Simple-ce4c47a5bec87ca404fbb49a2d91f34ab6f4e545.zip | |
Fix GCM of CSE stores
Stop CSE of stores.
Backports to ch11,12,13,14
Diffstat (limited to 'chapter14/src/main/java/com')
4 files changed, 8 insertions, 13 deletions
diff --git a/chapter14/src/main/java/com/seaofnodes/simple/Parser.java b/chapter14/src/main/java/com/seaofnodes/simple/Parser.java index bea06a19..417f4295 100644 --- a/chapter14/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter14/src/main/java/com/seaofnodes/simple/Parser.java @@ -668,7 +668,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, field._type, memAlias(alias), n, new ConstantNode(field._type.makeInit()).peephole(),true).peephole()); + memAlias(alias, new StoreNode(field._fname, alias, field._type, ctrl(), memAlias(alias), n, new ConstantNode(field._type.makeInit()).peephole(),true).peephole()); alias++; } return n.unkeep(); @@ -712,7 +712,7 @@ public class Parser { Type glb = base._fields[idx]._type; // Auto-truncate when storing to narrow fields val = zsMask(val,glb); - memAlias(alias, new StoreNode(name, alias,glb, memAlias(alias), expr, val, false).peephole()); + memAlias(alias, new StoreNode(name, alias,glb, ctrl(), memAlias(alias), expr, val, false).peephole()); return expr; // "obj.a = expr" returns the expression while updating memory } } diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/LoadNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/LoadNode.java index 4e1421fa..a033a7cf 100644 --- a/chapter14/src/main/java/com/seaofnodes/simple/node/LoadNode.java +++ b/chapter14/src/main/java/com/seaofnodes/simple/node/LoadNode.java @@ -19,7 +19,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, glb, memSlice, memPtr); + super(name, alias, glb, null, memSlice, memPtr); } @Override public String label() { return _name; } diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/MemOpNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/MemOpNode.java index bc8e46d3..76564db0 100644 --- a/chapter14/src/main/java/com/seaofnodes/simple/node/MemOpNode.java +++ b/chapter14/src/main/java/com/seaofnodes/simple/node/MemOpNode.java @@ -14,16 +14,11 @@ public abstract class MemOpNode extends Node { public final Type _declaredType; - public MemOpNode(String name, int alias, Type glb, Node memSlice, Node memPtr) { - super(null, memSlice, memPtr); + public MemOpNode(String name, int alias, Type glb, Node... nodes) { + super(nodes); _name = name; _alias = alias; _declaredType = glb; - - } - public MemOpNode(String name, int alias, Type glb, Node memSlice, Node memPtr, Node value) { - this(name, alias, glb, memSlice, memPtr); - addDef(value); } public Node mem() { return in(1); } diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/StoreNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/StoreNode.java index 44a14be1..57e8b3ad 100644 --- a/chapter14/src/main/java/com/seaofnodes/simple/node/StoreNode.java +++ b/chapter14/src/main/java/com/seaofnodes/simple/node/StoreNode.java @@ -19,12 +19,12 @@ 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, Type glb, Node memSlice, Node memPtr, Node value, boolean init) { - super(name, alias, glb, memSlice, memPtr, value); + public StoreNode(String name, int alias, Type glb, Node ctrl, Node memSlice, Node memPtr, Node value, boolean init) { + super(name, alias, glb, ctrl, memSlice, memPtr, value); _init = init; } - @Override public String label() { return "ST"+_name; } + @Override public String label() { return "." +_name+"="; } @Override public String glabel() { return "." +_name+"="; } @Override public boolean isMem() { return true; } |
