1 /* 2 * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 25 26 package org.graalvm.compiler.core.test; 27 28 import org.junit.Test; 29 30 import org.graalvm.compiler.nodes.StructuredGraph; 31 import org.graalvm.compiler.nodes.java.NewArrayNode; 32 33 public class ArrayCopyVirtualizationTest extends GraalCompilerTest { 34 35 @Override checkMidTierGraph(StructuredGraph graph)36 protected void checkMidTierGraph(StructuredGraph graph) { 37 assertTrue(graph.getNodes().filter(node -> node instanceof NewArrayNode).count() == 0, "shouldn't require allocation in %s", graph); 38 super.checkMidTierGraph(graph); 39 } 40 byteCopyVirtualization()41 public byte byteCopyVirtualization() { 42 byte[] array = new byte[]{1, 2, 3, 4}; 43 System.arraycopy(array, 1, array, 0, 3); 44 return array[0]; 45 } 46 shortCopyVirtualization()47 public short shortCopyVirtualization() { 48 short[] array = new short[]{1, 2, 3, 4}; 49 System.arraycopy(array, 1, array, 0, 2); 50 return array[0]; 51 } 52 charCopyVirtualization()53 public char charCopyVirtualization() { 54 char[] array = new char[]{1, 2, 3, 4}; 55 System.arraycopy(array, 1, array, 0, 3); 56 return array[0]; 57 } 58 intCopyVirtualization()59 public int intCopyVirtualization() { 60 int[] array = new int[]{1, 2, 3, 4}; 61 System.arraycopy(array, 1, array, 0, 3); 62 return array[0]; 63 } 64 longCopyVirtualization()65 public long longCopyVirtualization() { 66 long[] array = new long[]{1, 2, 3, 4}; 67 System.arraycopy(array, 1, array, 0, 3); 68 return array[0]; 69 } 70 floatCopyVirtualization()71 public float floatCopyVirtualization() { 72 float[] array = new float[]{1, 2, 3, 4}; 73 System.arraycopy(array, 1, array, 0, 3); 74 return array[0]; 75 } 76 doubleCopyVirtualization()77 public double doubleCopyVirtualization() { 78 double[] array = new double[]{1, 2, 3, 4}; 79 System.arraycopy(array, 1, array, 0, 3); 80 return array[0]; 81 } 82 objectCopyVirtualization()83 public Object objectCopyVirtualization() { 84 Object[] array = new Object[]{1, 2, 3, 4}; 85 System.arraycopy(array, 1, array, 0, 3); 86 return array[0]; 87 } 88 89 @Test testCopyVirtualization()90 public void testCopyVirtualization() { 91 test("byteCopyVirtualization"); 92 test("shortCopyVirtualization"); 93 test("charCopyVirtualization"); 94 test("intCopyVirtualization"); 95 test("longCopyVirtualization"); 96 test("floatCopyVirtualization"); 97 test("doubleCopyVirtualization"); 98 test("objectCopyVirtualization"); 99 } 100 byteCopyBackwardsVirtualization()101 public byte byteCopyBackwardsVirtualization() { 102 byte[] array = new byte[]{1, 2, 3, 4}; 103 System.arraycopy(array, 0, array, 1, 3); 104 return array[3]; 105 } 106 shortCopyBackwardsVirtualization()107 public short shortCopyBackwardsVirtualization() { 108 short[] array = new short[]{1, 2, 3, 4}; 109 System.arraycopy(array, 0, array, 1, 3); 110 return array[3]; 111 } 112 charCopyBackwardsVirtualization()113 public char charCopyBackwardsVirtualization() { 114 char[] array = new char[]{1, 2, 3, 4}; 115 System.arraycopy(array, 0, array, 1, 3); 116 return array[3]; 117 } 118 intCopyBackwardsVirtualization()119 public int intCopyBackwardsVirtualization() { 120 int[] array = new int[]{1, 2, 3, 4}; 121 System.arraycopy(array, 0, array, 1, 3); 122 return array[3]; 123 } 124 longCopyBackwardsVirtualization()125 public long longCopyBackwardsVirtualization() { 126 long[] array = new long[]{1, 2, 3, 4}; 127 System.arraycopy(array, 0, array, 1, 3); 128 return array[3]; 129 } 130 floatCopyBackwardsVirtualization()131 public float floatCopyBackwardsVirtualization() { 132 float[] array = new float[]{1, 2, 3, 4}; 133 System.arraycopy(array, 0, array, 1, 3); 134 return array[3]; 135 } 136 doubleCopyBackwardsVirtualization()137 public double doubleCopyBackwardsVirtualization() { 138 double[] array = new double[]{1, 2, 3, 4}; 139 System.arraycopy(array, 0, array, 1, 3); 140 return array[3]; 141 } 142 objectCopyBackwardsVirtualization()143 public Object objectCopyBackwardsVirtualization() { 144 Object[] array = new Object[]{1, 2, 3, 4}; 145 System.arraycopy(array, 0, array, 1, 3); 146 return array[3]; 147 } 148 149 @Test testCopyBackwardsVirtualization()150 public void testCopyBackwardsVirtualization() { 151 test("byteCopyBackwardsVirtualization"); 152 test("shortCopyBackwardsVirtualization"); 153 test("charCopyBackwardsVirtualization"); 154 test("intCopyBackwardsVirtualization"); 155 test("longCopyBackwardsVirtualization"); 156 test("floatCopyBackwardsVirtualization"); 157 test("doubleCopyBackwardsVirtualization"); 158 test("objectCopyBackwardsVirtualization"); 159 } 160 } 161