diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-19 10:40:35 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-19 10:40:35 -0700 |
| commit | e7eb2db06d1b9c529f94f2da3a087c83c0498e05 (patch) | |
| tree | 17a21219c7a28017b361bdeec011dda0afc562dc /chapter18/src/main/java/com | |
| parent | ef8d9c4630db6af79c25526c8e80c54a48df4e39 (diff) | |
| download | Simple-e7eb2db06d1b9c529f94f2da3a087c83c0498e05.tar.gz Simple-e7eb2db06d1b9c529f94f2da3a087c83c0498e05.zip | |
Turn off Store GVN with explaination
Diffstat (limited to 'chapter18/src/main/java/com')
| -rw-r--r-- | chapter18/src/main/java/com/seaofnodes/simple/node/StoreNode.java | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/chapter18/src/main/java/com/seaofnodes/simple/node/StoreNode.java b/chapter18/src/main/java/com/seaofnodes/simple/node/StoreNode.java index de17bbad..93e71554 100644 --- a/chapter18/src/main/java/com/seaofnodes/simple/node/StoreNode.java +++ b/chapter18/src/main/java/com/seaofnodes/simple/node/StoreNode.java @@ -167,4 +167,13 @@ public class StoreNode extends MemOpNode { Type t = val()._type; return _init || t.isa(_declaredType) ? null : Parser.error("Cannot store "+t+" into field "+_declaredType+" "+_name,_loc); } + + // 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. + // The closed-loop Store sink is a separate peep and still applies. + @Override boolean eq(Node n) { return this == n; } } |
