118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik/* 218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * Copyright (C) 2015 The Android Open Source Project 318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * 418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * Licensed under the Apache License, Version 2.0 (the "License"); 518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * you may not use this file except in compliance with the License. 618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * You may obtain a copy of the License at 718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * 818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * http://www.apache.org/licenses/LICENSE-2.0 918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * 1018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * Unless required by applicable law or agreed to in writing, software 1118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * distributed under the License is distributed on an "AS IS" BASIS, 1218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * See the License for the specific language governing permissions and 1418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik * limitations under the License. 1518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik */ 1618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 1718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik// 1818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik// Test on (in)variant instance field and array references in loops. 1918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik// 2018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bikpublic class Main { 2118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 2218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static Object anObject = new Object(); 2318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static Object anotherObject = new Object(); 2418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 2518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 2618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Instance fields. 2718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 2818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 2918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private boolean mZ; 3018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private byte mB; 3118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private char mC; 3218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private short mS; 3318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private int mI; 3418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private long mJ; 3518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private float mF; 3618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private double mD; 3718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private Object mL; 3818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 3918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 4018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Instance arrays. 4118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 4218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 4318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private boolean[] mArrZ; 4418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private byte[] mArrB; 4518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private char[] mArrC; 4618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private short[] mArrS; 4718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private int[] mArrI; 4818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private long[] mArrJ; 4918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private float[] mArrF; 5018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private double[] mArrD; 5118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private Object[] mArrL; 5218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 5318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 5418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Loops on instance arrays with invariant instance field references. 5518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // The checker is used to ensure hoisting occurred. 5618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 5718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 5818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopZ() licm (before) 5918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 6018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 6118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 6218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopZ() licm (after) 6318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 6418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 6518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 6618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopZ() { 6718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrZ.length; i++) { 6818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrZ[i] = mZ; 6918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 7018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 7118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 7218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopB() licm (before) 7318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 7418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 7518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 7618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopB() licm (after) 7718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 7818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 7918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 8018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopB() { 8118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrB.length; i++) { 8218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrB[i] = mB; 8318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 8418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 8518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 8618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopC() licm (before) 8718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 8818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 8918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 9018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopC() licm (after) 9118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 9218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 9318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 9418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopC() { 9518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrC.length; i++) { 9618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrC[i] = mC; 9718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 9818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 9918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 10018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopS() licm (before) 10118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 10218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 10318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 10418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopS() licm (after) 10518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 10618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 10718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 10818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopS() { 10918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrS.length; i++) { 11018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrS[i] = mS; 11118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 11218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 11318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 11418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopI() licm (before) 11518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 11618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 11718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 11818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopI() licm (after) 11918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 12018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 12118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 12218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopI() { 12318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 12418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrI[i] = mI; 12518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 12618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 12718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 12818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopJ() licm (before) 12918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 13018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 13118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 13218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopJ() licm (after) 13318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 13418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 13518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 13618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopJ() { 13718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 13818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrJ[i] = mJ; 13918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 14018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 14118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 14218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopF() licm (before) 14318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 14418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 14518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 14618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopF() licm (after) 14718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 14818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 14918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 15018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopF() { 15118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 15218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrF[i] = mF; 15318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 15418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 15518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 15618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopD() licm (before) 15718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 15818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 15918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 16018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopD() licm (after) 16118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 16218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 16318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 16418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopD() { 16518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 16618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrD[i] = mD; 16718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 16818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 16918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 17018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopL() licm (before) 17118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 17218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} 17318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 17418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.InvLoopL() licm (after) 17518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 17618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: InstanceFieldGet loop:none 17718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 17818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void InvLoopL() { 17918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrL.length; i++) { 18018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrL[i] = mL; 18118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 18218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 18318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 18418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 18518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Loops on instance arrays with variant instance field references. 18618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Incorrect hoisting is detected by incorrect outcome. 18718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 18818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 18918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopZ() { 19018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrZ.length; i++) { 19118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrZ[i] = mZ; 19218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 19318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mZ = !mZ; 19418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 19518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 19618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 19718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopB() { 19818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrB.length; i++) { 19918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrB[i] = mB; 20018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 20118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mB++; 20218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 20318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 20418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 20518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopC() { 20618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrC.length; i++) { 20718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrC[i] = mC; 20818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 20918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mC++; 21018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 21118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 21218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 21318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopS() { 21418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrS.length; i++) { 21518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrS[i] = mS; 21618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 21718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mS++; 21818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 21918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 22018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 22118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopI() { 22218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 22318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrI[i] = mI; 22418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 22518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mI++; 22618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 22718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 22818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 22918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopJ() { 23018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 23118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrJ[i] = mJ; 23218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 23318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mJ++; 23418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 23518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 23618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 23718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopF() { 23818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 23918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrF[i] = mF; 24018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 24118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mF++; 24218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 24318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 24418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 24518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopD() { 24618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 24718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrD[i] = mD; 24818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 24918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mD++; 25018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 25118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 25218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 25318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void VarLoopL() { 25418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrL.length; i++) { 25518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrL[i] = mL; 25618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (i == 10) 25718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mL = anotherObject; 25818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 25918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 26018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 26118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 26218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Loops on instance arrays with a cross-over reference. 26318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Incorrect hoisting is detected by incorrect outcome. 26418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // In addition, the checker is used to detect no hoisting. 26518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 26618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 26718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopZ() licm (before) 26818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 26918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 27018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 27118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 27218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopZ() licm (after) 27318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 27418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 27518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 27618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 27718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopZ() { 27818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrZ[20] = false; 27918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrZ.length; i++) { 28018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrZ[i] = !mArrZ[20]; 28118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 28218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 28318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 28418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopB() licm (before) 28518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 28618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 28718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 28818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 28918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopB() licm (after) 29018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 29118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 29218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 29318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 29418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopB() { 29518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrB[20] = 111; 29618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrB.length; i++) { 29718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrB[i] = (byte)(mArrB[20] + 2); 29818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 29918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 30018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 30118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopC() licm (before) 30218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 30318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 30418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 30518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 30618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopC() licm (after) 30718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 30818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 30918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 31018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 31118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopC() { 31218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrC[20] = 111; 31318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrC.length; i++) { 31418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrC[i] = (char)(mArrC[20] + 2); 31518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 31618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 31718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 31818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopS() licm (before) 31918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 32018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 32118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 32218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 32318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopS() licm (after) 32418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 32518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 32618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 32718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 32818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopS() { 32918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrS[20] = 111; 33018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrS.length; i++) { 33118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrS[i] = (short)(mArrS[20] + 2); 33218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 33318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 33418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 33518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopI() licm (before) 33618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 33718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 33818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 33918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 34018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopI() licm (after) 34118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 34218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 34318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 34418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 34518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopI() { 34618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrI[20] = 111; 34718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 34818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrI[i] = mArrI[20] + 2; 34918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 35018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 35118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 35218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopJ() licm (before) 35318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 35418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 35518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 35618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 35718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopJ() licm (after) 35818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 35918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 36018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 36118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 36218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopJ() { 36318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrJ[20] = 111; 36418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 36518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrJ[i] = mArrJ[20] + 2; 36618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 36718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 36818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 36918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopF() licm (before) 37018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 37118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 37218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 37318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 37418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopF() licm (after) 37518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 37618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 37718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 37818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 37918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopF() { 38018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrF[20] = 111; 38118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 38218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrF[i] = mArrF[20] + 2; 38318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 38418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 38518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 38618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopD() licm (before) 38718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 38818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 38918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 39018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 39118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopD() licm (after) 39218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 39318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 39418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 39518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 39618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopD() { 39718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrD[20] = 111; 39818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 39918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrD[i] = mArrD[20] + 2; 40018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 40118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 40218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 40318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopL() licm (before) 40418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 40518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 40618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 40718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 40818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.CrossOverLoopL() licm (after) 40918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 41018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 41118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 41218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 41318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void CrossOverLoopL() { 41418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrL[20] = anotherObject; 41518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrL.length; i++) { 41618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrL[i] = (mArrL[20] == anObject) ? anotherObject : anObject; 41718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 41818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 41918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 42018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 42118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // False cross-over loops on instance arrays with data types (I/F and J/D) that used 42218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // to be aliased in an older version of the compiler. This alias has been removed, 42318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // however, which enables hoisting the invariant array reference. 42418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 42518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 42618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop1() licm (before) 42718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 42818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 42918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 43018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 43118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop1() licm (after) 43218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 43318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:none 43418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 43518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 43618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void FalseCrossOverLoop1() { 43718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrF[20] = -1; 43818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 43918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrI[i] = (int) mArrF[20] - 2; 44018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 44118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 44218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 44318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop2() licm (before) 44418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 44518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 44618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 44718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 44818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop2() licm (after) 44918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 45018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:none 45118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 45218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 45318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void FalseCrossOverLoop2() { 45418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrI[20] = -2; 45518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 45618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrF[i] = mArrI[20] - 2; 45718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 45818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 45918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 46018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop3() licm (before) 46118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 46218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 46318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 46418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 46518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop3() licm (after) 46618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 46718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:none 46818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 46918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 47018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void FalseCrossOverLoop3() { 47118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrD[20] = -3; 47218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 47318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrJ[i] = (long) mArrD[20] - 2; 47418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 47518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 47618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 47718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop4() licm (before) 47818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 47918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:{{B\d+}} 48018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 48118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 48218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-START: void Main.FalseCrossOverLoop4() licm (after) 48318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:none 48418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArrayGet loop:none 48518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik /// CHECK-DAG: ArraySet loop:{{B\d+}} 48618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 48718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void FalseCrossOverLoop4() { 48818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrJ[20] = -4; 48918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 49018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrD[i] = mArrJ[20] - 2; 49118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 49218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 49318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 49418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 49518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Main driver and testers. 49618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // 49718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 49818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik public static void main(String[] args) { 49918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik new Main().DoInstanceTests(); 50018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik System.out.println("passed"); 50118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 50218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 50318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private void DoInstanceTests() { 50418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type Z. 50518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mZ = true; 50618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrZ = new boolean[100]; 50718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopZ(); 50818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrZ.length; i++) { 50918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(true, mArrZ[i]); 51018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 51118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopZ(); 51218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrZ.length; i++) { 51318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10, mArrZ[i]); 51418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 51518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopZ(); 51618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrZ.length; i++) { 51718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20, mArrZ[i]); 51818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 51918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type B. 52018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mB = 1; 52118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrB = new byte[100]; 52218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopB(); 52318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrB.length; i++) { 52418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(1, mArrB[i]); 52518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 52618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopB(); 52718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrB.length; i++) { 52818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? 1 : 2, mArrB[i]); 52918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 53018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopB(); 53118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrB.length; i++) { 53218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? 113 : 115, mArrB[i]); 53318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 53418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type C. 53518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mC = 2; 53618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrC = new char[100]; 53718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopC(); 53818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrC.length; i++) { 53918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(2, mArrC[i]); 54018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 54118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopC(); 54218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrC.length; i++) { 54318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? 2 : 3, mArrC[i]); 54418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 54518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopC(); 54618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrC.length; i++) { 54718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? 113 : 115, mArrC[i]); 54818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 54918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type S. 55018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mS = 3; 55118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrS = new short[100]; 55218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopS(); 55318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrS.length; i++) { 55418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(3, mArrS[i]); 55518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 55618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopS(); 55718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrS.length; i++) { 55818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? 3 : 4, mArrS[i]); 55918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 56018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopS(); 56118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrS.length; i++) { 56218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? 113 : 115, mArrS[i]); 56318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 56418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type I. 56518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mI = 4; 56618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrI = new int[100]; 56718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopI(); 56818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 56918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(4, mArrI[i]); 57018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 57118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopI(); 57218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 57318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? 4 : 5, mArrI[i]); 57418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 57518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopI(); 57618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 57718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? 113 : 115, mArrI[i]); 57818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 57918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type J. 58018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mJ = 5; 58118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrJ = new long[100]; 58218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopJ(); 58318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 58418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(5, mArrJ[i]); 58518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 58618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopJ(); 58718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 58818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? 5 : 6, mArrJ[i]); 58918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 59018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopJ(); 59118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 59218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? 113 : 115, mArrJ[i]); 59318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 59418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type F. 59518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mF = 6.0f; 59618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrF = new float[100]; 59718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopF(); 59818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 59918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(6, mArrF[i]); 60018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 60118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopF(); 60218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 60318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? 6 : 7, mArrF[i]); 60418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 60518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopF(); 60618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 60718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? 113 : 115, mArrF[i]); 60818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 60918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type D. 61018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mD = 7.0; 61118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrD = new double[100]; 61218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopD(); 61318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 61418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(7.0, mArrD[i]); 61518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 61618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopD(); 61718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 61818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? 7 : 8, mArrD[i]); 61918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 62018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopD(); 62118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 62218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? 113 : 115, mArrD[i]); 62318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 62418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // Type L. 62518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mL = anObject; 62618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik mArrL = new Object[100]; 62718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik InvLoopL(); 62818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrL.length; i++) { 62918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(anObject, mArrL[i]); 63018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 63118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik VarLoopL(); 63218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrL.length; i++) { 63318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 10 ? anObject : anotherObject, mArrL[i]); 63418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 63518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik CrossOverLoopL(); 63618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrL.length; i++) { 63718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(i <= 20 ? anObject : anotherObject, mArrL[i]); 63818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 63918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik // False cross-over. 64018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik FalseCrossOverLoop1(); 64118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrI.length; i++) { 64218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(-3, mArrI[i]); 64318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 64418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik FalseCrossOverLoop2(); 64518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrF.length; i++) { 64618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(-4, mArrF[i]); 64718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 64818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik FalseCrossOverLoop3(); 64918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrJ.length; i++) { 65018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(-5, mArrJ[i]); 65118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 65218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik FalseCrossOverLoop4(); 65318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik for (int i = 0; i < mArrD.length; i++) { 65418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik expectEquals(-6, mArrD[i]); 65518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 65618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 65718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 65818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(boolean expected, boolean result) { 65918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 66018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 66118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 66218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 66318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 66418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(byte expected, byte result) { 66518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 66618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 66718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 66818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 66918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 67018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(char expected, char result) { 67118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 67218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 67318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 67418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 67518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 67618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(short expected, short result) { 67718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 67818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 67918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 68018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 68118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 68218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(int expected, int result) { 68318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 68418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 68518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 68618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 68718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 68818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(long expected, long result) { 68918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 69018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 69118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 69218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 69318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 69418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(float expected, float result) { 69518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 69618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 69718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 69818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 69918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 70018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(double expected, double result) { 70118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 70218b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 70318b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 70418b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 70518b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik 70618b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik private static void expectEquals(Object expected, Object result) { 70718b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik if (expected != result) { 70818b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik throw new Error("Expected: " + expected + ", found: " + result); 70918b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 71018b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik } 71118b36abc7cc03076fe1c399c0bb8ec8793cc6806Aart Bik} 712