annotate graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ArrayCopyIntrinsificationTest.java @ 15020:22390f39dfb1

moved some entries in CHANGELOG.md from 0.2 to tip
author Doug Simon <doug.simon@oracle.com>
date Tue, 08 Apr 2014 15:06:24 +0200
parents 23ccaa863eda
children 688f84e397a3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
1 /*
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
4 *
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
8 *
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
13 * accompanied this code).
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
14 *
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
18 *
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
21 * questions.
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
22 */
8944
e7766460ddb3 Move tests into *.test packages.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 8333
diff changeset
23 package com.oracle.graal.hotspot.test;
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
24
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
25 import static org.junit.Assert.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
26
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
27 import java.lang.reflect.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
28 import java.util.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
29
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
30 import org.junit.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
31
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
32 import com.oracle.graal.api.code.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
33 import com.oracle.graal.api.meta.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
34 import com.oracle.graal.compiler.test.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
35 import com.oracle.graal.graph.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
36 import com.oracle.graal.nodes.*;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
37
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
38 /**
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
39 * Tests intrinsification of {@link System#arraycopy(Object, int, Object, int, int)}.
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
40 */
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
41 public class ArrayCopyIntrinsificationTest extends GraalCompilerTest {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
42
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
43 @Override
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
44 protected InstalledCode getCode(ResolvedJavaMethod method, StructuredGraph graph) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
45 int nodeCount = graph.getNodeCount();
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
46 InstalledCode result = super.getCode(method, graph);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
47 boolean graphWasProcessed = nodeCount != graph.getNodeCount();
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
48 if (graphWasProcessed) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
49 if (mustIntrinsify) {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7511
diff changeset
50 for (Node node : graph.getNodes()) {
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
51 if (node instanceof Invoke) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
52 Invoke invoke = (Invoke) node;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
53 Assert.assertTrue(invoke.callTarget() instanceof DirectCallTargetNode);
9147
07f05f2a8149 Remove methodCallTarget() method from the Invoke interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 8944
diff changeset
54 LoweredCallTargetNode directCall = (LoweredCallTargetNode) invoke.callTarget();
8333
e9c6fc513719 Remove last usages of scratch register. Separate runtime calls from normal method calls in LIR.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7934
diff changeset
55 JavaMethod callee = directCall.target();
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
56 Assert.assertTrue(callee.getName().equals("<init>"));
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 9147
diff changeset
57 Assert.assertTrue(getMetaAccess().lookupJavaType(ArrayIndexOutOfBoundsException.class).equals(callee.getDeclaringClass()) ||
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 9147
diff changeset
58 getMetaAccess().lookupJavaType(NullPointerException.class).equals(callee.getDeclaringClass()));
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
59 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
60 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
61 } else {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
62 boolean found = false;
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7511
diff changeset
63 for (Node node : graph.getNodes()) {
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
64 if (node instanceof Invoke) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
65 Invoke invoke = (Invoke) node;
9147
07f05f2a8149 Remove methodCallTarget() method from the Invoke interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 8944
diff changeset
66 LoweredCallTargetNode directCall = (LoweredCallTargetNode) invoke.callTarget();
8333
e9c6fc513719 Remove last usages of scratch register. Separate runtime calls from normal method calls in LIR.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7934
diff changeset
67 JavaMethod callee = directCall.target();
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 9147
diff changeset
68 if (callee.getDeclaringClass().equals(getMetaAccess().lookupJavaType(System.class)) && callee.getName().equals("arraycopy")) {
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
69 found = true;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
70 } else {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
71 fail("found invoke to some method other than arraycopy: " + callee);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
72 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
73 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
74 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
75 Assert.assertTrue("did not find invoke to arraycopy", found);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
76 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
77 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
78 return result;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
79 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
80
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
81 boolean mustIntrinsify = true;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
82
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
83 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
84 public void test0() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
85 mustIntrinsify = false; // a generic call to arraycopy will not be intrinsified
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
86 // Array store checks
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
87 test("genericArraycopy", new Object(), 0, new Object[0], 0, 0);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
88 test("genericArraycopy", new Object[0], 0, new Object(), 0, 0);
7511
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
89
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
90 mustIntrinsify = true;
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
91 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
92
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
93 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
94 public void test1() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
95 String name = "intArraycopy";
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
96 int[] src = {234, 5345, 756, 23, 8, 345, 873, 440};
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
97 // Null checks
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
98 test(name, null, 0, src, 0, 0);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
99 test(name, src, 0, null, 0, 0);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
100 // Bounds checks
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
101 test(name, src, 0, src, 0, -1);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
102 test(name, src, 0, src, 0, src.length + 1);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
103 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
104
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
105 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
106 public void testByte() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
107 byte[] src = {-1, 0, 1, 2, 3, 4};
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
108 testHelper("byteArraycopy", src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
109 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
110
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
111 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
112 public void testChar() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
113 char[] src = "some string of chars".toCharArray();
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
114 testHelper("charArraycopy", src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
115 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
116
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
117 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
118 public void testShort() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
119 short[] src = {234, 5345, 756, 23, 8, 345, 873, 440};
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
120 testHelper("shortArraycopy", src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
121 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
122
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
123 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
124 public void testInt() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
125 int[] src = {234, 5345, 756, 23, 8, 345, 873, 440};
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
126 testHelper("intArraycopy", src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
127 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
128
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
129 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
130 public void testFloat() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
131 float[] src = {234, 5345, 756, 23, 8, 345, 873, 440};
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
132 testHelper("floatArraycopy", src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
133 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
134
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
135 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
136 public void testLong() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
137 long[] src = {234, 5345, 756, 23, 8, 345, 873, 440};
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
138 testHelper("longArraycopy", src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
139 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
140
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
141 @Test
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
142 public void testDouble() {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
143 double[] src = {234, 5345, 756, 23, 8, 345, 873, 440};
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
144 testHelper("doubleArraycopy", src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
145 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
146
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
147 @Test
7344
11a9f50f34e4 reverted recent changes to arraycopy intrinsification
Doug Simon <doug.simon@oracle.com>
parents: 7339
diff changeset
148 public void testObject() {
7511
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
149 mustIntrinsify = false; // a generic call to arraycopy will not be intrinsified
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
150
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
151 Object[] src = {"one", "two", "three", new ArrayList<>(), new HashMap<>()};
7344
11a9f50f34e4 reverted recent changes to arraycopy intrinsification
Doug Simon <doug.simon@oracle.com>
parents: 7339
diff changeset
152 testHelper("objectArraycopy", src);
7511
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
153
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
154 mustIntrinsify = true;
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
155 }
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
156
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
157 @Test
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
158 public void testObjectExact() {
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
159 Integer[] src = {1, 2, 3, 4};
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
160 testHelper("objectArraycopyExact", src);
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
161 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
162
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
163 private static Object newArray(Object proto, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
164 assert proto != null;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
165 assert proto.getClass().isArray();
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
166 return Array.newInstance(proto.getClass().getComponentType(), length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
167 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
168
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
169 private void testHelper(String name, Object src) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
170 int srcLength = Array.getLength(src);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
171
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
172 // Complete array copy
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
173 test(name, src, 0, newArray(src, srcLength), 0, srcLength);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
174
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7511
diff changeset
175 for (int length : new int[]{0, 1, srcLength - 1, srcLength}) {
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
176 // Partial array copying
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
177 test(name, src, 0, newArray(src, length), 0, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
178 test(name, src, srcLength - length, newArray(src, length), 0, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
179 test(name, src, 0, newArray(src, srcLength), 0, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
180 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
181 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
182
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
183 public static Object genericArraycopy(Object src, int srcPos, Object dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
184 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
185 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
186 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
187
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
188 public static Object[] objectArraycopy(Object[] src, int srcPos, Object[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
189 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
190 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
191 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
192
7511
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
193 public static Object[] objectArraycopyExact(Integer[] src, int srcPos, Integer[] dst, int dstPos, int length) {
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
194 System.arraycopy(src, srcPos, dst, dstPos, length);
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
195 return dst;
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
196 }
b5316e551965 reapply fix from 8f7be0c45a82
Lukas Stadler <lukas.stadler@jku.at>
parents: 7510
diff changeset
197
7263
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
198 public static boolean[] booleanArraycopy(boolean[] src, int srcPos, boolean[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
199 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
200 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
201 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
202
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
203 public static byte[] byteArraycopy(byte[] src, int srcPos, byte[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
204 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
205 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
206 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
207
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
208 public static char[] charArraycopy(char[] src, int srcPos, char[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
209 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
210 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
211 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
212
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
213 public static short[] shortArraycopy(short[] src, int srcPos, short[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
214 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
215 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
216 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
217
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
218 public static int[] intArraycopy(int[] src, int srcPos, int[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
219 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
220 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
221 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
222
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
223 public static float[] floatArraycopy(float[] src, int srcPos, float[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
224 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
225 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
226 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
227
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
228 public static long[] longArraycopy(long[] src, int srcPos, long[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
229 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
230 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
231 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
232
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
233 public static double[] doubleArraycopy(double[] src, int srcPos, double[] dst, int dstPos, int length) {
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
234 System.arraycopy(src, srcPos, dst, dstPos, length);
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
235 return dst;
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
236 }
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
237
6ed187f3134b added unit test for array copy intrinsification
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
238 }