# HG changeset patch # User Doug Simon # Date 1397422523 -7200 # Node ID 976c6cb2bf69723890ef42fba57df9214893b3e9 # Parent 199eecd74c1278ba2cf45094357564d4e1d3a6df HSAIL: added tests using Java8 lambdas Contributed-by: Tom Deneau diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/GraalKernelTester.java --- a/graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/GraalKernelTester.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/GraalKernelTester.java Sun Apr 13 22:55:23 2014 +0200 @@ -103,8 +103,38 @@ return (canGenerateCalls && canExecuteCalls); } + private static boolean supportsObjectAllocation() { + return true; + } + + /** + * Determines if the runtime supports object allocation in HSAIL code. + */ public boolean canHandleObjectAllocation() { - return true; + return supportsObjectAllocation() && canDeoptimize(); + } + + /** + * Determines if the runtime supports deoptimization in HSAIL code. + */ + public boolean canDeoptimize() { + return getHSAILBackend().getRuntime().getConfig().useHSAILDeoptimization; + } + + /** + * Determines if the runtime supports {@link VirtualObject}s in {@link DebugInfo} associated + * with HSAIL code. + */ + public boolean canHandleDeoptVirtualObjects() { + return false; + } + + /** + * Determines if the runtime supports {@link StackSlot}s in {@link DebugInfo} associated with + * HSAIL code. + */ + public boolean canHandleDeoptStackSlots() { + return false; } /** @@ -164,5 +194,4 @@ super.testGeneratedHsailUsingLambdaMethod(); } } - } diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/KernelTester.java --- a/graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/KernelTester.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/KernelTester.java Sun Apr 13 22:55:23 2014 +0200 @@ -416,9 +416,9 @@ } /** - * The dispatchLambdaKernel dispatches the lambda version of a kernel where the "kernel" is for - * the xxx$$Lambda.accept method in the wrapper for the lambda. Note that the useLambdaMethod - * boolean provides a way of actually invoking dispatchLambdaMethodKernel from this API. + * Dispatches the lambda version of a kernel where the "kernel" is for the xxx$$Lambda.accept + * method in the wrapper for the lambda. Note that the useLambdaMethod boolean provides a way of + * actually invoking dispatchLambdaMethodKernel from this API. */ public void dispatchLambdaKernel(int range, MyIntConsumer consumer) { if (useLambdaMethod) { diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/BasicHSAILTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/BasicHSAILTest.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/BasicHSAILTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -30,6 +30,7 @@ import com.oracle.graal.compiler.test.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; +import com.oracle.graal.debug.internal.*; import com.oracle.graal.gpu.*; import com.oracle.graal.hotspot.hsail.*; import com.oracle.graal.hsail.*; @@ -343,12 +344,22 @@ } private void test(final String snippet) { - try (Scope s = Debug.scope("HSAILCodeGen")) { - Method method = getMethod(snippet); - ExternalCompilationResult hsailCode = getBackend().compileKernel(getMetaAccess().lookupJavaMethod(method), false); - Debug.log("HSAIL code generated for %s:%n%s", snippet, hsailCode.getCodeString()); - } catch (Throwable e) { - throw Debug.handle(e); + DebugConfig debugConfig = DebugScope.getConfig(); + DebugConfig noInterceptConfig = new DelegatingDebugConfig(debugConfig) { + @Override + public RuntimeException interceptException(Throwable e) { + return null; + } + }; + + try (DebugConfigScope dcs = Debug.setConfig(noInterceptConfig)) { + try (Scope s = Debug.scope("HSAILCodeGen")) { + Method method = getMethod(snippet); + ExternalCompilationResult hsailCode = getBackend().compileKernel(getMetaAccess().lookupJavaMethod(method), false); + Debug.log("HSAIL code generated for %s:%n%s", snippet, hsailCode.getCodeString()); + } catch (Throwable e) { + throw Debug.handle(e); + } } } diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/BoundsCatchBase.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/BoundsCatchBase.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/BoundsCatchBase.java Sun Apr 13 22:55:23 2014 +0200 @@ -56,7 +56,7 @@ @Override protected boolean supportsRequiredCapabilities() { - return getHSAILBackend().getRuntime().getConfig().useHSAILDeoptimization; + return canDeoptimize(); } @Override diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/FloatSqrtTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/FloatSqrtTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test; + +import org.junit.*; + +import com.oracle.graal.compiler.hsail.test.infra.*; + +/** + * Tests floating point square root. + */ +public class FloatSqrtTest extends GraalKernelTester { + + static final int size = 64; + float[] input = new float[size]; + @Result float[] output = new float[size]; + { + for (int i = 0; i < size; i++) { + input[i] = i; + output[i] = -1.0f; + } + + } + + public static void run(float[] input1, float[] output1, int gid) { + output1[gid] = (float) Math.sqrt(input1[gid]); + } + + @Override + public void runTest() { + dispatchMethodKernel(size, input, output); + } + + @Test + public void test() { + testGeneratedHsail(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/InstanceOfTwoLevelTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/InstanceOfTwoLevelTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +public class InstanceOfTwoLevelTest extends GraalKernelTester { + + static final int NUM = 20; + + static abstract class Shape { + abstract public float getArea(); + } + + static class Ellipse extends Shape { + private float major; + private float minor; + + Ellipse(float major, float minor) { + this.major = major; + this.minor = minor; + } + + public float getEccentricity() { + float a = major / 2; + float b = minor / 2; + return (float) Math.sqrt(1 - (b / a) * (b / a)); + } + + @Override + public float getArea() { + float a = major / 2; + float b = minor / 2; + return (float) (Math.PI * a * b); + } + } + + static class Circle extends Ellipse { + Circle(float r) { + super(2 * r, 2 * r); + } + } + + static class Square extends Shape { + private float len; + + Square(float _len) { + len = _len; + } + + @Override + public float getArea() { + return len * len; + } + } + + @Result public float[] outArray = new float[NUM]; + public Object[] inShapeArray = new Object[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + switch (i % 4) { + case 0: + inShapeArray[i] = new Circle(i + 1); + break; + case 1: + inShapeArray[i] = new Square(i + 1); + break; + case 2: + inShapeArray[i] = new Ellipse(i + 1, i + 2); + break; + case 3: + inShapeArray[i] = new Object(); + break; + } + outArray[i] = -i; + } + } + + public void run(int gid) { + outArray[gid] = (inShapeArray[gid] instanceof Shape ? 1.0f : 2.0f); + } + + @Override + public void runTest() { + setupArrays(); + + dispatchMethodKernel(NUM); + } + + @Test + public void test() { + testGeneratedHsail(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/NestedStaticCallTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/NestedStaticCallTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.compiler.hsail.test; + +import org.junit.*; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Tests direct method calls. + */ +public class NestedStaticCallTest extends GraalKernelTester { + + static final int width = 768; + static final int height = width; + private int iterations = 100; + static final int range = width * height; + @Result public float[] outArray = new float[range]; + + public static int a(int i) { + if (i < 2) { + return b(i); + } else { + return i; + } + } + + public static int b(int i) { + if (i < 90) { + return c(i) + i; + } else { + return d(i) - i; + } + } + + public static int c(int i) { + + return d(i) + 5; + } + + public static int d(int i) { + + return e(i) + 10; + } + + public static int e(int i) { + return 52 + i; + } + + public void run(int gid) { + for (int i = 0; i < iterations; i++) { + outArray[gid] = a(gid) + i; + } + } + + @Override + public void runTest() { + dispatchMethodKernel(range); + } + + @Test + public void test() { + testGeneratedHsail(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/NestedVirtualCallTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/NestedVirtualCallTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.compiler.hsail.test; + +import org.junit.*; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Tests direct method calls. + */ +public class NestedVirtualCallTest extends GraalKernelTester { + + static final int width = 768; + static final int height = width; + private int iterations = 100; + static final int range = width * height; + @Result public float[] outArray = new float[range]; + + public int a(int i) { + if (i < 2) { + return b(i); + } else { + return i; + } + } + + public int b(int i) { + if (i < 90) { + return c(i) + i; + } else { + return d(i) - i; + } + } + + public int c(int i) { + + return d(i) + 5; + } + + public int d(int i) { + + return e(i) + 10; + } + + public int e(int i) { + return 52 + i; + } + + public void run(int gid) { + for (int i = 0; i < iterations; i++) { + outArray[gid] = a(gid) + i; + } + } + + @Override + public void runTest() { + dispatchMethodKernel(range); + } + + @Test + public void test() { + super.testGeneratedHsail(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/SingleExceptionTestBase.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/SingleExceptionTestBase.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/SingleExceptionTestBase.java Sun Apr 13 22:55:23 2014 +0200 @@ -37,7 +37,7 @@ @Override protected boolean supportsRequiredCapabilities() { - return getHSAILBackend().getRuntime().getConfig().useHSAILDeoptimization; + return canDeoptimize(); } void recordException(Exception e) { diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticCallTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticCallTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.compiler.hsail.test; + +import org.junit.*; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Tests direct method calls. + */ +public class StaticCallTest extends GraalKernelTester { + + static final int width = 768; + static final int height = width; + private int iterations = 100; + static final int range = width * height; + @Result public float[] outArray = new float[range]; + + public static int foo(int gid, int i) { + if (gid < 2) { + return bar(gid, i); + } else { + return gid + i; + } + } + + public static int bar(int gid, int i) { + if (gid < 90) { + return gid + i; + } else { + return gid - i; + } + } + + public void run(int gid) { + for (int i = 0; i < iterations; i++) { + outArray[gid] = bar(gid, i); + } + } + + @Override + public void runTest() { + dispatchMethodKernel(range); + } + + @Test + public void test() { + super.testGeneratedHsail(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMandelBoundsCheckTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMandelBoundsCheckTest.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMandelBoundsCheckTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -23,8 +23,6 @@ package com.oracle.graal.compiler.hsail.test; -import static org.junit.Assume.*; - import org.junit.*; /** @@ -84,7 +82,6 @@ @Test public void test() { - assumeTrue(runningOnSimulator()); testGeneratedHsail(); } } diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMandelTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMandelTest.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMandelTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -23,10 +23,7 @@ package com.oracle.graal.compiler.hsail.test; -import static org.junit.Assume.*; - import org.junit.*; - import com.oracle.graal.compiler.hsail.test.infra.*; /** @@ -82,7 +79,6 @@ @Test public void test() { - assumeTrue(runningOnSimulator()); testGeneratedHsail(); } } diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticNBodyCallTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticNBodyCallTest.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticNBodyCallTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -23,8 +23,6 @@ package com.oracle.graal.compiler.hsail.test; -import static org.junit.Assume.*; - import org.junit.*; /** @@ -39,7 +37,6 @@ @Override public void runTest() { - assumeTrue(aggressiveInliningEnabled() || canHandleHSAILMethodCalls()); super.runTest(); } diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StringContainsAcceptTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StringContainsAcceptTest.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StringContainsAcceptTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -23,8 +23,6 @@ package com.oracle.graal.compiler.hsail.test; -import static org.junit.Assume.*; - import org.junit.*; /** @@ -42,7 +40,6 @@ @Override public void runTest() { - assumeTrue(aggressiveInliningEnabled() || canHandleHSAILMethodCalls()); setupArrays(); dispatchMethodKernel(NUM); diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StringSwitchTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StringSwitchTest.java Sun Apr 13 22:53:59 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StringSwitchTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -23,11 +23,9 @@ package com.oracle.graal.compiler.hsail.test; -import static org.junit.Assume.*; - import org.junit.*; -import com.oracle.graal.compiler.hsail.test.infra.*; +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; /** * Tests switch statement with String literal keys. @@ -121,14 +119,8 @@ } } - /** - * Tests the HSAIL code generated for this unit test by comparing the result of executing this - * code with the result of executing a sequential Java version of this unit test. - */ @Test public void test() { - // This test is only run if inlining is enabled since it requires method call support. - assumeTrue(aggressiveInliningEnabled() || canHandleHSAILMethodCalls()); super.testGeneratedHsail(); } diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/VolatileIntTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/VolatileIntTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.compiler.hsail.test; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * + * @author ecaspole + */ +public class VolatileIntTest extends GraalKernelTester { + + static final int num = 20; + @Result protected int[] outArray = new int[num]; + + volatile int theVolatileInt = 42; + + /** + * The static "kernel" method we will be testing. By convention the gid is the last parameter. + * + */ + public void run(int[] out, int[] ina, int[] inb, int gid) { + + // Note these array ops are not really part of the test results + int x = theVolatileInt; + + out[gid] = ina[gid] + inb[gid]; + + theVolatileInt = x; + } + + @Test + public void test() { + super.testGeneratedHsail(); + } + + void setupArrays(int[] in, int[] in2) { + for (int i = 0; i < num; i++) { + in[i] = 1; + in2[i] = 2; + outArray[i] = 0; + } + } + + @Override + public void runTest() { + int[] inArray = new int[num]; + int[] inArray2 = new int[num]; + setupArrays(inArray, inArray2); + + dispatchMethodKernel(num, outArray, inArray, inArray2); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ArrayFieldAccessTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ArrayFieldAccessTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests accessing a field which is an array. + */ +public class ArrayFieldAccessTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] * 3; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ArrayListGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ArrayListGetTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.ArrayList; + +/** + * Tests calling ArrayList.get(). + */ +public class ArrayListGetTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public ArrayList inList = new ArrayList<>(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inList.add(i); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + int val = inList.get(gid); + outArray[gid] = val * val + 1; + }); + } + + // NYI emitForeignCall charAlignedDisjointArraycopy + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ArrayListStreamTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ArrayListStreamTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import java.util.ArrayList; +import java.util.stream.Stream; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + +/** + * Tests using ArrayLists as streams. + */ +public class ArrayListStreamTest { + + // Static and instance fields to test codegen for + // each type of variable + static int staticSize = 16; + final int size = staticSize; + + static int staticFactor = 3; + final int factor = staticFactor; + + class MyPoint { + + int x; + int y; + + public MyPoint(int _x, int _y) { + x = _x; + y = _y; + } + } + + public ArrayList buildMyPointInputArray() { + ArrayList inputs = new ArrayList<>(size); + + for (int i = 0; i < size; i++) { + inputs.add(new MyPoint(i, i + 1)); + } + return inputs; + } + + public int[] buildIntInputArray() { + int[] inputs = new int[size]; + + for (int i = 0; i < size; i++) { + inputs[i] = i * 4; + } + return inputs; + } + + @Test + public void testForEachObjectStreamNoCaptures() { + ArrayList inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + // Swap the values + int tmp = p.x; + p.x = p.y + factor; + p.y = tmp; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.x == (p.y + 1 + factor)); + } + } + + @Test + public void testForEachObjectStreamNoCapturesUseStatic() { + ArrayList inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + // Swap the values + int tmp = p.x; + p.x = p.y + staticFactor; + p.y = tmp; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.x == (p.y + 1 + staticFactor)); + } + } + + @Test + public void testForEachObjectStreamOneCapture() { + int[] data = buildIntInputArray(); + ArrayList inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x]; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x]); + } + + } + + @Test + public void testForEachObjectStreamOneCaptureUseStatic() { + int[] data = buildIntInputArray(); + ArrayList inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x] + staticFactor; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == (data[p.x] + +staticFactor)); + } + + } + + @Test + public void testForEachObjectStreamTwoCaptures() { + int[] data = buildIntInputArray(); + int[] data2 = buildIntInputArray(); + ArrayList inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x] + data2[p.x]; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x] + data2[p.x]); + } + + } + + @Test + public void testForEachObjectStreamTwoCapturesUseStatic() { + int[] data = buildIntInputArray(); + int[] data2 = buildIntInputArray(); + ArrayList inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x] + data2[p.x] + staticFactor; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x] + data2[p.x] + staticFactor); + } + + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntAddAndGetGidTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntAddAndGetGidTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; + +/** + * Tests {@link AtomicInteger#addAndGet(int)} with a variable delta. + */ +public class AtomicIntAddAndGetGidTest extends GraalKernelTester { + + static final int NUM = 20; + public int[] outArray = new int[NUM]; + @Result public int[] gaps = new int[NUM]; + AtomicInteger atomicInt; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + atomicInt = new AtomicInteger(0); + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicInt.addAndGet(gid); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + System.out.print("outArray: "); + for (int val : outArray) { + System.out.print(val + ", "); + } + System.out.println(); + // create array of gaps + gaps[0] = outArray[0] - 0; + for (int i = 1; i < NUM; i++) { + gaps[i] = outArray[i] - outArray[i - 1]; + } + Arrays.sort(gaps); + + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntAddAndGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntAddAndGetTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; + +/** + * Tests {@link AtomicInteger#addAndGet(int)} with the delta being a constant. + */ +public class AtomicIntAddAndGetTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + AtomicInteger atomicInt = new AtomicInteger(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicInt.addAndGet(0x7); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntDecAndGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntDecAndGetTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; + +/** + * Tests {@link AtomicInteger#decrementAndGet()}. + */ +public class AtomicIntDecAndGetTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + AtomicInteger atomicInt = new AtomicInteger(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicInt.decrementAndGet(); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntGetAndAddTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntGetAndAddTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; + +/** + * Tests {@link AtomicInteger#getAndAdd(int)} with the delta being a constant. + */ +public class AtomicIntGetAndAddTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + AtomicInteger atomicInt = new AtomicInteger(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicInt.getAndAdd(0x7); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntGetAndDecTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntGetAndDecTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; + +/** + * Tests {@link AtomicInteger#getAndDecrement()}. + */ +public class AtomicIntGetAndDecTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + AtomicInteger atomicInt = new AtomicInteger(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicInt.getAndDecrement(); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntGetAndIncTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntGetAndIncTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; + +/** + * Tests {@link AtomicInteger#getAndIncrement()}. + */ +public class AtomicIntGetAndIncTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + AtomicInteger atomicInt = new AtomicInteger(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicInt.getAndIncrement(); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntIncAndGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicIntIncAndGetTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; + +/** + * Tests {@link AtomicInteger#incrementAndGet()}. + */ +public class AtomicIntIncAndGetTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + AtomicInteger atomicInt = new AtomicInteger(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicInt.incrementAndGet(); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongAddAndGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongAddAndGetTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +import org.junit.Test; + +import java.util.concurrent.atomic.*; +import java.util.Arrays; + +/** + * Tests {@link AtomicLong#addAndGet(long)} with the delta being a constant. + */ +public class AtomicLongAddAndGetTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + AtomicLong atomicLong = new AtomicLong(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicLong.addAndGet(0x7); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongGetAndAddTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongGetAndAddTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicLong; +import java.util.Arrays; + +/** + * Tests {@link AtomicLong#getAndAdd(long)} with the delta being a constant. + */ +public class AtomicLongGetAndAddTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + AtomicLong atomicLong = new AtomicLong(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicLong.getAndAdd(0x7); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongGetAndIncTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongGetAndIncTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicLong; +import java.util.Arrays; + +/** + * Tests {@link AtomicLong#getAndIncrement()}. + */ +public class AtomicLongGetAndIncTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + AtomicLong atomicLong = new AtomicLong(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicLong.getAndIncrement(); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongIncAndGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/AtomicLongIncAndGetTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.concurrent.atomic.AtomicLong; +import java.util.Arrays; + +/** + * Tests {@link AtomicLong#incrementAndGet()}. + */ +public class AtomicLongIncAndGetTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + AtomicLong atomicLong = new AtomicLong(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = atomicLong.incrementAndGet(); + }); + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/BigIntegerSquaredTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/BigIntegerSquaredTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.math.BigInteger; + +/** + * Tests squaring a BigInteger. + */ +public class BigIntegerSquaredTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public BigInteger[] inArray = new BigInteger[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new BigInteger(Integer.toString(i)); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid].multiply(inArray[gid]).intValue(); + }); + } + + @Override + protected boolean supportsRequiredCapabilities() { + // recursive calls + return (canHandleHSAILMethodCalls()); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Body.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Body.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * A Body object derived from Vec3 used in NBody tests. + */ +public class Body extends Vec3 { + + public Body(float _x, float _y, float _z, float _m) { + super(_x, _y, _z); + m = _m; + v = new Vec3(0, 0, 0); + } + + float m; + Vec3 v; + + public float getX() { + return x; + } + + public float getY() { + return y; + } + + public float getZ() { + return z; + } + + public float getVx() { + return v.x; + } + + public float getVy() { + return v.y; + } + + public float getVz() { + return v.z; + } + + public float getM() { + return m; + } + + public void setM(float _m) { + m = _m; + } + + public void setX(float _x) { + x = _x; + } + + public void setY(float _y) { + y = _y; + } + + public void setZ(float _z) { + z = _z; + } + + public void setVx(float _vx) { + v.x = _vx; + } + + public void setVy(float _vy) { + v.y = _vy; + } + + public void setVz(float _vz) { + v.z = _vz; + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof Body)) { + return false; + } + Body oth = (Body) other; + return (oth.x == x && oth.y == y && oth.z == z && oth.m == m && v.equals(oth.v)); + } + + @Override + public int hashCode() { + // TODO Auto-generated method stub + return super.hashCode(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ByteArrayTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ByteArrayTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests reading from a byte array. + */ +public class ByteArrayTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public byte[] inArray = new byte[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = (byte) ((i + 1) * (i % 3 == 0 ? 1 : -1)); + outArray[i] = 99; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/CountMatchesBase.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/CountMatchesBase.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Base class for tests that use Apache StringUtils.countMatches(). + */ +public abstract class CountMatchesBase extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public String[] inArray = new String[NUM]; + + void setupArrays() { + char[] chars = new char[100]; + for (int i = 0; i < chars.length; i++) { + chars[i] = (char) ('A' + (i % 10)); + } + for (int i = 0; i < NUM; i++) { + inArray[i] = new String(chars, i, 40); + } + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/DoubleFieldAccessTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/DoubleFieldAccessTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests accessing a double field. + */ +public class DoubleFieldAccessTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public double[] outArray = new double[NUM]; + public double[] inArray = new double[NUM]; + + double doubleField = 7.0; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + double[] out = outArray; + double[] in = inArray; + dispatchLambdaKernel(NUM, (gid) -> { + out[gid] = in[gid] + doubleField; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FibRecursionTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FibRecursionTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests a recursive method invocation. + */ +public class FibRecursionTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + int fib(int n) { + return (n <= 2 ? 1 : fib(n - 2) + fib(n - 1)); + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = fib(inArray[gid]); + }); + } + + @Override + protected boolean supportsRequiredCapabilities() { + // recursive calls + return (canHandleHSAILMethodCalls()); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixBase.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixBase.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Base class for 2D float matrix tests. + */ +public abstract class Float2DMatrixBase extends GraalKernelTester { + + float[][] matrixA; + float[][] matrixB; + @Result float[][] outMatrix; + + public void setupArrays(int range) { + matrixA = new float[range][]; + matrixB = new float[range][]; + outMatrix = new float[range][]; + for (int j = 0; j < range; j++) { + matrixA[j] = new float[range]; + matrixB[j] = new float[range]; + outMatrix[j] = new float[range]; + for (int k = 0; k < range; k++) { + matrixA[j][k] = (j + k) % 7; + matrixB[j][k] = (j + k + 1) % 8; + } + } + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixMultiplyRangeFinalTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixMultiplyRangeFinalTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests 2D float matrix multiply with range being final. + */ +public class Float2DMatrixMultiplyRangeFinalTest extends Float2DMatrixBase { + + static final int range = 6; + + @Override + public void runTest() { + setupArrays(range); + + dispatchLambdaKernel(range, (gid) -> { + for (int j = 0; j < range; j++) { + float sum = 0; + for (int k = 0; k < range; k++) { + sum += (matrixA[gid][k] * matrixB[k][j]); + } + outMatrix[gid][j] = sum; + } + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixMultiplySingleOutTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixMultiplySingleOutTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests 2D float matrix multiply with each workitem outputting one entry of the result matrix. + */ +public class Float2DMatrixMultiplySingleOutTest extends Float2DMatrixBase { + + @Override + public void runTest() { + int range = 20; + setupArrays(range); + + dispatchLambdaKernel(range * range, (gid) -> { + int i = gid % range; + int j = gid / range; + float sum = 0; + for (int k = 0; k < range; k++) { + sum += (matrixA[i][k] * matrixB[k][j]); + } + outMatrix[i][j] = sum; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixMultiplyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Float2DMatrixMultiplyTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests 2D float matrix multiply with each workitem outputting one row of the result matrix. + */ +public class Float2DMatrixMultiplyTest extends Float2DMatrixBase { + + @Override + public void runTest() { + int range = 20; + setupArrays(range); + + dispatchLambdaKernel(range, (gid) -> { + for (int j = 0; j < range; j++) { + float sum = 0; + for (int k = 0; k < range; k++) { + sum += (matrixA[gid][k] * matrixB[k][j]); + } + outMatrix[gid][j] = sum; + } + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FloatCondMoveTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FloatCondMoveTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests conditional move of a float value. + */ +public class FloatCondMoveTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public float[] outArray = new float[NUM]; + public float[] inArray = new float[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = (gid > 9 ? 2.0f : 3.0f); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FloatFieldAccessTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FloatFieldAccessTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests accessing a float field. + */ +public class FloatFieldAccessTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public float[] outArray = new float[NUM]; + public int[] inArray = new int[NUM]; + + float floatField = 7f; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + float[] out = outArray; + int[] in = inArray; + dispatchLambdaKernel(NUM, (gid) -> { + out[gid] = in[gid] + floatField; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FloatFieldWriteTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/FloatFieldWriteTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests writing a float field. + */ +public class FloatFieldWriteTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Body[] bodyArray = new Body[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + Body b = new Body(i, i + 1, -i, 0); + bodyArray[i] = b; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + Body b = bodyArray[gid]; + b.z = b.x * b.y; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ForEachToGraalTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ForEachToGraalTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,311 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import java.util.stream.IntStream; + +import static org.junit.Assert.*; +import org.junit.Test; +import java.util.Arrays; +import java.util.ArrayList; + +/** + * Several tests for the Sumatra APIs. + */ +public class ForEachToGraalTest { + + // Static and instance fields to test codegen for + // each type of variable + static int staticSize = 16; + final int size = staticSize; + + static int printSize = 4; + + static int staticFactor = 3; + final int factor = staticFactor; + + class MyPoint { + + int x; + int y; + + public MyPoint(int _x, int _y) { + x = _x; + y = _y; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + } + + public MyPoint[] buildMyPointInputArray() { + MyPoint[] inputs = new MyPoint[size]; + + for (int i = 0; i < size; i++) { + inputs[i] = new MyPoint(i, i + 1); + } + return inputs; + } + + public int[] buildIntInputArray() { + int[] inputs = new int[size]; + + for (int i = 0; i < size; i++) { + inputs[i] = i * 4; + } + return inputs; + } + + @Test + public void testForEachIntRangeNoCaptures() { + int[] dest = new int[size]; + IntStream range = IntStream.range(0, dest.length).parallel(); + + // System.out.println("testForEachIntRangeNoCaptures"); + + range.forEach(p -> { + dest[p] = p * factor; + }); + + for (int k = 0; k < dest.length; k++) { + if (k < printSize) { + // System.out.println(k + " ... " + dest[k]); + } + assertTrue(dest[k] == k * factor); + } + } + + @Test + public void testForEachIntRangeNoCapturesUseStatic() { + int[] dest = new int[size]; + IntStream range = IntStream.range(0, dest.length).parallel(); + + // System.out.println("testForEachIntRangeNoCapturesUseStatic"); + + range.forEach(p -> { + dest[p] = p * staticFactor; + }); + + for (int k = 0; k < dest.length; k++) { + if (k < printSize) { + // System.out.println(k + " ... " + dest[k]); + } + assertTrue(dest[k] == k * staticFactor); + } + } + + @Test + public void testForEachIntRangeOneCapture() { + int[] dest = new int[size]; + IntStream range = IntStream.range(0, dest.length).parallel(); + int[] data = buildIntInputArray(); + + range.forEach(p -> { + dest[p] = p * factor + data[p]; + }); + + for (int k = 0; k < dest.length; k++) { + if (k < printSize) { + // System.out.println(k + " ... " + dest[k]); + } + assertTrue(dest[k] == k * 3 + data[k]); + } + + } + + @Test + public void testForEachIntRangeOneCaptureUseStatic() { + int[] dest = new int[size]; + IntStream range = IntStream.range(0, dest.length).parallel(); + int[] data = buildIntInputArray(); + + range.forEach(p -> { + dest[p] = p * staticFactor + data[p]; + }); + + for (int k = 0; k < dest.length; k++) { + // System.out.println( k + " ... " + dest[k] ); + assertTrue(dest[k] == k * staticFactor + data[k]); + } + + } + + @Test + public void testForEachObjectStreamNoCaptures() { + MyPoint[] inputs = buildMyPointInputArray(); + + Arrays.stream(inputs).parallel().forEach(p -> { + // Swap the values + int tmp = p.x; + p.x = p.y + factor; + p.y = tmp; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs[k]; + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.x == (p.y + 1 + factor)); + } + } + + @Test + public void testForEachObjectStreamNoCapturesUseStatic() { + MyPoint[] inputs = buildMyPointInputArray(); + + Arrays.stream(inputs).parallel().forEach(p -> { + // Swap the values + int tmp = p.x; + p.x = p.y + staticFactor; + p.y = tmp; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs[k]; + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.x == (p.y + 1 + staticFactor)); + } + } + + @Test + public void testForEachObjectStreamOneCapture() { + MyPoint[] inputs = buildMyPointInputArray(); + int[] data = buildIntInputArray(); + + Arrays.stream(inputs).parallel().forEach(p -> { + p.y = data[p.x]; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs[k]; + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x]); + } + + } + + @Test + public void testForEachObjectStreamOneCaptureUseStatic() { + MyPoint[] inputs = buildMyPointInputArray(); + int[] data = buildIntInputArray(); + + Arrays.stream(inputs).parallel().forEach(p -> { + p.y = data[p.x] + staticFactor; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs[k]; + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == (data[p.x] + +staticFactor)); + } + + } + + @Test + public void testForEachObjectStreamTwoCaptures() { + MyPoint[] inputs = buildMyPointInputArray(); + int[] data = buildIntInputArray(); + int[] data2 = buildIntInputArray(); + + Arrays.stream(inputs).parallel().forEach(p -> { + p.y = data[p.x] + data2[p.x]; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs[k]; + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x] + data2[p.x]); + } + + } + + @Test + public void testForEachObjectStreamTwoCapturesUseStatic() { + MyPoint[] inputs = buildMyPointInputArray(); + int[] data = buildIntInputArray(); + int[] data2 = buildIntInputArray(); + + Arrays.stream(inputs).parallel().forEach(p -> { + p.y = data[p.x] + data2[p.x] + staticFactor; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs[k]; + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x] + data2[p.x] + staticFactor); + } + + } + + // This test should fall back to the regular Java path if + // Graal throws NYI + @Test + public void testForEachIntRangeNoCapturesUseEscapingNew() { + MyPoint[] dest = new MyPoint[size]; + IntStream range = IntStream.range(0, dest.length).parallel(); + + range.forEach(p -> { + dest[p] = new MyPoint(p + p, p); + }); + + for (int k = 0; k < dest.length; k++) { + if (k < printSize) { + // System.out.println(k + " ... " + dest[k]); + } + assertTrue(dest[k].getX() == (k + k)); + } + } + + // This test should fall back to the regular Java path if + // Graal throws NYI + @Test + public void testForEachIntRangeNoCapturesUseCall() { + MyPoint[] dest = new MyPoint[size]; + ArrayList list = new ArrayList<>(size); + IntStream range = IntStream.range(0, dest.length).parallel(); + + for (int i = 0; i < dest.length; i++) { + list.add(new MyPoint(i + i, i)); + } + + range.forEach(p -> { + dest[p] = list.get(p); + }); + + for (int k = 0; k < dest.length; k++) { + if (k < printSize) { + // System.out.println(k + " ... " + dest[k]); + } + assertTrue(dest[k].getX() == (k + k)); + } + } + // public static void main(String args[]) { + // (new ForEachToGraalTest()).testForEachIntRange(); + // } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/HashMapGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/HashMapGetTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import java.util.HashMap; +import org.junit.Test; + +/** + * Tests calling HashMap.get(). + */ +public class HashMapGetTest extends GraalKernelTester { + + static final int NUM = 20; + + static class MyObj { + public MyObj(int id) { + this.id = id; + } + + int id; + + public int getId() { + return id; + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof MyObj)) { + return false; + } + MyObj othobj = (MyObj) other; + return (othobj.id == this.id); + } + + @Override + public int hashCode() { + return 43 * (id % 7); + } + + } + + @Result public MyObj[] outArray = new MyObj[NUM]; + MyObj[] inArray = new MyObj[NUM]; + public HashMap inMap = new HashMap<>(); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + MyObj myobj = new MyObj(i); + inMap.put(myobj, new MyObj(i * 3)); + inArray[NUM - 1 - i] = myobj; + outArray[i] = null; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inMap.get(inArray[gid]); + }); + } + + // ForeignCall to Invoke#Direct#get + // not inlining HashMapGetTest.lambda$38@15: java.util.HashMap.get(Object):Object (20 bytes): no + // type profile exists + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void test() { + testGeneratedHsail(); + } + + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceNBodyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceNBodyTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import java.util.*; +import org.junit.*; +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Test intstream lambda version of nbody. + */ +public class InstanceNBodyTest extends GraalKernelTester { + + static final int bodies = 1024; + static final float delT = .005f; + static final float espSqr = 1.0f; + static final float mass = 5f; + static final int width = 768; + static final int height = 768; + + @Result float[] in_xyz = new float[bodies * 3]; // positions xy and z of bodies + + @Result float[] out_xyz = new float[bodies * 3]; // positions xy and z of bodies + + @Result float[] in_vxyz = new float[bodies * 3]; // velocity component of x,y and z of + // bodies + + @Result float[] out_vxyz = new float[bodies * 3]; + + static float[] seed_xyz = new float[bodies * 3]; + static { + final float maxDist = width / 4; + for (int body = 0; body < (bodies * 3); body += 3) { + final float theta = (float) (Math.random() * Math.PI * 2); + final float phi = (float) (Math.random() * Math.PI * 2); + final float radius = (float) (Math.random() * maxDist); + seed_xyz[body + 0] = (float) (radius * Math.cos(theta) * Math.sin(phi)) + width / 2; + seed_xyz[body + 1] = (float) (radius * Math.sin(theta) * Math.sin(phi)) + height / 2; + seed_xyz[body + 2] = (float) (radius * Math.cos(phi)); + } + } + + @Override + public void runTest() { + System.arraycopy(seed_xyz, 0, in_xyz, 0, seed_xyz.length); + Arrays.fill(out_xyz, 0f); + Arrays.fill(out_vxyz, 0f); + Arrays.fill(in_vxyz, 0f); + + // no local copies to make it an instance lambda + + dispatchLambdaKernel(bodies, (gid) -> { + final int count = bodies * 3; + final int globalId = gid * 3; + + float accx = 0.f; + float accy = 0.f; + float accz = 0.f; + for (int i = 0; i < count; i += 3) { + final float dx = in_xyz[i + 0] - in_xyz[globalId + 0]; + final float dy = in_xyz[i + 1] - in_xyz[globalId + 1]; + final float dz = in_xyz[i + 2] - in_xyz[globalId + 2]; + final float invDist = (float) (1.0 / (Math.sqrt((dx * dx) + (dy * dy) + (dz * dz) + espSqr))); + accx += mass * invDist * invDist * invDist * dx; + accy += mass * invDist * invDist * invDist * dy; + accz += mass * invDist * invDist * invDist * dz; + } + accx *= delT; + accy *= delT; + accz *= delT; + out_xyz[globalId + 0] = in_xyz[globalId + 0] + (in_vxyz[globalId + 0] * delT) + (accx * .5f * delT); + out_xyz[globalId + 1] = in_xyz[globalId + 1] + (in_vxyz[globalId + 1] * delT) + (accy * .5f * delT); + out_xyz[globalId + 2] = in_xyz[globalId + 2] + (in_vxyz[globalId + 2] * delT) + (accz * .5f * delT); + + out_vxyz[globalId + 0] = in_vxyz[globalId + 0] + accx; + out_vxyz[globalId + 1] = in_vxyz[globalId + 1] + accy; + out_vxyz[globalId + 2] = in_vxyz[globalId + 2] + accz; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOfNullTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOfNullTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests instanceof operator on a null object. + */ +public class InstanceOfNullTest extends VirtualCallTest { + + @Override + public void runTest() { + setupArrays(); + // change some of the inShapes to null + for (int i = 0; i < NUM; i++) { + if (i % 3 == 0) + inShapeArray[i] = null; + } + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = (inShapeArray[gid] instanceof Circle ? 1.0f : 2.0f); + }); + } + + @Override + @Test + public void test() { + testGeneratedHsail(); + } + + @Override + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOfTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOfTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests instanceof operator. + */ +public class InstanceOfTest extends VirtualCallTest { + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = (inShapeArray[gid] instanceof Circle ? 1.0f : 2.0f); + }); + } + + @Override + @Test + public void test() { + testGeneratedHsail(); + } + + @Override + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOopNBodyAccTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOopNBodyAccTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.*; +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests Oop NBody calling a method that returns acceleration. + */ +public class InstanceOopNBodyAccTest extends GraalKernelTester { + + static final int bodies = 1024; + static final float delT = .005f; + static final float espSqr = 1.0f; + static final float mass = 5f; + static final int width = 768; + static final int height = 768; + + static class Body extends com.oracle.graal.compiler.hsail.test.lambda.Body { + + public Body(float x, float y, float z, float m) { + super(x, y, z, m); + } + + public Vec3 computeAcc(Body[] in_bodies, float espSqr1, float delT1) { + float accx = 0.f; + float accy = 0.f; + float accz = 0.f; + float myPosx = x; + float myPosy = y; + float myPosz = z; + + for (int b = 0; b < in_bodies.length; b++) { + float dx = in_bodies[b].getX() - myPosx; + float dy = in_bodies[b].getY() - myPosy; + float dz = in_bodies[b].getZ() - myPosz; + float invDist = 1.0f / (float) Math.sqrt((dx * dx) + (dy * dy) + (dz * dz) + espSqr1); + float s = in_bodies[b].getM() * invDist * invDist * invDist; + accx = accx + (s * dx); + accy = accy + (s * dy); + accz = accz + (s * dz); + } + + // now return acc as a Vec3 + return new Vec3(accx * delT1, accy * delT1, accz * delT1); + } + } + + @Result Body[] in_bodies = new Body[bodies]; + @Result Body[] out_bodies = new Body[bodies]; + + static Body[] seed_bodies = new Body[bodies]; + static { + final float maxDist = width / 4; + for (int body = 0; body < bodies; body++) { + final float theta = (float) (Math.random() * Math.PI * 2); + final float phi = (float) (Math.random() * Math.PI * 2); + final float radius = (float) (Math.random() * maxDist); + float x = (float) (radius * Math.cos(theta) * Math.sin(phi)) + width / 2; + float y = (float) (radius * Math.sin(theta) * Math.sin(phi)) + height / 2; + float z = (float) (radius * Math.cos(phi)); + seed_bodies[body] = new Body(x, y, z, mass); + } + } + + @Override + public void runTest() { + System.arraycopy(seed_bodies, 0, in_bodies, 0, seed_bodies.length); + for (int b = 0; b < bodies; b++) { + out_bodies[b] = new Body(0, 0, 0, mass); + } + // no local copies of arrays so we make it an instance lambda + + dispatchLambdaKernel(bodies, (gid) -> { + Body bin = in_bodies[gid]; + Body bout = out_bodies[gid]; + Vec3 acc = bin.computeAcc(in_bodies, espSqr, delT); + + float myPosx = bin.getX(); + float myPosy = bin.getY(); + float myPosz = bin.getZ(); + bout.setX(myPosx + (bin.getVx() * delT) + (acc.x * .5f * delT)); + bout.setY(myPosy + (bin.getVy() * delT) + (acc.y * .5f * delT)); + bout.setZ(myPosz + (bin.getVz() * delT) + (acc.z * .5f * delT)); + + bout.setVx(bin.getVx() + acc.x); + bout.setVy(bin.getVy() + acc.y); + bout.setVz(bin.getVz() + acc.z); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOopNBodyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/InstanceOopNBodyTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.*; +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Tests OopStream NBody as an instance lambda. + */ +public class InstanceOopNBodyTest extends GraalKernelTester { + + static final int bodies = 1024; + static final float delT = .005f; + static final float espSqr = 1.0f; + static final float mass = 5f; + static final int width = 768; + static final int height = 768; + + @Result Body[] in_bodies = new Body[bodies]; + + @Result Body[] out_bodies = new Body[bodies]; + + static Body[] seed_bodies = new Body[bodies]; + static { + final float maxDist = width / 4; + for (int body = 0; body < bodies; body++) { + final float theta = (float) (Math.random() * Math.PI * 2); + final float phi = (float) (Math.random() * Math.PI * 2); + final float radius = (float) (Math.random() * maxDist); + float x = (float) (radius * Math.cos(theta) * Math.sin(phi)) + width / 2; + float y = (float) (radius * Math.sin(theta) * Math.sin(phi)) + height / 2; + float z = (float) (radius * Math.cos(phi)); + seed_bodies[body] = new Body(x, y, z, mass); + } + } + + @Override + public void runTest() { + System.arraycopy(seed_bodies, 0, in_bodies, 0, seed_bodies.length); + for (int b = 0; b < bodies; b++) { + out_bodies[b] = new Body(0, 0, 0, mass); + } + // no local copies of arrays so we make it an instance lambda + + dispatchLambdaKernel(bodies, (gid) -> { + float accx = 0.f; + float accy = 0.f; + float accz = 0.f; + Body inb = in_bodies[gid]; + Body outb = out_bodies[gid]; + float myPosx = inb.getX(); + float myPosy = inb.getY(); + float myPosz = inb.getZ(); + + for (Body b : in_bodies) { + final float dx = b.getX() - myPosx; + final float dy = b.getY() - myPosy; + final float dz = b.getZ() - myPosz; + final float invDist = 1.0f / (float) Math.sqrt((dx * dx) + (dy * dy) + (dz * dz) + espSqr); + final float s = b.getM() * invDist * invDist * invDist; + accx = accx + (s * dx); + accy = accy + (s * dy); + accz = accz + (s * dz); + } + + accx = accx * delT; + accy = accy * delT; + accz = accz * delT; + outb.setX(myPosx + (inb.getVx() * delT) + (accx * .5f * delT)); + outb.setY(myPosy + (inb.getVy() * delT) + (accy * .5f * delT)); + outb.setZ(myPosz + (inb.getVz() * delT) + (accz * .5f * delT)); + + outb.setVx(inb.getVx() + accx); + outb.setVy(inb.getVy() + accy); + outb.setVz(inb.getVz() + accz); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntCondMoveTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntCondMoveTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests conditional move of an int value. + */ +public class IntCondMoveTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] * (gid > 9 ? 2 : 3); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntFieldAccessTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntFieldAccessTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests accessing an integer field. + */ +public class IntFieldAccessTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + int intField = 7; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + int[] out = outArray; + int[] in = inArray; + dispatchLambdaKernel(NUM, (gid) -> { + out[gid] = in[gid] + intField; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntNegateInstanceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntNegateInstanceTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests integer negation. + */ +public class IntNegateInstanceTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = 0; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = -inArray[gid]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntSquaredInstanceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntSquaredInstanceTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests squaring an integer as an instance lambda. + */ +public class IntSquaredInstanceTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] * inArray[gid] + 1; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntSquaredStaticTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntSquaredStaticTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests squaring an integer as a static lambda. + */ +public class IntSquaredStaticTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + int[] out = outArray; + int[] in = inArray; + dispatchLambdaKernel(NUM, (gid) -> { + out[gid] = in[gid] * in[gid] + 1; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntToLongTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntToLongTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests conversion an int to a long. + */ +public class IntToLongTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = ((i + 1) * (i % 3 == 0 ? 1 : -1)); + outArray[i] = 99; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntegerObjectCreateTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntegerObjectCreateTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests allocation of an Integer object. + */ +public class IntegerObjectCreateTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public Integer[] outArray = new Integer[NUM]; + public Integer[] inArray = new Integer[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + int val = inArray[gid]; + outArray[gid] = val * val + 1; + }); + } + + @Override + protected boolean supportsRequiredCapabilities() { + return canHandleObjectAllocation(); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntegerObjectReadTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/IntegerObjectReadTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests reading and unboxing of an Integer object. + */ +public class IntegerObjectReadTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public Integer[] inArray = new Integer[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + int val = inArray[gid]; + outArray[gid] = val * val + 1; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongAdderTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongAdderTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import java.util.concurrent.atomic.LongAdder; +import org.junit.Test; + +/** + * Tests calling LongAdder.add(). + */ +public class LongAdderTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long finalSum; + LongAdder adder = new LongAdder(); + + void setupArrays() { + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + adder.add(gid); + }); + + finalSum = adder.sum(); + } + + // cannot handle node: CurrentJavaThread + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void test() { + testGeneratedHsail(); + } + + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongCmpTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongCmpTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests comparing a long to a constant. + */ +public class LongCmpTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + public long[] inArray = new long[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + long val = inArray[gid]; + long result = val * val; + if (val > 9) + result++; + outArray[gid] = result; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongCondMoveTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongCondMoveTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests conditional move of a long value. + */ +public class LongCondMoveTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + public long[] inArray = new long[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] * (gid > 9 ? 0x123456789L : 0x123456780L); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongNegateInstanceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongNegateInstanceTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests negation of a long. + */ +public class LongNegateInstanceTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + public long[] inArray = new long[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = 0; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = -inArray[gid]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongSquaredInstanceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/LongSquaredInstanceTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests squaring of a long as an instance lambda. + */ +public class LongSquaredInstanceTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public long[] outArray = new long[NUM]; + public long[] inArray = new long[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] * inArray[gid] + 1; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Main.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Main.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +/** + * a place to put a direct call to a test if you don't want to go thru junit. + */ + +public class Main { + + public static void main(String[] args) { + // new StaticIntFieldAccessTest().test(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/MandelInstanceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/MandelInstanceTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests mandel as an instance lambda. + */ + +public class MandelInstanceTest extends GraalKernelTester { + + static final int WIDTH = 768; + static final int HEIGHT = WIDTH; + static final int maxIterations = 64; + + static final int RANGE = WIDTH * HEIGHT; + @Result public int[] rgb = new int[RANGE]; + int[] palette = new int[256]; + + void setupPalette(int[] in) { + for (int i = 0; i < in.length; i++) { + in[i] = i; + } + } + + @Override + public void runTest() { + setupPalette(palette); + + float x_offset = -1f; + float y_offset = 0f; + float scale = 3f; + + // call it for a range, specifying the lambda + dispatchLambdaKernel(RANGE, (gid) -> { + final int width = WIDTH; + final int height = HEIGHT; + float lx = (((gid % width * scale) - ((scale / 2) * width)) / width) + x_offset; + float ly = (((gid / width * scale) - ((scale / 2) * height)) / height) + y_offset; + + int count = 0; + float zx = lx; + float zy = ly; + float new_zx = 0f; + + // Iterate until the algorithm converges or until maxIterations are reached. + while (count < maxIterations && zx * zx + zy * zy < 8) { + new_zx = zx * zx - zy * zy + lx; + zy = 2 * zx * zy + ly; + zx = new_zx; + count++; + } + + rgb[gid] = palette[count]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/MandelStaticTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/MandelStaticTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests static lambda version of Mandel. + */ +public class MandelStaticTest extends GraalKernelTester { + + static final int WIDTH = 768; + static final int HEIGHT = WIDTH; + static final int maxIterations = 64; + + static final int RANGE = WIDTH * HEIGHT; + @Result public int[] rgb = new int[RANGE]; + + void setupPalette(int[] in) { + for (int i = 0; i < in.length; i++) { + in[i] = i; + } + } + + @Override + public void runTest() { + int[] palette = new int[256]; + setupPalette(palette); + + // since we want this to be a fully static lambda, make local copies + // of the arrays and values that will get captured by the lambda + int[] rgb1 = this.rgb; + float x_offset = -1f; + float y_offset = 0f; + float scale = 3f; + + // call it for a range, specifying lambda + dispatchLambdaKernel(RANGE, (gid) -> { + final int width = WIDTH; + final int height = HEIGHT; + float lx = (((gid % width * scale) - ((scale / 2) * width)) / width) + x_offset; + float ly = (((gid / width * scale) - ((scale / 2) * height)) / height) + y_offset; + + int count = 0; + float zx = lx; + float zy = ly; + float new_zx = 0f; + + // Iterate until the algorithm converges or until maxIterations are reached. + while (count < maxIterations && zx * zx + zy * zy < 8) { + new_zx = zx * zx - zy * zy + lx; + zy = 2 * zx * zy + ly; + zx = new_zx; + count++; + } + + rgb1[gid] = palette[count]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NewStringEqualsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NewStringEqualsTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests creating a String and calling .equals() on it. + */ +public class NewStringEqualsTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public boolean[] outArray = new boolean[NUM]; + char[] chars = new char[100]; + + void setupArrays() { + for (int i = 0; i < chars.length; i++) { + chars[i] = (char) ('A' + i); + } + for (int i = 0; i < NUM; i++) { + } + } + + @Override + public void runTest() { + setupArrays(); + String base = "ABCDEFGHIJ"; + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = new String(chars, 0, 10 + (gid % 3)).equals(base); + }); + } + + @Override + protected boolean supportsRequiredCapabilities() { + // although not escaping, seems to require object allocation support + return (canHandleObjectAllocation()); + } + + // NYI emitForeignCall charAlignedDisjointArraycopy + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void test() { + testGeneratedHsail(); + } + + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NewStringLenTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NewStringLenTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests creating a String and calling .length() on it. + */ +public class NewStringLenTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + char[] chars = new char[100]; + + void setupArrays() { + for (int i = 0; i < chars.length; i++) { + chars[i] = 'A'; + } + for (int i = 0; i < NUM; i++) { + inArray[i] = i + 10; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = Integer.toString(gid).length(); + }); + } + + @Override + protected boolean supportsRequiredCapabilities() { + // although not escaping, seems to require object allocation support + return (canHandleObjectAllocation()); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NonEscapingNewArrayTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NonEscapingNewArrayTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests creating a non-escaping array and using it. + */ +public class NonEscapingNewArrayTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public float[] outArray = new float[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + float[] ary = {gid, gid + 1, gid + 2}; + outArray[gid] = ary[0] * ary[1] * ary[2]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NonEscapingNewObjWithArrayTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NonEscapingNewObjWithArrayTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import java.util.Arrays; + +/** + * Tests non-escaping object creation and calling a method on it. + */ +public class NonEscapingNewObjWithArrayTest extends GraalKernelTester { + static final int NUM = 20; + @Result public float[] outArray = new float[NUM]; + + static class MyObj { + float a[]; + + public MyObj(float[] src, int ofst) { + a = Arrays.copyOfRange(src, ofst, ofst + 3); + } + + public float productOf() { + return a[0] * a[1] * a[2]; + } + } + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + float[] fsrc = new float[2 * NUM]; + for (int i = 0; i < 2 * NUM; i++) { + fsrc[i] = i; + } + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = new MyObj(fsrc, gid).productOf(); + }); + } + + @Override + protected boolean supportsRequiredCapabilities() { + // although not escaping, seems to require object allocation support + return (canHandleObjectAllocation()); + } + + // NYI emitForeignCall floatArraycopy + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void test() { + testGeneratedHsail(); + } + + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NonEscapingNewTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/NonEscapingNewTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests creation of three non-escaping objects. + */ +public class NonEscapingNewTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public float[] outArray = new float[NUM]; + public Vec3[] inArray = new Vec3[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new Vec3(i, i + 1, i + 2); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + Vec3 veca = inArray[gid]; + Vec3 vecb = inArray[(gid + 1) % NUM]; + Vec3 vecresult = Vec3.add(veca, vecb); + outArray[gid] = vecresult.z; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceDerivedTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceDerivedTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Tests calling a method on an object when there are derived types of that object. Note: if you + * enable these tests, not only will these tests fail but other tests like ObjectArrayInstanceTest + * will also fail because they depend on there being no derived classes from Body. + */ +public class ObjectArrayInstanceDerivedTest extends GraalKernelTester { + + static final int NUM = 20; + + class DerivedBody extends Body { + + DerivedBody(float x, float y, float z, float m) { + super(x, y, z, m); + } + + @Override + public float getX() { + return 42.0f; + } + } + + @Result public float[] outArray = new float[NUM]; + public Body[] inBodyArray = new Body[NUM]; + public Body[] unusedBodyArray = new Body[NUM]; + public DerivedBody[] unusedDerivedBodyArray = new DerivedBody[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inBodyArray[i] = new Body(i, i + 1, i + 2, i + 3); + // unusedBodyArray[i] = new DerivedBody(i, i+1, i+2, i+3); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + Body b = inBodyArray[gid]; + outArray[gid] = b.getX() * b.getY(); + }); + } + + // @Test + public void test() { + testGeneratedHsail(); + } + + // @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling a method on an object when there are no derived types of that object. + */ +public class ObjectArrayInstanceTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public float[] outArray = new float[NUM]; + public Body[] inBodyArray = new Body[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inBodyArray[i] = new Body(i, i + 1, i + 2, i + 3); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + Body b = inBodyArray[gid]; + outArray[gid] = b.getX() * b.getY(); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectStoreNullTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectStoreNullTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests the storing of null in an Object array + */ +public class ObjectStoreNullTest extends ObjectStoreTest { + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outBodyArray[gid] = (gid % 3 == 1 ? null : inBodyArray[gid]); + }); + } + + @Override + @Test + public void test() { + testGeneratedHsail(); + } + + @Override + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectStoreTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectStoreTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests copying an object from one array to another. + */ +public class ObjectStoreTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Body[] outBodyArray = new Body[NUM]; + public Body[] inBodyArray = new Body[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inBodyArray[i] = new Body(i, i + 1, i + 2, i + 3); + outBodyArray[i] = null; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outBodyArray[gid] = inBodyArray[gid]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/OverloadMethodTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/OverloadMethodTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling methods with the same name but different signatures. + */ +public class OverloadMethodTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + int addArgs(int a, int b) { + return a + b; + } + + int addArgs(int a, int b, int c) { + return a + b + c; + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = (gid > 9 ? addArgs(inArray[gid], gid + 1) : addArgs(inArray[gid], gid - 1, gid - 2)); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ShortArrayTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ShortArrayTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests accessing an array of shorts. + */ +public class ShortArrayTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public short[] inArray = new short[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = (short) ((i + 1) * (i % 3 == 0 ? 1 : -1)); + outArray[i] = 99; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid]; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticFloatFieldReadTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticFloatFieldReadTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests reading from a static float field. + */ +public class StaticFloatFieldReadTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public float[] outArray = new float[NUM]; + public float[] inArray = new float[NUM]; + + static float floatField = 7.123f; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + float[] out = outArray; + float[] in = inArray; + dispatchLambdaKernel(NUM, (gid) -> { + out[gid] = in[gid] + floatField; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntField2ReadTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntField2ReadTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests reading from a two static int fields in different classes. + */ +public class StaticIntField2ReadTest extends StaticIntFieldReadTest { + + static int intField2 = 8; + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] * intField1 + intField2; + }); + } + + @Override + @Test + public void test() { + testGeneratedHsail(); + } + + @Override + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntFieldReadTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntFieldReadTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests reading from a static int field. + */ +public class StaticIntFieldReadTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + static int intField1 = 7; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] + intField1; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntFieldSameClassTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntFieldSameClassTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.Test; + +/** + * Tests reading from a two static int fields in the same class. + */ +public class StaticIntFieldSameClassTest extends StaticIntFieldReadTest { + + static int myField1 = 5; + static int myField2 = -99; + @Result int fieldResult; + + @Override + public void runTest() { + setupArrays(); + myField2 = -99; + dispatchLambdaKernel(NUM, (gid) -> { + int val = inArray[gid] * myField1; + outArray[gid] = val; + if (gid == 3) + myField2 = val + gid; + }); + fieldResult = myField2; + } + + @Override + @Test + public void test() { + testGeneratedHsail(); + } + + @Override + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntFieldWriteTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticIntFieldWriteTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests writing a static int field. + */ +public class StaticIntFieldWriteTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + @Result int fieldResult; + + static int intStaticField = -99; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + intStaticField = -99; + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid] * 2; + if (gid == 3) + intStaticField = outArray[gid]; + }); + fieldResult = intStaticField; // save for kerneltester comparison + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticNBodyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StaticNBodyTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import java.util.*; +import org.junit.*; +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; + +/** + * Tests a static lambda version of nbody. + */ +public class StaticNBodyTest extends GraalKernelTester { + + static final int bodies = 1024; + static final float delT = .005f; + static final float espSqr = 1.0f; + static final float mass = 5f; + static final int width = 768; + static final int height = 768; + + @Result float[] in_xyz = new float[bodies * 3]; // positions xy and z of bodies + + @Result float[] out_xyz = new float[bodies * 3]; // positions xy and z of bodies + + @Result float[] in_vxyz = new float[bodies * 3]; // velocity component of x,y and z of + // bodies + + @Result float[] out_vxyz = new float[bodies * 3]; + + static float[] seed_xyz = new float[bodies * 3]; + static { + final float maxDist = width / 4; + for (int body = 0; body < (bodies * 3); body += 3) { + final float theta = (float) (Math.random() * Math.PI * 2); + final float phi = (float) (Math.random() * Math.PI * 2); + final float radius = (float) (Math.random() * maxDist); + seed_xyz[body + 0] = (float) (radius * Math.cos(theta) * Math.sin(phi)) + width / 2; + seed_xyz[body + 1] = (float) (radius * Math.sin(theta) * Math.sin(phi)) + height / 2; + seed_xyz[body + 2] = (float) (radius * Math.cos(phi)); + } + } + + @Override + public void runTest() { + System.arraycopy(seed_xyz, 0, in_xyz, 0, seed_xyz.length); + Arrays.fill(out_xyz, 0f); + Arrays.fill(out_vxyz, 0f); + Arrays.fill(in_vxyz, 0f); + + // local copies for a static lambda + float[] in_xyz1 = this.in_xyz; + float[] out_xyz1 = this.out_xyz; + float[] in_vxyz1 = this.in_vxyz; + float[] out_vxyz1 = this.out_vxyz; + + dispatchLambdaKernel(bodies, (gid) -> { + final int count = bodies * 3; + final int globalId = gid * 3; + + float accx = 0.f; + float accy = 0.f; + float accz = 0.f; + for (int i = 0; i < count; i += 3) { + final float dx = in_xyz1[i + 0] - in_xyz1[globalId + 0]; + final float dy = in_xyz1[i + 1] - in_xyz1[globalId + 1]; + final float dz = in_xyz1[i + 2] - in_xyz1[globalId + 2]; + final float invDist = (float) (1.0 / (Math.sqrt((dx * dx) + (dy * dy) + (dz * dz) + espSqr))); + accx += mass * invDist * invDist * invDist * dx; + accy += mass * invDist * invDist * invDist * dy; + accz += mass * invDist * invDist * invDist * dz; + } + accx *= delT; + accy *= delT; + accz *= delT; + out_xyz1[globalId + 0] = in_xyz1[globalId + 0] + (in_vxyz1[globalId + 0] * delT) + (accx * .5f * delT); + out_xyz1[globalId + 1] = in_xyz1[globalId + 1] + (in_vxyz1[globalId + 1] * delT) + (accy * .5f * delT); + out_xyz1[globalId + 2] = in_xyz1[globalId + 2] + (in_vxyz1[globalId + 2] * delT) + (accz * .5f * delT); + + out_vxyz1[globalId + 0] = in_vxyz1[globalId + 0] + accx; + out_vxyz1[globalId + 1] = in_vxyz1[globalId + 1] + accy; + out_vxyz1[globalId + 2] = in_vxyz1[globalId + 2] + accz; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringContainsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringContainsTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling String.contains(). + */ +public class StringContainsTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public boolean[] outArray = new boolean[NUM]; + public String[] inArray = new String[NUM]; + + void setupArrays() { + char[] chars = new char[100]; + for (int i = 0; i < chars.length; i++) { + chars[i] = (char) ('A' + i); + } + for (int i = 0; i < NUM; i++) { + inArray[i] = new String(chars, i, 10); + } + } + + @Override + public void runTest() { + setupArrays(); + String base = "CDE"; + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid].contains(base); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringEqualsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringEqualsTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling String.equals(). + */ +public class StringEqualsTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public boolean[] outArray = new boolean[NUM]; + public String[] inArray = new String[NUM]; + + void setupArrays() { + char[] chars = new char[100]; + for (int i = 0; i < chars.length; i++) { + chars[i] = (char) ('A' + i); + } + for (int i = 0; i < NUM; i++) { + inArray[i] = new String(chars, 0, 10 + (i % 3)); + } + } + + @Override + public void runTest() { + setupArrays(); + String base = "ABCDEFGHIJ"; + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid].equals(base); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringHashTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringHashTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling String.hashCode(). + */ +public class StringHashTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public String[] inArray = new String[NUM]; + + void setupArrays() { + char[] chars = new char[100]; + for (int i = 0; i < chars.length; i++) { + chars[i] = (char) ('A' + i); + } + for (int i = 0; i < NUM; i++) { + inArray[i] = new String(chars, 0, i + 1); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid].hashCode(); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringLenTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringLenTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling String.length(). + */ +public class StringLenTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public String[] inArray = new String[NUM]; + + void setupArrays() { + char[] chars = new char[100]; + for (int i = 0; i < chars.length; i++) { + chars[i] = 'A'; + } + for (int i = 0; i < NUM; i++) { + inArray[i] = new String(chars, 0, i + 10); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid].length(); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringUtilsCountMatches2Test.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringUtilsCountMatches2Test.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import static com.oracle.graal.compiler.hsail.test.lambda.StringUtilsCountMatchesTest.*; + +import org.junit.*; + +/** + * Tests calling a method similar to {@code StringUtils.countMatches()} from the Apache commons-lang + * library. The second argument varies per workitem. + */ +public class StringUtilsCountMatches2Test extends CountMatchesBase { + @Override + void setupArrays() { + char[] chars = new char[100]; + for (int i = 0; i < chars.length; i++) { + chars[i] = (char) ('A' + (i % 10)); + } + for (int i = 0; i < NUM; i++) { + inArray[i] = new String(chars, i, (i % 5 + 1)); + } + } + + @Override + public void runTest() { + setupArrays(); + String base = "ABCDE BCDEF CDEFG DEFGH EFGHI FGHIJ ABCDE BCDEF CDEFG DEFGH EFGHI FGHIJ "; + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = countMatches(base, inArray[gid]); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringUtilsCountMatchesTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/StringUtilsCountMatchesTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import org.junit.*; + +/** + * Tests calling a method similar to {@code StringUtils.countMatches()} from the Apache commons-lang + * library. The first argument varies per workitem. + */ +public class StringUtilsCountMatchesTest extends CountMatchesBase { + + public static int countMatches(String str, String sub) { + if (isEmpty(str) || isEmpty(sub)) { + return 0; + } + int count = 0; + int idx = 0; + while ((idx = str.indexOf(sub, idx)) != -1) { + count++; + idx += sub.length(); + } + return count; + } + + private static boolean isEmpty(String str) { + return str == null || str.length() == 0; + } + + @Override + public void runTest() { + setupArrays(); + String base = "CDE"; + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = countMatches(inArray[gid], base); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/SynchronizedMethodTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/SynchronizedMethodTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling a synchronized method. + */ +public class SynchronizedMethodTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + synchronized int syncSquare(int n) { + return n * n; + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = syncSquare(inArray[gid]); + }); + } + + // cannot handle the BeginLockScope node + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void test() { + testGeneratedHsail(); + } + + // cannot handle the BeginLockScope node + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/TooSimpleNewTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/TooSimpleNewTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests a very simple non-escaping object allocation. + */ +public class TooSimpleNewTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public float[] outArray = new float[NUM]; + public float[] inArray = new float[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + float inval = inArray[gid]; + Vec3 vec3 = new Vec3(inval + 1, inval + 2, inval + 3); + outArray[gid] = vec3.x; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/TwoDIntArrayTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/TwoDIntArrayTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests reading from a 2-D int array. + */ +public class TwoDIntArrayTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[][] inArray = new int[NUM][NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + for (int j = 0; j < NUM; j++) { + inArray[i][j] = i * j; + } + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = inArray[gid][gid] + 100; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VarArgsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VarArgsTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests calling a varargs method. + */ +public class VarArgsTest extends GraalKernelTester { + + static final int NUM = 20; + @Result public int[] outArray = new int[NUM]; + public int[] inArray = new int[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = i; + outArray[i] = -i; + } + } + + int addArgs(Object... args) { + int sum = 0; + for (Object n : args) { + sum += (Integer) n; + } + return sum; + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + outArray[gid] = (gid > 9 ? addArgs(gid, gid + 1, gid + 2) : addArgs(inArray[gid], gid - 1, gid - 2, gid - 3)); + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamFloatCaptureTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamFloatCaptureTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests codegen for a java 8 lambda style object array stream kernel, one float capture. + */ +public class Vec3ObjStreamFloatCaptureTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Vec3[] inArray = new Vec3[NUM]; + float baseAdjustment = 0.5f; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new Vec3(i, i + 1, -1); + } + } + + @Override + public void runTest() { + setupArrays(); + float adjustment = baseAdjustment; + dispatchLambdaKernel(inArray, obj -> { + Vec3 vec3 = (Vec3) obj; + vec3.z = vec3.x + vec3.y - adjustment; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamIntCaptureTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamIntCaptureTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests codegen for a java 8 style object array stream kernel, one int capture. + */ +public class Vec3ObjStreamIntCaptureTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Vec3[] inArray = new Vec3[NUM]; + int baseAdjustment = 7; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new Vec3(i, i + 1, -1); + } + } + + @Override + public void runTest() { + setupArrays(); + int adjustment = baseAdjustment; + dispatchLambdaKernel(inArray, obj -> { + Vec3 vec3 = (Vec3) obj; + vec3.z = vec3.x + vec3.y - adjustment; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamIntFloatCaptureTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamIntFloatCaptureTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests codegen for a java 8 style object array stream kernel, one int and one float capture. + */ +public class Vec3ObjStreamIntFloatCaptureTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Vec3[] inArray = new Vec3[NUM]; + int baseAdjustment = 7; + float baseMultiplier = 0.5f; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new Vec3(i, i + 1, -1); + } + } + + @Override + public void runTest() { + setupArrays(); + int adjustment = baseAdjustment; + float multiplier = baseMultiplier; + + dispatchLambdaKernel(inArray, obj -> { + Vec3 vec3 = (Vec3) obj; + vec3.z = (vec3.x + vec3.y - adjustment) * multiplier; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamObjCaptureTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamObjCaptureTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests codegen for a java 8 lambda style object array stream kernel, one object capture. + */ +public class Vec3ObjStreamObjCaptureTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Vec3[] inArray = new Vec3[NUM]; + float baseAdjustment = 0.5f; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new Vec3(i, i + 1, -1); + } + } + + @Override + public void runTest() { + setupArrays(); + Vec3 basevec = new Vec3(1, 2, 3); + dispatchLambdaKernel(inArray, obj -> { + Vec3 vec3 = (Vec3) obj; + vec3.z = vec3.x + vec3.y - basevec.z; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamObjFieldTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamObjFieldTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests codegen for a java 8 style object array stream kernel. Instance method which accesses an + * object field. + */ +public class Vec3ObjStreamObjFieldTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Vec3[] inArray = new Vec3[NUM]; + Vec3 basevec = new Vec3(1, 2, 3); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new Vec3(i, i + 1, -1); + } + } + + @Override + public void runTest() { + setupArrays(); + dispatchLambdaKernel(inArray, obj -> { + Vec3 vec3 = (Vec3) obj; + vec3.z = vec3.x + vec3.y - basevec.z; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/Vec3ObjStreamTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; +import com.oracle.graal.compiler.hsail.test.Vec3; + +/** + * Tests codegen for a java 8 style object array stream kernel, no captures. + */ +public class Vec3ObjStreamTest extends GraalKernelTester { + + static final int NUM = 20; + + @Result public Vec3[] inArray = new Vec3[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + inArray[i] = new Vec3(i, i + 1, -1); + } + } + + @Override + public void runTest() { + setupArrays(); + dispatchLambdaKernel(inArray, obj -> { + Vec3 vec3 = (Vec3) obj; + vec3.z = vec3.x + vec3.y; + }); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VecmathNBodyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VecmathNBodyTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import java.util.*; +import org.junit.*; +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import javax.vecmath.*; + +/** + * Tests NBody algorithm using the javax.vecmath package (all objects non-escaping). + */ +public class VecmathNBodyTest extends GraalKernelTester { + static final int bodies = 1024; + static final float delT = .005f; + static final float espSqr = 1.0f; + static final float mass = 5f; + static final int width = 768; + static final int height = 768; + + static class Body extends Vector3f { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public Body(float _x, float _y, float _z, float _m) { + super(_x, _y, _z); + m = _m; + v = new Vector3f(0, 0, 0); + } + + float m; + Vector3f v; + + public float getM() { + return m; + } + + public Vector3f computeAcc(Body[] in_bodies, float espSqr1, float delT1) { + Vector3f acc = new Vector3f(); + + for (Body b : in_bodies) { + Vector3f d = new Vector3f(); + d.sub(b, this); + float invDist = 1.0f / (float) Math.sqrt(d.lengthSquared() + espSqr1); + float s = b.getM() * invDist * invDist * invDist; + acc.scaleAdd(s, d, acc); + } + + // now return acc scaled by delT + acc.scale(delT1); + return acc; + } + } + + @Result Body[] in_bodies = new Body[bodies]; + @Result Body[] out_bodies = new Body[bodies]; + + static Body[] seed_bodies = new Body[bodies]; + + static { + java.util.Random randgen = new Random(0); + final float maxDist = width / 4; + for (int body = 0; body < bodies; body++) { + final float theta = (float) (randgen.nextFloat() * Math.PI * 2); + final float phi = (float) (randgen.nextFloat() * Math.PI * 2); + final float radius = randgen.nextFloat() * maxDist; + float x = (float) (radius * Math.cos(theta) * Math.sin(phi)) + width / 2; + float y = (float) (radius * Math.sin(theta) * Math.sin(phi)) + height / 2; + float z = (float) (radius * Math.cos(phi)); + seed_bodies[body] = new Body(x, y, z, mass); + } + } + + @Override + public void runTest() { + System.arraycopy(seed_bodies, 0, in_bodies, 0, seed_bodies.length); + for (int b = 0; b < bodies; b++) { + out_bodies[b] = new Body(0, 0, 0, mass); + } + // no local copies of arrays so we make it an instance lambda + + dispatchLambdaKernel(bodies, (gid) -> { + Body inb = in_bodies[gid]; + Body outb = out_bodies[gid]; + Vector3f acc = inb.computeAcc(in_bodies, espSqr, delT); + + Vector3f tmpPos = new Vector3f(); + tmpPos.scaleAdd(delT, inb.v, inb); + tmpPos.scaleAdd(0.5f * delT, acc, tmpPos); + outb.set(tmpPos); + + outb.v.add(inb.v, acc); + }); + } + + @Override + protected boolean supportsRequiredCapabilities() { + return (canHandleDeoptVirtualObjects()); + } + + @Test + public void test() { + testGeneratedHsail(); + } + + @Test + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VectorStreamTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VectorStreamTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import java.util.Vector; +import java.util.stream.Stream; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + +/** + * Sumatra API tests which use a Stream derived from a Vector. + */ +public class VectorStreamTest { + + // Static and instance fields to test codegen for + // each type of variable + static int staticSize = 16; + final int size = staticSize; + + static int staticFactor = 3; + final int factor = staticFactor; + + class MyPoint { + + int x; + int y; + + public MyPoint(int _x, int _y) { + x = _x; + y = _y; + } + } + + public Vector buildMyPointInputArray() { + Vector inputs = new Vector<>(size); + + for (int i = 0; i < size; i++) { + inputs.add(new MyPoint(i, i + 1)); + } + return inputs; + } + + public int[] buildIntInputArray() { + int[] inputs = new int[size]; + + for (int i = 0; i < size; i++) { + inputs[i] = i * 4; + } + return inputs; + } + + @Test + public void testForEachObjectStreamNoCaptures() { + Vector inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + // Swap the values + int tmp = p.x; + p.x = p.y + factor; + p.y = tmp; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.x == (p.y + 1 + factor)); + } + } + + @Test + public void testForEachObjectStreamNoCapturesUseStatic() { + Vector inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + // Swap the values + int tmp = p.x; + p.x = p.y + staticFactor; + p.y = tmp; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.x == (p.y + 1 + staticFactor)); + } + } + + @Test + public void testForEachObjectStreamOneCapture() { + int[] data = buildIntInputArray(); + Vector inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x]; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x]); + } + + } + + @Test + public void testForEachObjectStreamOneCaptureUseStatic() { + int[] data = buildIntInputArray(); + Vector inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x] + staticFactor; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == (data[p.x] + +staticFactor)); + } + + } + + @Test + public void testForEachObjectStreamTwoCaptures() { + int[] data = buildIntInputArray(); + int[] data2 = buildIntInputArray(); + Vector inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x] + data2[p.x]; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x] + data2[p.x]); + } + + } + + @Test + public void testForEachObjectStreamTwoCapturesUseStatic() { + int[] data = buildIntInputArray(); + int[] data2 = buildIntInputArray(); + Vector inputs = buildMyPointInputArray(); + + Stream s = inputs.stream(); + s = s.parallel(); + s.forEach(p -> { + p.y = data[p.x] + data2[p.x] + staticFactor; + }); + + for (int k = 0; k < size; k++) { + MyPoint p = inputs.get(k); + // System.out.println( k + " ... p.x=" + p.x ); + assertTrue(p.y == data[p.x] + data2[p.x] + staticFactor); + } + + } +} diff -r 199eecd74c12 -r 976c6cb2bf69 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VirtualCallTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/VirtualCallTest.java Sun Apr 13 22:55:23 2014 +0200 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.graal.compiler.hsail.test.lambda; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests a true virtual method call. + */ +public class VirtualCallTest extends GraalKernelTester { + + static final int NUM = 20; + + static abstract class Shape { + + abstract public float getArea(); + } + + static class Circle extends Shape { + + private float radius; + + Circle(float r) { + radius = r; + } + + @Override + public float getArea() { + return (float) (Math.PI * radius * radius); + } + } + + static class Square extends Shape { + + private float len; + + Square(float _len) { + len = _len; + } + + @Override + public float getArea() { + return len * len; + } + } + + @Result public float[] outArray = new float[NUM]; + public Shape[] inShapeArray = new Shape[NUM]; + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + if (i % 2 == 0) + inShapeArray[i] = new Circle(i + 1); + else + inShapeArray[i] = new Square(i + 1); + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchLambdaKernel(NUM, (gid) -> { + Shape shape = inShapeArray[gid]; + outArray[gid] = shape.getArea(); + }); + } + + // graal says not inlining getArea():float (0 bytes): no type profile exists + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void test() { + testGeneratedHsail(); + } + + @Test(expected = com.oracle.graal.graph.GraalInternalError.class) + public void testUsingLambdaMethod() { + testGeneratedHsailUsingLambdaMethod(); + } + +} diff -r 199eecd74c12 -r 976c6cb2bf69 mx/projects --- a/mx/projects Sun Apr 13 22:53:59 2014 +0200 +++ b/mx/projects Sun Apr 13 22:55:23 2014 +0200 @@ -45,6 +45,9 @@ library@JAVA_ALLOCATION_INSTRUMENTER@urls=http://lafo.ssw.uni-linz.ac.at/java-allocation-instrumenter/java-allocation-instrumenter-8f0db117e64e.jar library@JAVA_ALLOCATION_INSTRUMENTER@sha1=64c0a5329fbcb8284640e58d83252e0a3b08c23e +library@VECMATH@path=lib/vecmath-1.3.1.jar +library@VECMATH@urls=http://mirrors.ibiblio.org/pub/mirrors/maven/java3d/jars/vecmath-1.3.1.jar + distribution@GRAAL@path=graal.jar distribution@GRAAL@sourcesPath=graal.src.zip distribution@GRAAL@dependencies=\ @@ -611,7 +614,7 @@ # graal.compiler.hsail.test project@com.oracle.graal.compiler.hsail.test@subDir=graal project@com.oracle.graal.compiler.hsail.test@sourceDirs=src -project@com.oracle.graal.compiler.hsail.test@dependencies=com.oracle.graal.compiler.hsail.test.infra,com.oracle.graal.compiler.test +project@com.oracle.graal.compiler.hsail.test@dependencies=com.oracle.graal.compiler.hsail.test.infra,com.oracle.graal.compiler.test,VECMATH project@com.oracle.graal.compiler.hsail.test@checkstyle=com.oracle.graal.graph project@com.oracle.graal.compiler.hsail.test@javaCompliance=1.8