1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker // 18*795d594fSAndroid Build Coastguard Worker // Test on (in)variant static field and array references in loops. 19*795d594fSAndroid Build Coastguard Worker // 20*795d594fSAndroid Build Coastguard Worker public class Main { 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker private static Object anObject = new Object(); 23*795d594fSAndroid Build Coastguard Worker private static Object anotherObject = new Object(); 24*795d594fSAndroid Build Coastguard Worker 25*795d594fSAndroid Build Coastguard Worker // 26*795d594fSAndroid Build Coastguard Worker // Static fields. 27*795d594fSAndroid Build Coastguard Worker // 28*795d594fSAndroid Build Coastguard Worker 29*795d594fSAndroid Build Coastguard Worker private static boolean sZ; 30*795d594fSAndroid Build Coastguard Worker private static byte sB; 31*795d594fSAndroid Build Coastguard Worker private static char sC; 32*795d594fSAndroid Build Coastguard Worker private static short sS; 33*795d594fSAndroid Build Coastguard Worker private static int sI; 34*795d594fSAndroid Build Coastguard Worker private static long sJ; 35*795d594fSAndroid Build Coastguard Worker private static float sF; 36*795d594fSAndroid Build Coastguard Worker private static double sD; 37*795d594fSAndroid Build Coastguard Worker private static Object sL; 38*795d594fSAndroid Build Coastguard Worker 39*795d594fSAndroid Build Coastguard Worker // 40*795d594fSAndroid Build Coastguard Worker // Static arrays. 41*795d594fSAndroid Build Coastguard Worker // 42*795d594fSAndroid Build Coastguard Worker 43*795d594fSAndroid Build Coastguard Worker private static boolean[] sArrZ; 44*795d594fSAndroid Build Coastguard Worker private static byte[] sArrB; 45*795d594fSAndroid Build Coastguard Worker private static char[] sArrC; 46*795d594fSAndroid Build Coastguard Worker private static short[] sArrS; 47*795d594fSAndroid Build Coastguard Worker private static int[] sArrI; 48*795d594fSAndroid Build Coastguard Worker private static long[] sArrJ; 49*795d594fSAndroid Build Coastguard Worker private static float[] sArrF; 50*795d594fSAndroid Build Coastguard Worker private static double[] sArrD; 51*795d594fSAndroid Build Coastguard Worker private static Object[] sArrL; 52*795d594fSAndroid Build Coastguard Worker 53*795d594fSAndroid Build Coastguard Worker // 54*795d594fSAndroid Build Coastguard Worker // Loops on static arrays with invariant static field references. 55*795d594fSAndroid Build Coastguard Worker // The checker is used to ensure hoisting occurred. 56*795d594fSAndroid Build Coastguard Worker // 57*795d594fSAndroid Build Coastguard Worker 58*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopZ() licm (before) 59*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 60*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 61*795d594fSAndroid Build Coastguard Worker 62*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopZ() licm (after) 63*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 64*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 65*795d594fSAndroid Build Coastguard Worker InvLoopZ()66*795d594fSAndroid Build Coastguard Worker private static void InvLoopZ() { 67*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrZ.length; i++) { 68*795d594fSAndroid Build Coastguard Worker sArrZ[i] = sZ; 69*795d594fSAndroid Build Coastguard Worker } 70*795d594fSAndroid Build Coastguard Worker } 71*795d594fSAndroid Build Coastguard Worker 72*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopB() licm (before) 73*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 74*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 75*795d594fSAndroid Build Coastguard Worker 76*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopB() licm (after) 77*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 78*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 79*795d594fSAndroid Build Coastguard Worker InvLoopB()80*795d594fSAndroid Build Coastguard Worker private static void InvLoopB() { 81*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrB.length; i++) { 82*795d594fSAndroid Build Coastguard Worker sArrB[i] = sB; 83*795d594fSAndroid Build Coastguard Worker } 84*795d594fSAndroid Build Coastguard Worker } 85*795d594fSAndroid Build Coastguard Worker 86*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopC() licm (before) 87*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 88*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 89*795d594fSAndroid Build Coastguard Worker 90*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopC() licm (after) 91*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 92*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 93*795d594fSAndroid Build Coastguard Worker InvLoopC()94*795d594fSAndroid Build Coastguard Worker private static void InvLoopC() { 95*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrC.length; i++) { 96*795d594fSAndroid Build Coastguard Worker sArrC[i] = sC; 97*795d594fSAndroid Build Coastguard Worker } 98*795d594fSAndroid Build Coastguard Worker } 99*795d594fSAndroid Build Coastguard Worker 100*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopS() licm (before) 101*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 102*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 103*795d594fSAndroid Build Coastguard Worker 104*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopS() licm (after) 105*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 106*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 107*795d594fSAndroid Build Coastguard Worker InvLoopS()108*795d594fSAndroid Build Coastguard Worker private static void InvLoopS() { 109*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrS.length; i++) { 110*795d594fSAndroid Build Coastguard Worker sArrS[i] = sS; 111*795d594fSAndroid Build Coastguard Worker } 112*795d594fSAndroid Build Coastguard Worker } 113*795d594fSAndroid Build Coastguard Worker 114*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopI() licm (before) 115*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 116*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 117*795d594fSAndroid Build Coastguard Worker 118*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopI() licm (after) 119*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 120*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 121*795d594fSAndroid Build Coastguard Worker InvLoopI()122*795d594fSAndroid Build Coastguard Worker private static void InvLoopI() { 123*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 124*795d594fSAndroid Build Coastguard Worker sArrI[i] = sI; 125*795d594fSAndroid Build Coastguard Worker } 126*795d594fSAndroid Build Coastguard Worker } 127*795d594fSAndroid Build Coastguard Worker 128*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopJ() licm (before) 129*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 130*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 131*795d594fSAndroid Build Coastguard Worker 132*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopJ() licm (after) 133*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 134*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 135*795d594fSAndroid Build Coastguard Worker InvLoopJ()136*795d594fSAndroid Build Coastguard Worker private static void InvLoopJ() { 137*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 138*795d594fSAndroid Build Coastguard Worker sArrJ[i] = sJ; 139*795d594fSAndroid Build Coastguard Worker } 140*795d594fSAndroid Build Coastguard Worker } 141*795d594fSAndroid Build Coastguard Worker 142*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopF() licm (before) 143*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 144*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 145*795d594fSAndroid Build Coastguard Worker 146*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopF() licm (after) 147*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 148*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 149*795d594fSAndroid Build Coastguard Worker InvLoopF()150*795d594fSAndroid Build Coastguard Worker private static void InvLoopF() { 151*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 152*795d594fSAndroid Build Coastguard Worker sArrF[i] = sF; 153*795d594fSAndroid Build Coastguard Worker } 154*795d594fSAndroid Build Coastguard Worker } 155*795d594fSAndroid Build Coastguard Worker 156*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopD() licm (before) 157*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 158*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 159*795d594fSAndroid Build Coastguard Worker 160*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopD() licm (after) 161*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 162*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 163*795d594fSAndroid Build Coastguard Worker InvLoopD()164*795d594fSAndroid Build Coastguard Worker private static void InvLoopD() { 165*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 166*795d594fSAndroid Build Coastguard Worker sArrD[i] = sD; 167*795d594fSAndroid Build Coastguard Worker } 168*795d594fSAndroid Build Coastguard Worker } 169*795d594fSAndroid Build Coastguard Worker 170*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopL() licm (before) 171*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 172*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} 173*795d594fSAndroid Build Coastguard Worker 174*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.InvLoopL() licm (after) 175*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 176*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: StaticFieldGet loop:none 177*795d594fSAndroid Build Coastguard Worker InvLoopL()178*795d594fSAndroid Build Coastguard Worker private static void InvLoopL() { 179*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrL.length; i++) { 180*795d594fSAndroid Build Coastguard Worker sArrL[i] = sL; 181*795d594fSAndroid Build Coastguard Worker } 182*795d594fSAndroid Build Coastguard Worker } 183*795d594fSAndroid Build Coastguard Worker 184*795d594fSAndroid Build Coastguard Worker // 185*795d594fSAndroid Build Coastguard Worker // Loops on static arrays with variant static field references. 186*795d594fSAndroid Build Coastguard Worker // Incorrect hoisting is detected by incorrect outcome. 187*795d594fSAndroid Build Coastguard Worker // 188*795d594fSAndroid Build Coastguard Worker VarLoopZ()189*795d594fSAndroid Build Coastguard Worker private static void VarLoopZ() { 190*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrZ.length; i++) { 191*795d594fSAndroid Build Coastguard Worker sArrZ[i] = sZ; 192*795d594fSAndroid Build Coastguard Worker if (i == 10) 193*795d594fSAndroid Build Coastguard Worker sZ = !sZ; 194*795d594fSAndroid Build Coastguard Worker } 195*795d594fSAndroid Build Coastguard Worker } 196*795d594fSAndroid Build Coastguard Worker VarLoopB()197*795d594fSAndroid Build Coastguard Worker private static void VarLoopB() { 198*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrB.length; i++) { 199*795d594fSAndroid Build Coastguard Worker sArrB[i] = sB; 200*795d594fSAndroid Build Coastguard Worker if (i == 10) 201*795d594fSAndroid Build Coastguard Worker sB++; 202*795d594fSAndroid Build Coastguard Worker } 203*795d594fSAndroid Build Coastguard Worker } 204*795d594fSAndroid Build Coastguard Worker VarLoopC()205*795d594fSAndroid Build Coastguard Worker private static void VarLoopC() { 206*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrC.length; i++) { 207*795d594fSAndroid Build Coastguard Worker sArrC[i] = sC; 208*795d594fSAndroid Build Coastguard Worker if (i == 10) 209*795d594fSAndroid Build Coastguard Worker sC++; 210*795d594fSAndroid Build Coastguard Worker } 211*795d594fSAndroid Build Coastguard Worker } 212*795d594fSAndroid Build Coastguard Worker VarLoopS()213*795d594fSAndroid Build Coastguard Worker private static void VarLoopS() { 214*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrS.length; i++) { 215*795d594fSAndroid Build Coastguard Worker sArrS[i] = sS; 216*795d594fSAndroid Build Coastguard Worker if (i == 10) 217*795d594fSAndroid Build Coastguard Worker sS++; 218*795d594fSAndroid Build Coastguard Worker } 219*795d594fSAndroid Build Coastguard Worker } 220*795d594fSAndroid Build Coastguard Worker VarLoopI()221*795d594fSAndroid Build Coastguard Worker private static void VarLoopI() { 222*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 223*795d594fSAndroid Build Coastguard Worker sArrI[i] = sI; 224*795d594fSAndroid Build Coastguard Worker if (i == 10) 225*795d594fSAndroid Build Coastguard Worker sI++; 226*795d594fSAndroid Build Coastguard Worker } 227*795d594fSAndroid Build Coastguard Worker } 228*795d594fSAndroid Build Coastguard Worker VarLoopJ()229*795d594fSAndroid Build Coastguard Worker private static void VarLoopJ() { 230*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 231*795d594fSAndroid Build Coastguard Worker sArrJ[i] = sJ; 232*795d594fSAndroid Build Coastguard Worker if (i == 10) 233*795d594fSAndroid Build Coastguard Worker sJ++; 234*795d594fSAndroid Build Coastguard Worker } 235*795d594fSAndroid Build Coastguard Worker } 236*795d594fSAndroid Build Coastguard Worker VarLoopF()237*795d594fSAndroid Build Coastguard Worker private static void VarLoopF() { 238*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 239*795d594fSAndroid Build Coastguard Worker sArrF[i] = sF; 240*795d594fSAndroid Build Coastguard Worker if (i == 10) 241*795d594fSAndroid Build Coastguard Worker sF++; 242*795d594fSAndroid Build Coastguard Worker } 243*795d594fSAndroid Build Coastguard Worker } 244*795d594fSAndroid Build Coastguard Worker VarLoopD()245*795d594fSAndroid Build Coastguard Worker private static void VarLoopD() { 246*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 247*795d594fSAndroid Build Coastguard Worker sArrD[i] = sD; 248*795d594fSAndroid Build Coastguard Worker if (i == 10) 249*795d594fSAndroid Build Coastguard Worker sD++; 250*795d594fSAndroid Build Coastguard Worker } 251*795d594fSAndroid Build Coastguard Worker } 252*795d594fSAndroid Build Coastguard Worker VarLoopL()253*795d594fSAndroid Build Coastguard Worker private static void VarLoopL() { 254*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrL.length; i++) { 255*795d594fSAndroid Build Coastguard Worker sArrL[i] = sL; 256*795d594fSAndroid Build Coastguard Worker if (i == 10) 257*795d594fSAndroid Build Coastguard Worker sL = anotherObject; 258*795d594fSAndroid Build Coastguard Worker } 259*795d594fSAndroid Build Coastguard Worker } 260*795d594fSAndroid Build Coastguard Worker 261*795d594fSAndroid Build Coastguard Worker // 262*795d594fSAndroid Build Coastguard Worker // Loops on static arrays with a cross-over reference. 263*795d594fSAndroid Build Coastguard Worker // Incorrect hoisting is detected by incorrect outcome. 264*795d594fSAndroid Build Coastguard Worker // In addition, the checker is used to detect no hoisting. 265*795d594fSAndroid Build Coastguard Worker // 266*795d594fSAndroid Build Coastguard Worker 267*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopZ() licm (before) 268*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 269*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 270*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 271*795d594fSAndroid Build Coastguard Worker 272*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopZ() licm (after) 273*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 274*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 275*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 276*795d594fSAndroid Build Coastguard Worker CrossOverLoopZ()277*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopZ() { 278*795d594fSAndroid Build Coastguard Worker sArrZ[20] = false; 279*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrZ.length; i++) { 280*795d594fSAndroid Build Coastguard Worker sArrZ[i] = !sArrZ[20]; 281*795d594fSAndroid Build Coastguard Worker } 282*795d594fSAndroid Build Coastguard Worker } 283*795d594fSAndroid Build Coastguard Worker 284*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopB() licm (before) 285*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 286*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 287*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 288*795d594fSAndroid Build Coastguard Worker 289*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopB() licm (after) 290*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 291*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 292*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 293*795d594fSAndroid Build Coastguard Worker CrossOverLoopB()294*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopB() { 295*795d594fSAndroid Build Coastguard Worker sArrB[20] = 11; 296*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrB.length; i++) { 297*795d594fSAndroid Build Coastguard Worker sArrB[i] = (byte)(sArrB[20] + 2); 298*795d594fSAndroid Build Coastguard Worker } 299*795d594fSAndroid Build Coastguard Worker } 300*795d594fSAndroid Build Coastguard Worker 301*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopC() licm (before) 302*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 303*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 304*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 305*795d594fSAndroid Build Coastguard Worker 306*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopC() licm (after) 307*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 308*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 309*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 310*795d594fSAndroid Build Coastguard Worker CrossOverLoopC()311*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopC() { 312*795d594fSAndroid Build Coastguard Worker sArrC[20] = 11; 313*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrC.length; i++) { 314*795d594fSAndroid Build Coastguard Worker sArrC[i] = (char)(sArrC[20] + 2); 315*795d594fSAndroid Build Coastguard Worker } 316*795d594fSAndroid Build Coastguard Worker } 317*795d594fSAndroid Build Coastguard Worker 318*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopS() licm (before) 319*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 320*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 321*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 322*795d594fSAndroid Build Coastguard Worker 323*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopS() licm (after) 324*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 325*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 326*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 327*795d594fSAndroid Build Coastguard Worker CrossOverLoopS()328*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopS() { 329*795d594fSAndroid Build Coastguard Worker sArrS[20] = 11; 330*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrS.length; i++) { 331*795d594fSAndroid Build Coastguard Worker sArrS[i] = (short)(sArrS[20] + 2); 332*795d594fSAndroid Build Coastguard Worker } 333*795d594fSAndroid Build Coastguard Worker } 334*795d594fSAndroid Build Coastguard Worker 335*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopI() licm (before) 336*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 337*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 338*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 339*795d594fSAndroid Build Coastguard Worker 340*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopI() licm (after) 341*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 342*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 343*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 344*795d594fSAndroid Build Coastguard Worker CrossOverLoopI()345*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopI() { 346*795d594fSAndroid Build Coastguard Worker sArrI[20] = 11; 347*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 348*795d594fSAndroid Build Coastguard Worker sArrI[i] = sArrI[20] + 2; 349*795d594fSAndroid Build Coastguard Worker } 350*795d594fSAndroid Build Coastguard Worker } 351*795d594fSAndroid Build Coastguard Worker 352*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopJ() licm (before) 353*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 354*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 355*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 356*795d594fSAndroid Build Coastguard Worker 357*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopJ() licm (after) 358*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 359*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 360*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 361*795d594fSAndroid Build Coastguard Worker CrossOverLoopJ()362*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopJ() { 363*795d594fSAndroid Build Coastguard Worker sArrJ[20] = 11; 364*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 365*795d594fSAndroid Build Coastguard Worker sArrJ[i] = sArrJ[20] + 2; 366*795d594fSAndroid Build Coastguard Worker } 367*795d594fSAndroid Build Coastguard Worker } 368*795d594fSAndroid Build Coastguard Worker 369*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopF() licm (before) 370*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 371*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 372*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 373*795d594fSAndroid Build Coastguard Worker 374*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopF() licm (after) 375*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 376*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 377*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 378*795d594fSAndroid Build Coastguard Worker CrossOverLoopF()379*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopF() { 380*795d594fSAndroid Build Coastguard Worker sArrF[20] = 11; 381*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 382*795d594fSAndroid Build Coastguard Worker sArrF[i] = sArrF[20] + 2; 383*795d594fSAndroid Build Coastguard Worker } 384*795d594fSAndroid Build Coastguard Worker } 385*795d594fSAndroid Build Coastguard Worker 386*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopD() licm (before) 387*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 388*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 389*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 390*795d594fSAndroid Build Coastguard Worker 391*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopD() licm (after) 392*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 393*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 394*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 395*795d594fSAndroid Build Coastguard Worker CrossOverLoopD()396*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopD() { 397*795d594fSAndroid Build Coastguard Worker sArrD[20] = 11; 398*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 399*795d594fSAndroid Build Coastguard Worker sArrD[i] = sArrD[20] + 2; 400*795d594fSAndroid Build Coastguard Worker } 401*795d594fSAndroid Build Coastguard Worker } 402*795d594fSAndroid Build Coastguard Worker 403*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopL() licm (before) 404*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 405*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 406*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 407*795d594fSAndroid Build Coastguard Worker 408*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.CrossOverLoopL() licm (after) 409*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 410*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 411*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 412*795d594fSAndroid Build Coastguard Worker CrossOverLoopL()413*795d594fSAndroid Build Coastguard Worker private static void CrossOverLoopL() { 414*795d594fSAndroid Build Coastguard Worker sArrL[20] = anotherObject; 415*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrL.length; i++) { 416*795d594fSAndroid Build Coastguard Worker sArrL[i] = (sArrL[20] == anObject) ? anotherObject : anObject; 417*795d594fSAndroid Build Coastguard Worker } 418*795d594fSAndroid Build Coastguard Worker } 419*795d594fSAndroid Build Coastguard Worker 420*795d594fSAndroid Build Coastguard Worker // 421*795d594fSAndroid Build Coastguard Worker // False cross-over loops on static arrays with data types (I/F and J/D) that used 422*795d594fSAndroid Build Coastguard Worker // to be aliased in an older version of the compiler. This alias has been removed, 423*795d594fSAndroid Build Coastguard Worker // however, which enables hoisting the invariant array reference. 424*795d594fSAndroid Build Coastguard Worker // 425*795d594fSAndroid Build Coastguard Worker 426*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop1() licm (before) 427*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 428*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 429*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 430*795d594fSAndroid Build Coastguard Worker 431*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop1() licm (after) 432*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 433*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:none 434*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 435*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop1()436*795d594fSAndroid Build Coastguard Worker private static void FalseCrossOverLoop1() { 437*795d594fSAndroid Build Coastguard Worker sArrF[20] = -1; 438*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 439*795d594fSAndroid Build Coastguard Worker sArrI[i] = (int) sArrF[20] - 2; 440*795d594fSAndroid Build Coastguard Worker } 441*795d594fSAndroid Build Coastguard Worker } 442*795d594fSAndroid Build Coastguard Worker 443*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop2() licm (before) 444*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 445*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 446*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 447*795d594fSAndroid Build Coastguard Worker 448*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop2() licm (after) 449*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 450*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:none 451*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 452*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop2()453*795d594fSAndroid Build Coastguard Worker private static void FalseCrossOverLoop2() { 454*795d594fSAndroid Build Coastguard Worker sArrI[20] = -2; 455*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 456*795d594fSAndroid Build Coastguard Worker sArrF[i] = sArrI[20] - 2; 457*795d594fSAndroid Build Coastguard Worker } 458*795d594fSAndroid Build Coastguard Worker } 459*795d594fSAndroid Build Coastguard Worker 460*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop3() licm (before) 461*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 462*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 463*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 464*795d594fSAndroid Build Coastguard Worker 465*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop3() licm (after) 466*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 467*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:none 468*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 469*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop3()470*795d594fSAndroid Build Coastguard Worker private static void FalseCrossOverLoop3() { 471*795d594fSAndroid Build Coastguard Worker sArrD[20] = -3; 472*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 473*795d594fSAndroid Build Coastguard Worker sArrJ[i] = (long) sArrD[20] - 2; 474*795d594fSAndroid Build Coastguard Worker } 475*795d594fSAndroid Build Coastguard Worker } 476*795d594fSAndroid Build Coastguard Worker 477*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop4() licm (before) 478*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 479*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:{{B\d+}} 480*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 481*795d594fSAndroid Build Coastguard Worker 482*795d594fSAndroid Build Coastguard Worker /// CHECK-START: void Main.FalseCrossOverLoop4() licm (after) 483*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:none 484*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArrayGet loop:none 485*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: ArraySet loop:{{B\d+}} 486*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop4()487*795d594fSAndroid Build Coastguard Worker private static void FalseCrossOverLoop4() { 488*795d594fSAndroid Build Coastguard Worker sArrJ[20] = -4; 489*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 490*795d594fSAndroid Build Coastguard Worker sArrD[i] = sArrJ[20] - 2; 491*795d594fSAndroid Build Coastguard Worker } 492*795d594fSAndroid Build Coastguard Worker } 493*795d594fSAndroid Build Coastguard Worker 494*795d594fSAndroid Build Coastguard Worker // 495*795d594fSAndroid Build Coastguard Worker // Main driver and testers. 496*795d594fSAndroid Build Coastguard Worker // 497*795d594fSAndroid Build Coastguard Worker main(String[] args)498*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 499*795d594fSAndroid Build Coastguard Worker DoStaticTests(); 500*795d594fSAndroid Build Coastguard Worker System.out.println("passed"); 501*795d594fSAndroid Build Coastguard Worker } 502*795d594fSAndroid Build Coastguard Worker DoStaticTests()503*795d594fSAndroid Build Coastguard Worker private static void DoStaticTests() { 504*795d594fSAndroid Build Coastguard Worker // Type Z. 505*795d594fSAndroid Build Coastguard Worker sZ = true; 506*795d594fSAndroid Build Coastguard Worker sArrZ = new boolean[100]; 507*795d594fSAndroid Build Coastguard Worker InvLoopZ(); 508*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrZ.length; i++) { 509*795d594fSAndroid Build Coastguard Worker expectEquals(true, sArrZ[i]); 510*795d594fSAndroid Build Coastguard Worker } 511*795d594fSAndroid Build Coastguard Worker VarLoopZ(); 512*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrZ.length; i++) { 513*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10, sArrZ[i]); 514*795d594fSAndroid Build Coastguard Worker } 515*795d594fSAndroid Build Coastguard Worker CrossOverLoopZ(); 516*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrZ.length; i++) { 517*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20, sArrZ[i]); 518*795d594fSAndroid Build Coastguard Worker } 519*795d594fSAndroid Build Coastguard Worker // Type B. 520*795d594fSAndroid Build Coastguard Worker sB = 1; 521*795d594fSAndroid Build Coastguard Worker sArrB = new byte[100]; 522*795d594fSAndroid Build Coastguard Worker InvLoopB(); 523*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrB.length; i++) { 524*795d594fSAndroid Build Coastguard Worker expectEquals(1, sArrB[i]); 525*795d594fSAndroid Build Coastguard Worker } 526*795d594fSAndroid Build Coastguard Worker VarLoopB(); 527*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrB.length; i++) { 528*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? 1 : 2, sArrB[i]); 529*795d594fSAndroid Build Coastguard Worker } 530*795d594fSAndroid Build Coastguard Worker CrossOverLoopB(); 531*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrB.length; i++) { 532*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? 13 : 15, sArrB[i]); 533*795d594fSAndroid Build Coastguard Worker } 534*795d594fSAndroid Build Coastguard Worker // Type C. 535*795d594fSAndroid Build Coastguard Worker sC = 2; 536*795d594fSAndroid Build Coastguard Worker sArrC = new char[100]; 537*795d594fSAndroid Build Coastguard Worker InvLoopC(); 538*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrC.length; i++) { 539*795d594fSAndroid Build Coastguard Worker expectEquals(2, sArrC[i]); 540*795d594fSAndroid Build Coastguard Worker } 541*795d594fSAndroid Build Coastguard Worker VarLoopC(); 542*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrC.length; i++) { 543*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? 2 : 3, sArrC[i]); 544*795d594fSAndroid Build Coastguard Worker } 545*795d594fSAndroid Build Coastguard Worker CrossOverLoopC(); 546*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrC.length; i++) { 547*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? 13 : 15, sArrC[i]); 548*795d594fSAndroid Build Coastguard Worker } 549*795d594fSAndroid Build Coastguard Worker // Type S. 550*795d594fSAndroid Build Coastguard Worker sS = 3; 551*795d594fSAndroid Build Coastguard Worker sArrS = new short[100]; 552*795d594fSAndroid Build Coastguard Worker InvLoopS(); 553*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrS.length; i++) { 554*795d594fSAndroid Build Coastguard Worker expectEquals(3, sArrS[i]); 555*795d594fSAndroid Build Coastguard Worker } 556*795d594fSAndroid Build Coastguard Worker VarLoopS(); 557*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrS.length; i++) { 558*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? 3 : 4, sArrS[i]); 559*795d594fSAndroid Build Coastguard Worker } 560*795d594fSAndroid Build Coastguard Worker CrossOverLoopS(); 561*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrS.length; i++) { 562*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? 13 : 15, sArrS[i]); 563*795d594fSAndroid Build Coastguard Worker } 564*795d594fSAndroid Build Coastguard Worker // Type I. 565*795d594fSAndroid Build Coastguard Worker sI = 4; 566*795d594fSAndroid Build Coastguard Worker sArrI = new int[100]; 567*795d594fSAndroid Build Coastguard Worker InvLoopI(); 568*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 569*795d594fSAndroid Build Coastguard Worker expectEquals(4, sArrI[i]); 570*795d594fSAndroid Build Coastguard Worker } 571*795d594fSAndroid Build Coastguard Worker VarLoopI(); 572*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 573*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? 4 : 5, sArrI[i]); 574*795d594fSAndroid Build Coastguard Worker } 575*795d594fSAndroid Build Coastguard Worker CrossOverLoopI(); 576*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 577*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? 13 : 15, sArrI[i]); 578*795d594fSAndroid Build Coastguard Worker } 579*795d594fSAndroid Build Coastguard Worker // Type J. 580*795d594fSAndroid Build Coastguard Worker sJ = 5; 581*795d594fSAndroid Build Coastguard Worker sArrJ = new long[100]; 582*795d594fSAndroid Build Coastguard Worker InvLoopJ(); 583*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 584*795d594fSAndroid Build Coastguard Worker expectEquals(5, sArrJ[i]); 585*795d594fSAndroid Build Coastguard Worker } 586*795d594fSAndroid Build Coastguard Worker VarLoopJ(); 587*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 588*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? 5 : 6, sArrJ[i]); 589*795d594fSAndroid Build Coastguard Worker } 590*795d594fSAndroid Build Coastguard Worker CrossOverLoopJ(); 591*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 592*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? 13 : 15, sArrJ[i]); 593*795d594fSAndroid Build Coastguard Worker } 594*795d594fSAndroid Build Coastguard Worker // Type F. 595*795d594fSAndroid Build Coastguard Worker sF = 6.0f; 596*795d594fSAndroid Build Coastguard Worker sArrF = new float[100]; 597*795d594fSAndroid Build Coastguard Worker InvLoopF(); 598*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 599*795d594fSAndroid Build Coastguard Worker expectEquals(6, sArrF[i]); 600*795d594fSAndroid Build Coastguard Worker } 601*795d594fSAndroid Build Coastguard Worker VarLoopF(); 602*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 603*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? 6 : 7, sArrF[i]); 604*795d594fSAndroid Build Coastguard Worker } 605*795d594fSAndroid Build Coastguard Worker CrossOverLoopF(); 606*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 607*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? 13 : 15, sArrF[i]); 608*795d594fSAndroid Build Coastguard Worker } 609*795d594fSAndroid Build Coastguard Worker // Type D. 610*795d594fSAndroid Build Coastguard Worker sD = 7.0; 611*795d594fSAndroid Build Coastguard Worker sArrD = new double[100]; 612*795d594fSAndroid Build Coastguard Worker InvLoopD(); 613*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 614*795d594fSAndroid Build Coastguard Worker expectEquals(7.0, sArrD[i]); 615*795d594fSAndroid Build Coastguard Worker } 616*795d594fSAndroid Build Coastguard Worker VarLoopD(); 617*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 618*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? 7 : 8, sArrD[i]); 619*795d594fSAndroid Build Coastguard Worker } 620*795d594fSAndroid Build Coastguard Worker CrossOverLoopD(); 621*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 622*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? 13 : 15, sArrD[i]); 623*795d594fSAndroid Build Coastguard Worker } 624*795d594fSAndroid Build Coastguard Worker // Type L. 625*795d594fSAndroid Build Coastguard Worker sL = anObject; 626*795d594fSAndroid Build Coastguard Worker sArrL = new Object[100]; 627*795d594fSAndroid Build Coastguard Worker InvLoopL(); 628*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrL.length; i++) { 629*795d594fSAndroid Build Coastguard Worker expectEquals(anObject, sArrL[i]); 630*795d594fSAndroid Build Coastguard Worker } 631*795d594fSAndroid Build Coastguard Worker VarLoopL(); 632*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrL.length; i++) { 633*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 10 ? anObject : anotherObject, sArrL[i]); 634*795d594fSAndroid Build Coastguard Worker } 635*795d594fSAndroid Build Coastguard Worker CrossOverLoopL(); 636*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrL.length; i++) { 637*795d594fSAndroid Build Coastguard Worker expectEquals(i <= 20 ? anObject : anotherObject, sArrL[i]); 638*795d594fSAndroid Build Coastguard Worker } 639*795d594fSAndroid Build Coastguard Worker // False cross-over. 640*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop1(); 641*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrI.length; i++) { 642*795d594fSAndroid Build Coastguard Worker expectEquals(-3, sArrI[i]); 643*795d594fSAndroid Build Coastguard Worker } 644*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop2(); 645*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrF.length; i++) { 646*795d594fSAndroid Build Coastguard Worker expectEquals(-4, sArrF[i]); 647*795d594fSAndroid Build Coastguard Worker } 648*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop3(); 649*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrJ.length; i++) { 650*795d594fSAndroid Build Coastguard Worker expectEquals(-5, sArrJ[i]); 651*795d594fSAndroid Build Coastguard Worker } 652*795d594fSAndroid Build Coastguard Worker FalseCrossOverLoop4(); 653*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < sArrD.length; i++) { 654*795d594fSAndroid Build Coastguard Worker expectEquals(-6, sArrD[i]); 655*795d594fSAndroid Build Coastguard Worker } 656*795d594fSAndroid Build Coastguard Worker } 657*795d594fSAndroid Build Coastguard Worker expectEquals(boolean expected, boolean result)658*795d594fSAndroid Build Coastguard Worker private static void expectEquals(boolean expected, boolean result) { 659*795d594fSAndroid Build Coastguard Worker if (expected != result) { 660*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 661*795d594fSAndroid Build Coastguard Worker } 662*795d594fSAndroid Build Coastguard Worker } 663*795d594fSAndroid Build Coastguard Worker expectEquals(byte expected, byte result)664*795d594fSAndroid Build Coastguard Worker private static void expectEquals(byte expected, byte result) { 665*795d594fSAndroid Build Coastguard Worker if (expected != result) { 666*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 667*795d594fSAndroid Build Coastguard Worker } 668*795d594fSAndroid Build Coastguard Worker } 669*795d594fSAndroid Build Coastguard Worker expectEquals(char expected, char result)670*795d594fSAndroid Build Coastguard Worker private static void expectEquals(char expected, char result) { 671*795d594fSAndroid Build Coastguard Worker if (expected != result) { 672*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 673*795d594fSAndroid Build Coastguard Worker } 674*795d594fSAndroid Build Coastguard Worker } 675*795d594fSAndroid Build Coastguard Worker expectEquals(short expected, short result)676*795d594fSAndroid Build Coastguard Worker private static void expectEquals(short expected, short result) { 677*795d594fSAndroid Build Coastguard Worker if (expected != result) { 678*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 679*795d594fSAndroid Build Coastguard Worker } 680*795d594fSAndroid Build Coastguard Worker } 681*795d594fSAndroid Build Coastguard Worker expectEquals(int expected, int result)682*795d594fSAndroid Build Coastguard Worker private static void expectEquals(int expected, int result) { 683*795d594fSAndroid Build Coastguard Worker if (expected != result) { 684*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 685*795d594fSAndroid Build Coastguard Worker } 686*795d594fSAndroid Build Coastguard Worker } 687*795d594fSAndroid Build Coastguard Worker expectEquals(long expected, long result)688*795d594fSAndroid Build Coastguard Worker private static void expectEquals(long expected, long result) { 689*795d594fSAndroid Build Coastguard Worker if (expected != result) { 690*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 691*795d594fSAndroid Build Coastguard Worker } 692*795d594fSAndroid Build Coastguard Worker } 693*795d594fSAndroid Build Coastguard Worker expectEquals(float expected, float result)694*795d594fSAndroid Build Coastguard Worker private static void expectEquals(float expected, float result) { 695*795d594fSAndroid Build Coastguard Worker if (expected != result) { 696*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 697*795d594fSAndroid Build Coastguard Worker } 698*795d594fSAndroid Build Coastguard Worker } 699*795d594fSAndroid Build Coastguard Worker expectEquals(double expected, double result)700*795d594fSAndroid Build Coastguard Worker private static void expectEquals(double expected, double result) { 701*795d594fSAndroid Build Coastguard Worker if (expected != result) { 702*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 703*795d594fSAndroid Build Coastguard Worker } 704*795d594fSAndroid Build Coastguard Worker } 705*795d594fSAndroid Build Coastguard Worker expectEquals(Object expected, Object result)706*795d594fSAndroid Build Coastguard Worker private static void expectEquals(Object expected, Object result) { 707*795d594fSAndroid Build Coastguard Worker if (expected != result) { 708*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 709*795d594fSAndroid Build Coastguard Worker } 710*795d594fSAndroid Build Coastguard Worker } 711*795d594fSAndroid Build Coastguard Worker } 712