xref: /aosp_15_r20/art/test/525-checker-arrays-fields1/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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