< prev index next >
test/hotspot/jtreg/compiler/loopopts/TestMoveStoresOutOfLoops.java
Print this page
@@ -21,11 +21,11 @@
* questions.
*/
/**
* @test
- * @bug 8080289
+ * @bug 8080289 8189067
* @summary Move stores out of loops if possible
*
* @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation
* -XX:CompileCommand=dontinline,compiler.loopopts.TestMoveStoresOutOfLoops::test*
* compiler.loopopts.TestMoveStoresOutOfLoops
@@ -41,10 +41,11 @@
public class TestMoveStoresOutOfLoops {
private static long[] array = new long[10];
private static long[] array2 = new long[10];
private static boolean[] array3 = new boolean[1000];
+ private static int[] array4 = new int[1000];
private static byte[] byte_array = new byte[10];
// Array store should be moved out of the loop, value stored
// should be 999, the loop should be eliminated
static void test_after_1(int idx) {
@@ -106,10 +107,19 @@
return;
}
}
}
+ // Array store can be moved out of the inner loop
+ static void test_after_7(int idx) {
+ for (int i = 0; i < 1000; i++) {
+ for (int j = 0; j <= 42; j++) {
+ array4[i] = j;
+ }
+ }
+ }
+
// Optimize out redundant stores
static void test_stores_1(int ignored) {
array[0] = 0;
array[1] = 1;
array[2] = 2;
@@ -283,20 +293,32 @@
}
}
return success;
}
+ static boolean array_check5(String name) {
+ boolean success = true;
+ for (int i = 0; i < 1000; i++) {
+ if (array4[i] != 42) {
+ success = false;
+ System.out.println(name + " failed: array[" + i + "] = " + array4[i]);
+ }
+ }
+ return success;
+ }
+
static public void main(String[] args) throws Exception {
TestMoveStoresOutOfLoops test = new TestMoveStoresOutOfLoops();
test.doTest("test_after_1", TestMoveStoresOutOfLoops::array_init, TestMoveStoresOutOfLoops::array_check);
test.doTest("test_after_2", TestMoveStoresOutOfLoops::array_init, TestMoveStoresOutOfLoops::array_check);
test.doTest("test_after_3", TestMoveStoresOutOfLoops::array_init, TestMoveStoresOutOfLoops::array_check);
test.doTest("test_after_4", TestMoveStoresOutOfLoops::array_init, TestMoveStoresOutOfLoops::array_check);
test.doTest("test_after_5", TestMoveStoresOutOfLoops::array_init2, TestMoveStoresOutOfLoops::array_check2);
test.doTest("test_after_6", TestMoveStoresOutOfLoops::array_init, TestMoveStoresOutOfLoops::array_check);
array3[999] = true;
test.doTest("test_after_6", TestMoveStoresOutOfLoops::array_init, TestMoveStoresOutOfLoops::array_check);
+ test.doTest("test_after_7", TestMoveStoresOutOfLoops::array_init, TestMoveStoresOutOfLoops::array_check5);
test.doTest("test_stores_1", TestMoveStoresOutOfLoops::array_init3, TestMoveStoresOutOfLoops::array_check3);
test.doTest("test_stores_2", TestMoveStoresOutOfLoops::array_init3, TestMoveStoresOutOfLoops::array_check3);
test.doTest("test_stores_3", TestMoveStoresOutOfLoops::array_init4, TestMoveStoresOutOfLoops::array_check4);
< prev index next >