From bed724c88722f332693f41e2329b75c6ce492880 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Fri, 30 Oct 2026 16:55:06 -0700 Subject: Preserve escape bounds when splitting bulk memory Phis --- .../main/java/com/seaofnodes/simple/node/BulkMemPhiNode.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'chapter28a/src/main/java/com') diff --git a/chapter28a/src/main/java/com/seaofnodes/simple/node/BulkMemPhiNode.java b/chapter28a/src/main/java/com/seaofnodes/simple/node/BulkMemPhiNode.java index df9e4fff..b7372e87 100644 --- a/chapter28a/src/main/java/com/seaofnodes/simple/node/BulkMemPhiNode.java +++ b/chapter28a/src/main/java/com/seaofnodes/simple/node/BulkMemPhiNode.java @@ -208,13 +208,6 @@ public class BulkMemPhiNode extends PhiNode { mmm.alias(alias,precise); assert checkMerge(mmm); mmm.init(); - // Slicing changes representation, not the set of values in memory. - // Newly exposed precise inputs can carry conservative bulk escape - // summaries; do not let those invent escapes absent from this Phi. - TypeMem old = (TypeMem)_type; - TypeMem mem = (TypeMem) mmm._type; - mmm._type = TypeMem.make(mem._alias,mem._t,mem._one,mem._clz, - mem._final,old._escFs,old._escAs); return mmm; } @@ -226,7 +219,10 @@ public class BulkMemPhiNode extends PhiNode { mphi = new MemPhiNode("$"+alias,alias); mphi.addDef(region()); // Due to cycles, must set before calling peephole - mphi.setType(TypeMem.BOT.makeFrom(alias)); + // Splitting preserves the bulk Phi's established escape bound. Starting + // at BOT would temporarily invent escapes when the new slice is merged. + TypeMem old = (TypeMem)_type; + mphi.setType(TypeMem.make(alias,old._t,old._one,old._clz,false,old._escFs,old._escAs)); for( int i=1; i