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