1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 public class Main { 18 main(String[] args)19 public static void main(String[] args) { 20 System.out.println(test().intValue()); 21 } 22 23 /// CHECK-START: java.lang.Integer Main.test() builder (after) 24 /// CHECK-DAG: <<Const2P19:i\d+>> IntConstant 524288 25 /// CHECK-DAG: <<ConstM1:i\d+>> IntConstant -1 26 /// CHECK-DAG: <<LoadClass:l\d+>> LoadClass 27 /// CHECK-DAG: <<Array:l\d+>> NewArray [<<LoadClass>>,<<Const2P19>>] 28 /// CHECK-DAG: <<Length1:i\d+>> ArrayLength [<<Array>>] 29 /// CHECK-DAG: <<Index:i\d+>> Add [<<Length1>>,<<ConstM1>>] 30 /// CHECK-DAG: <<Length2:i\d+>> ArrayLength [<<Array>>] 31 /// CHECK-DAG: <<BoundsCheck:i\d+>> BoundsCheck [<<Index>>,<<Length2>>] 32 /// CHECK-DAG: <<LastElement:l\d+>> ArrayGet [<<Array>>,<<BoundsCheck>>] 33 /// CHECK-DAG: Return [<<LastElement>>] 34 35 36 /// CHECK-START: java.lang.Integer Main.test() register (before) 37 /// CHECK-DAG: <<Const2P19:i\d+>> IntConstant 524288 38 /// CHECK-DAG: <<Const2P19M1:i\d+>> IntConstant 524287 39 /// CHECK-DAG: <<LoadClass:l\d+>> LoadClass 40 /// CHECK-DAG: <<Array:l\d+>> NewArray [<<LoadClass>>,<<Const2P19>>] 41 /// CHECK-DAG: <<LastElement:l\d+>> ArrayGet [<<Array>>,<<Const2P19M1>>] 42 /// CHECK-DAG: Return [<<LastElement>>] 43 test()44 public static Integer test() { 45 Integer[] integers = new Integer[1 << 19]; 46 initIntegerArray(integers); 47 // Array load with a large constant index (after constant folding 48 // and bounds check elimination). 49 Integer last_integer = integers[integers.length - 1]; 50 return last_integer; 51 } 52 initIntegerArray(Integer[] integers)53 public static void initIntegerArray(Integer[] integers) { 54 for (int i = 0; i < integers.length; ++i) { 55 integers[i] = new Integer(i); 56 } 57 } 58 59 } 60