diff options
| -rw-r--r-- | test/525-checker-arrays-and-fields/expected.txt (renamed from test/525-arrays-and-fields/expected.txt) | 0 | ||||
| -rw-r--r-- | test/525-checker-arrays-and-fields/info.txt (renamed from test/525-arrays-and-fields/info.txt) | 0 | ||||
| -rw-r--r-- | test/525-checker-arrays-and-fields/src/Main.java (renamed from test/525-arrays-and-fields/src/Main.java) | 296 |
3 files changed, 296 insertions, 0 deletions
diff --git a/test/525-arrays-and-fields/expected.txt b/test/525-checker-arrays-and-fields/expected.txt index e69de29bb2..e69de29bb2 100644 --- a/test/525-arrays-and-fields/expected.txt +++ b/test/525-checker-arrays-and-fields/expected.txt diff --git a/test/525-arrays-and-fields/info.txt b/test/525-checker-arrays-and-fields/info.txt index 3e16abf204..3e16abf204 100644 --- a/test/525-arrays-and-fields/info.txt +++ b/test/525-checker-arrays-and-fields/info.txt diff --git a/test/525-arrays-and-fields/src/Main.java b/test/525-checker-arrays-and-fields/src/Main.java index cb1e4afeab..a635a5157f 100644 --- a/test/525-arrays-and-fields/src/Main.java +++ b/test/525-checker-arrays-and-fields/src/Main.java @@ -80,56 +80,129 @@ public class Main { // // Loops on static arrays with invariant static field references. + // The checker is used to ensure hoisting occurred. // + /// CHECK-START: void Main.SInvLoopZ() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopZ() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopZ() { for (int i = 0; i < sArrZ.length; i++) { sArrZ[i] = sZ; } } + /// CHECK-START: void Main.SInvLoopB() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopB() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopB() { for (int i = 0; i < sArrB.length; i++) { sArrB[i] = sB; } } + /// CHECK-START: void Main.SInvLoopC() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopC() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopC() { for (int i = 0; i < sArrC.length; i++) { sArrC[i] = sC; } } + /// CHECK-START: void Main.SInvLoopS() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopS() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopS() { for (int i = 0; i < sArrS.length; i++) { sArrS[i] = sS; } } + /// CHECK-START: void Main.SInvLoopI() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopI() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopI() { for (int i = 0; i < sArrI.length; i++) { sArrI[i] = sI; } } + /// CHECK-START: void Main.SInvLoopJ() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopJ() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopJ() { for (int i = 0; i < sArrJ.length; i++) { sArrJ[i] = sJ; } } + /// CHECK-START: void Main.SInvLoopF() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopF() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopF() { for (int i = 0; i < sArrF.length; i++) { sArrF[i] = sF; } } + /// CHECK-START: void Main.SInvLoopD() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopD() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopD() { for (int i = 0; i < sArrD.length; i++) { sArrD[i] = sD; } } + /// CHECK-START: void Main.SInvLoopL() licm (before) + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + /// CHECK-DAG: StaticFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.SInvLoopL() licm (after) + /// CHECK-DAG: StaticFieldGet loop:none + /// CHECK-DAG: StaticFieldGet loop:none + private static void SInvLoopL() { for (int i = 0; i < sArrL.length; i++) { sArrL[i] = sL; @@ -138,6 +211,7 @@ public class Main { // // Loops on static arrays with variant static field references. + // Incorrect hoisting is detected by incorrect outcome. // private static void SVarLoopZ() { @@ -214,56 +288,130 @@ public class Main { // // Loops on static arrays with a cross-over reference. + // Incorrect hoisting is detected by incorrect outcome. + // In addition, the checker is used to detect no hoisting. // + /// CHECK-START: void Main.SCrossOverLoopZ() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopZ() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopZ() { for (int i = 0; i < sArrZ.length; i++) { sArrZ[i] = !sArrZ[20]; } } + /// CHECK-START: void Main.SCrossOverLoopB() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopB() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopB() { for (int i = 0; i < sArrB.length; i++) { sArrB[i] = (byte)(sArrB[20] + 2); } } + /// CHECK-START: void Main.SCrossOverLoopC() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopC() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopC() { for (int i = 0; i < sArrC.length; i++) { sArrC[i] = (char)(sArrC[20] + 2); } } + /// CHECK-START: void Main.SCrossOverLoopS() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopS() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopS() { for (int i = 0; i < sArrS.length; i++) { sArrS[i] = (short)(sArrS[20] + 2); } } + /// CHECK-START: void Main.SCrossOverLoopI() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopI() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopI() { for (int i = 0; i < sArrI.length; i++) { sArrI[i] = sArrI[20] + 2; } } + /// CHECK-START: void Main.SCrossOverLoopJ() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopJ() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopJ() { for (int i = 0; i < sArrJ.length; i++) { sArrJ[i] = sArrJ[20] + 2; } } + /// CHECK-START: void Main.SCrossOverLoopF() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopF() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopF() { for (int i = 0; i < sArrF.length; i++) { sArrF[i] = sArrF[20] + 2; } } + /// CHECK-START: void Main.SCrossOverLoopD() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopD() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopD() { for (int i = 0; i < sArrD.length; i++) { sArrD[i] = sArrD[20] + 2; } } + /// CHECK-START: void Main.SCrossOverLoopL() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.SCrossOverLoopL() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private static void SCrossOverLoopL() { for (int i = 0; i < sArrL.length; i++) { sArrL[i] = (sArrL[20] == anObject) ? anotherObject : anObject; @@ -272,56 +420,129 @@ public class Main { // // Loops on instance arrays with invariant instance field references. + // The checker is used to ensure hoisting occurred. // + /// CHECK-START: void Main.InvLoopZ() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopZ() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopZ() { for (int i = 0; i < mArrZ.length; i++) { mArrZ[i] = mZ; } } + /// CHECK-START: void Main.InvLoopB() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopB() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopB() { for (int i = 0; i < mArrB.length; i++) { mArrB[i] = mB; } } + /// CHECK-START: void Main.InvLoopC() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopC() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopC() { for (int i = 0; i < mArrC.length; i++) { mArrC[i] = mC; } } + /// CHECK-START: void Main.InvLoopS() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopS() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopS() { for (int i = 0; i < mArrS.length; i++) { mArrS[i] = mS; } } + /// CHECK-START: void Main.InvLoopI() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopI() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopI() { for (int i = 0; i < mArrI.length; i++) { mArrI[i] = mI; } } + /// CHECK-START: void Main.InvLoopJ() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopJ() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopJ() { for (int i = 0; i < mArrJ.length; i++) { mArrJ[i] = mJ; } } + /// CHECK-START: void Main.InvLoopF() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopF() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopF() { for (int i = 0; i < mArrF.length; i++) { mArrF[i] = mF; } } + /// CHECK-START: void Main.InvLoopD() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopD() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopD() { for (int i = 0; i < mArrD.length; i++) { mArrD[i] = mD; } } + /// CHECK-START: void Main.InvLoopL() licm (before) + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + /// CHECK-DAG: InstanceFieldGet loop:{{B\d+}} + + /// CHECK-START: void Main.InvLoopL() licm (after) + /// CHECK-DAG: InstanceFieldGet loop:none + /// CHECK-DAG: InstanceFieldGet loop:none + private void InvLoopL() { for (int i = 0; i < mArrL.length; i++) { mArrL[i] = mL; @@ -330,6 +551,7 @@ public class Main { // // Loops on instance arrays with variant instance field references. + // Incorrect hoisting is detected by incorrect outcome. // private void VarLoopZ() { @@ -406,56 +628,130 @@ public class Main { // // Loops on instance arrays with a cross-over reference. + // Incorrect hoisting is detected by incorrect outcome. + // In addition, the checker is used to detect no hoisting. // + /// CHECK-START: void Main.CrossOverLoopZ() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopZ() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopZ() { for (int i = 0; i < mArrZ.length; i++) { mArrZ[i] = !mArrZ[20]; } } + /// CHECK-START: void Main.CrossOverLoopB() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopB() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopB() { for (int i = 0; i < mArrB.length; i++) { mArrB[i] = (byte)(mArrB[20] + 2); } } + /// CHECK-START: void Main.CrossOverLoopC() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopC() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopC() { for (int i = 0; i < mArrC.length; i++) { mArrC[i] = (char)(mArrC[20] + 2); } } + /// CHECK-START: void Main.CrossOverLoopS() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopS() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopS() { for (int i = 0; i < mArrS.length; i++) { mArrS[i] = (short)(mArrS[20] + 2); } } + /// CHECK-START: void Main.CrossOverLoopI() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopI() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopI() { for (int i = 0; i < mArrI.length; i++) { mArrI[i] = mArrI[20] + 2; } } + /// CHECK-START: void Main.CrossOverLoopJ() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopJ() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopJ() { for (int i = 0; i < mArrJ.length; i++) { mArrJ[i] = mArrJ[20] + 2; } } + /// CHECK-START: void Main.CrossOverLoopF() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopF() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopF() { for (int i = 0; i < mArrF.length; i++) { mArrF[i] = mArrF[20] + 2; } } + /// CHECK-START: void Main.CrossOverLoopD() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopD() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopD() { for (int i = 0; i < mArrD.length; i++) { mArrD[i] = mArrD[20] + 2; } } + /// CHECK-START: void Main.CrossOverLoopL() licm (before) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + + /// CHECK-START: void Main.CrossOverLoopL() licm (after) + /// CHECK-DAG: ArrayGet loop:{{B\d+}} + /// CHECK-DAG: ArraySet loop:{{B\d+}} + private void CrossOverLoopL() { for (int i = 0; i < mArrL.length; i++) { mArrL[i] = (mArrL[20] == anObject) ? anotherObject : anObject; |