Mercurial > hg > truffle
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 |
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 } |