From e7eb2db06d1b9c529f94f2da3a087c83c0498e05 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 19 Oct 2026 10:40:35 -0700 Subject: Turn off Store GVN with explaination --- chapter16/src/main/java/com/seaofnodes/simple/node/StoreNode.java | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'chapter16/src/main') diff --git a/chapter16/src/main/java/com/seaofnodes/simple/node/StoreNode.java b/chapter16/src/main/java/com/seaofnodes/simple/node/StoreNode.java index 8eb104a7..f8fbb907 100644 --- a/chapter16/src/main/java/com/seaofnodes/simple/node/StoreNode.java +++ b/chapter16/src/main/java/com/seaofnodes/simple/node/StoreNode.java @@ -116,4 +116,12 @@ public class StoreNode extends MemOpNode { Type t = val()._type; return _init || t.isa(_declaredType) ? null : "Cannot store "+t+" into field "+_declaredType+" "+_name; } + + // Do not GVN Stores. Two equal Stores on two of three paths are the easy + // failure: sharing them makes GCM place the Store on all three paths. + // Sharing is safe only if every exit path goes through an original Store, + // or GCM splits the shared Store to keep it on those paths. Stores must + // sink, not run on extra paths. GVN does not check this; GCM does not split. + // Identity also disables generic Phi factoring of Stores. + @Override boolean eq(Node n) { return this == n; } } -- cgit v1.2.3