summaryrefslogtreecommitdiff
path: root/chapter28b/src/test/java/com/seaofnodes
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-28 22:57:30 -0700
committerCliff Click <cliffc@acm.org>2026-10-28 22:57:30 -0700
commitf7fcac0ac9ebfc11549272fa8c166c26e5418e3f (patch)
tree14ae65327062b3e633eb1bf9ff686558047c4fe6 /chapter28b/src/test/java/com/seaofnodes
parent3df967056bf48bd9f87900f3a1ad9af2aedce948 (diff)
downloadSimple-f7fcac0ac9ebfc11549272fa8c166c26e5418e3f.tar.gz
Simple-f7fcac0ac9ebfc11549272fa8c166c26e5418e3f.zip
A more incremental StopCU
Incremental summary of escape data in a single node, instead of repeated in StopCU over and over
Diffstat (limited to 'chapter28b/src/test/java/com/seaofnodes')
-rw-r--r--chapter28b/src/test/java/com/seaofnodes/simple/Chapter20Test.java2
-rw-r--r--chapter28b/src/test/java/com/seaofnodes/simple/Chapter21Test.java2
-rw-r--r--chapter28b/src/test/java/com/seaofnodes/simple/TypeTest.java17
3 files changed, 19 insertions, 2 deletions
diff --git a/chapter28b/src/test/java/com/seaofnodes/simple/Chapter20Test.java b/chapter28b/src/test/java/com/seaofnodes/simple/Chapter20Test.java
index 1001e691..66a318ae 100644
--- a/chapter28b/src/test/java/com/seaofnodes/simple/Chapter20Test.java
+++ b/chapter28b/src/test/java/com/seaofnodes/simple/Chapter20Test.java
@@ -216,7 +216,7 @@ for( int i=0; i<ary#-1; i++ )
return ary[1] * 1000 + ary[3]; // 1 * 1000 + 6
""";
testCPU(src,"x86_64_v2", "SystemV",-1,"return mov(.[]);");
- testCPU(src,"riscv" , "SystemV", 9,"return (add,.[],(mul,.[],1000));");
+ testCPU(src,"riscv" , "SystemV", 7,"return (add,.[],(mul,.[],1000));");
testCPU(src,"arm" , "SystemV", 5,"return (add,.[],(mul,.[],1000));");
}
diff --git a/chapter28b/src/test/java/com/seaofnodes/simple/Chapter21Test.java b/chapter28b/src/test/java/com/seaofnodes/simple/Chapter21Test.java
index d5b41ac9..f1dc54e2 100644
--- a/chapter28b/src/test/java/com/seaofnodes/simple/Chapter21Test.java
+++ b/chapter28b/src/test/java/com/seaofnodes/simple/Chapter21Test.java
@@ -324,7 +324,7 @@ for( int i=0; i<ary#-1; i++ )
return ary[1] * 1000 + ary[3]; // 1 * 1000 + 6
""";
testCPU(src,"x86_64_v2", "SystemV",-1,"return mov(.[]);");
- testCPU(src,"riscv" , "SystemV", 9,"return (add,.[],(mul,.[],1000));");
+ testCPU(src,"riscv" , "SystemV", 7,"return (add,.[],(mul,.[],1000));");
testCPU(src,"arm" , "SystemV", 5,"return (add,.[],(mul,.[],1000));");
}
diff --git a/chapter28b/src/test/java/com/seaofnodes/simple/TypeTest.java b/chapter28b/src/test/java/com/seaofnodes/simple/TypeTest.java
index 113676ff..bb08b5ac 100644
--- a/chapter28b/src/test/java/com/seaofnodes/simple/TypeTest.java
+++ b/chapter28b/src/test/java/com/seaofnodes/simple/TypeTest.java
@@ -7,6 +7,23 @@ import static org.junit.Assert.assertSame;
public class TypeTest {
+ // Refining an unknown pointer must remove possible escapes, not add them.
+ // Inlining can expose the abstract self pointer before its concrete class.
+ @Test public void testAbstractPointerEscapes() {
+ TypeMemPtr object = TypeMemPtr.make(TypeStruct.make("EscapingCallback",false,
+ Field.make("callback",TypeFunPtr.TEST,2,false)));
+ for( Type precise : new Type[]{object,TypeFunPtr.TEST} )
+ for( Type broad : new Type[]{Type.BOTTOM,TypeScalar.BOT,TypePtr.PTR,TypePtr.NPTR} ) {
+ Assert.assertTrue(precise.isa(broad));
+ TypeMem unknown = TypeMem.START.escapes(broad);
+ assertSame(XInt.FULL,unknown._escFs);
+ assertSame(XInt.FULL,unknown._escAs);
+ Assert.assertTrue(TypeMem.START.escapes(precise).isa(unknown));
+ }
+ for( Type empty : new Type[]{Type.TOP,TypeScalar.TOP,TypePtr.XPTR,TypePtr.XNPTR,TypeNil.NIL} )
+ assertSame(TypeMem.START,TypeMem.START.escapes(empty));
+ }
+
@Test public void testBoundedBits() {
int[] sparse = XInt.make(XInt.make(2),65);
for( int[] bits : new int[][]{XInt.EMPTY,XInt.FULL,sparse,XInt.dual(sparse)} )