From e481e3d215882faa82b19f29cfde5746d4e51863 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Wed, 28 Oct 2026 12:26:28 -0700 Subject: Backport Opto speedups and Minus fix --- .../java/com/seaofnodes/simple/Chapter20Test.java | 2 +- .../java/com/seaofnodes/simple/MinusNodeTest.java | 73 ++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 chapter27/src/test/java/com/seaofnodes/simple/MinusNodeTest.java (limited to 'chapter27/src/test/java/com/seaofnodes') diff --git a/chapter27/src/test/java/com/seaofnodes/simple/Chapter20Test.java b/chapter27/src/test/java/com/seaofnodes/simple/Chapter20Test.java index c5e4c583..2db10f8f 100644 --- a/chapter27/src/test/java/com/seaofnodes/simple/Chapter20Test.java +++ b/chapter27/src/test/java/com/seaofnodes/simple/Chapter20Test.java @@ -243,7 +243,7 @@ s.cs[0] = 67; // C s.cs[1] = 108; // l hashCode(s); """; - testTarget(src,"x86_64_v2", "SystemV",9,null); + testTarget(src,"x86_64_v2", "SystemV",0,null); testTarget(src,"riscv" , "SystemV",1,null); testTarget(src,"arm" , "SystemV",1,null); } diff --git a/chapter27/src/test/java/com/seaofnodes/simple/MinusNodeTest.java b/chapter27/src/test/java/com/seaofnodes/simple/MinusNodeTest.java new file mode 100644 index 00000000..497546df --- /dev/null +++ b/chapter27/src/test/java/com/seaofnodes/simple/MinusNodeTest.java @@ -0,0 +1,73 @@ +package com.seaofnodes.simple; + +import com.seaofnodes.simple.codegen.CodeGen; +import com.seaofnodes.simple.node.ConstantNode; +import com.seaofnodes.simple.node.MinusNode; +import com.seaofnodes.simple.node.Node; +import com.seaofnodes.simple.type.*; +import java.util.ArrayList; +import java.util.Arrays; +import org.junit.Test; +import static org.junit.Assert.*; + +public class MinusNodeTest { + @Test public void testMonotoneCompute() { + CodeGen code = new CodeGen("return 0;"); + // Type.gather also loads cached fixtures which do not survive later compiler resets. + ArrayList inputs = new ArrayList<>(Arrays.asList( + Type.BOTTOM,Type.CONTROL,Type.NIL,TypeScalar.BOT,TypePtr.PTR, + TypeMemPtr.BOT,TypeFunPtr.BOT,TypeMem.BOT, + TypeConAryB.make(new byte[]{1,2,3}))); + TypeInteger.gather(inputs); + TypeFloat.gather(inputs); + int size = inputs.size(); + for( int i=0; i "+inputs.get(j)+ + " gave "+results[i]+" -> "+results[j],results[i].isa(results[j])); + } + } + } + + @Test public void testUnresolvedInput() { + new CodeGen("return 0;").driver(CodeGen.Phase.Opto); + Node input = new ConstantNode(TypeInteger.TRUE); + MinusNode minus = new MinusNode(input); + assertSame(TypeInteger.constant(-1),minus.compute()); + input._type = Type.BOTTOM; + assertSame(Type.BOTTOM,minus.compute()); + minus.setMode((byte)1); + assertSame(Type.BOTTOM,minus.compute()); + } + + @Test public void testRecursiveFloat() { + CodeGen code = new CodeGen("val _neg = { int x -> x ? -_neg(x-1) : 1.0; }; return _neg(arg);") + .driver(CodeGen.Phase.TypeCheck); + for( int i=0; i<4; i++ ) + assertEquals((i&1)==0 ? "1.0" : "-1.0",Eval2.eval(code,i)); + } +} -- cgit v1.2.3