# HG changeset patch # User Christos Kotselidis # Date 1367175213 -7200 # Node ID 5618a717b8ade44bd15b5c99f7a143c871bb85a5 # Parent 365ca8db15a024a586bfb4c930384dd9d117bb81 Add comments into WriteBarrierVerificationTest diff -r 365ca8db15a0 -r 5618a717b8ad graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/WriteBarrierVerificationTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/WriteBarrierVerificationTest.java Sun Apr 28 19:50:43 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/WriteBarrierVerificationTest.java Sun Apr 28 20:53:33 2013 +0200 @@ -43,7 +43,7 @@ * array of write barrier indices and the total write barrier number are passed as parameters. The * indices denote the barriers that will be manually removed. The write barrier verification phase * runs after the write barrier removal and depending on the result an assertion might be generated. - * The tests anticipate or not the presence of an assertion generated by the verification phase. + * The tests anticipate the presence or not of an assertion generated by the verification phase. */ public class WriteBarrierVerificationTest extends GraalCompilerTest { @@ -71,6 +71,16 @@ safepoint(); } + @Test(expected = AssertionError.class) + public void test1() { + test("test1Snippet", 2, new int[]{1}); + } + + @Test(expected = AssertionError.class) + public void test2() { + test("test1Snippet", 2, new int[]{2}); + } + public static void test2Snippet() { Container main = new Container(); Container temp1 = new Container(); @@ -84,6 +94,16 @@ safepoint(); } + @Test(expected = AssertionError.class) + public void test3() { + test("test2Snippet", 2, new int[]{1}); + } + + @Test + public void test4() { + test("test2Snippet", 2, new int[]{2}); + } + public static void test3Snippet(boolean test) { Container main = new Container(); Container temp1 = new Container(); @@ -105,6 +125,36 @@ } } + @Test(expected = AssertionError.class) + public void test5() { + test("test3Snippet", 4, new int[]{1, 2}); + } + + @Test(expected = AssertionError.class) + public void test6() { + test("test3Snippet", 4, new int[]{3, 4}); + } + + @Test(expected = AssertionError.class) + public void test7() { + test("test3Snippet", 4, new int[]{1}); + } + + @Test + public void test8() { + test("test3Snippet", 4, new int[]{2}); + } + + @Test(expected = AssertionError.class) + public void test9() { + test("test3Snippet", 4, new int[]{3}); + } + + @Test + public void test10() { + test("test3Snippet", 4, new int[]{4}); + } + public static void test4Snippet(boolean test) { Container main = new Container(); Container temp1 = new Container(); @@ -127,6 +177,21 @@ } } + @Test(expected = AssertionError.class) + public void test11() { + test("test4Snippet", 5, new int[]{2, 3}); + } + + @Test(expected = AssertionError.class) + public void test12() { + test("test4Snippet", 5, new int[]{4, 5}); + } + + @Test(expected = AssertionError.class) + public void test13() { + test("test4Snippet", 5, new int[]{1}); + } + public static void test5Snippet() { Container main = new Container(); Container temp1 = new Container(); @@ -148,6 +213,41 @@ safepoint(); } + @Test(expected = AssertionError.class) + public void test14() { + test("test5Snippet", 5, new int[]{1}); + } + + @Test + public void test15() { + test("test5Snippet", 5, new int[]{2}); + } + + @Test + public void test16() { + test("test5Snippet", 5, new int[]{4}); + } + + @Test + public void test17() { + test("test5Snippet", 5, new int[]{3}); + } + + @Test + public void test18() { + test("test5Snippet", 5, new int[]{5}); + } + + @Test + public void test19() { + test("test5Snippet", 5, new int[]{2, 3}); + } + + @Test + public void test20() { + test("test5Snippet", 5, new int[]{4, 5}); + } + public static void test6Snippet(boolean test) { Container main = new Container(); Container temp1 = new Container(); @@ -169,6 +269,26 @@ safepoint(); } + @Test(expected = AssertionError.class) + public void test21() { + test("test6Snippet", 5, new int[]{1}); + } + + @Test(expected = AssertionError.class) + public void test22() { + test("test6Snippet", 5, new int[]{1, 2}); + } + + @Test(expected = AssertionError.class) + public void test23() { + test("test6Snippet", 5, new int[]{3}); + } + + @Test + public void test24() { + test("test6Snippet", 5, new int[]{4}); + } + public static void test7Snippet(boolean test) { Container main = new Container(); Container temp1 = new Container(); @@ -185,6 +305,26 @@ safepoint(); } + @Test + public void test25() { + test("test7Snippet", 3, new int[]{2}); + } + + @Test + public void test26() { + test("test7Snippet", 3, new int[]{3}); + } + + @Test + public void test27() { + test("test7Snippet", 3, new int[]{2, 3}); + } + + @Test(expected = AssertionError.class) + public void test28() { + test("test7Snippet", 3, new int[]{1}); + } + public static void test8Snippet(boolean test) { Container main = new Container(); Container temp1 = new Container(); @@ -199,6 +339,21 @@ safepoint(); } + @Test(expected = AssertionError.class) + public void test29() { + test("test8Snippet", 2, new int[]{1}); + } + + @Test(expected = AssertionError.class) + public void test30() { + test("test8Snippet", 2, new int[]{2}); + } + + @Test(expected = AssertionError.class) + public void test31() { + test("test8Snippet", 2, new int[]{1, 2}); + } + public static void test9Snippet(boolean test) { Container main1 = new Container(); Container main2 = new Container(); @@ -219,6 +374,36 @@ safepoint(); } + @Test(expected = AssertionError.class) + public void test32() { + test("test9Snippet", 4, new int[]{1}); + } + + @Test(expected = AssertionError.class) + public void test33() { + test("test9Snippet", 4, new int[]{2}); + } + + @Test(expected = AssertionError.class) + public void test34() { + test("test9Snippet", 4, new int[]{3}); + } + + @Test(expected = AssertionError.class) + public void test35() { + test("test9Snippet", 4, new int[]{4}); + } + + @Test(expected = AssertionError.class) + public void test36() { + test("test9Snippet", 4, new int[]{1, 2}); + } + + @Test(expected = AssertionError.class) + public void test37() { + test("test9Snippet", 4, new int[]{3, 4}); + } + public static void test10Snippet(boolean test) { Container main1 = new Container(); Container main2 = new Container(); @@ -241,6 +426,46 @@ safepoint(); } + @Test(expected = AssertionError.class) + public void test38() { + test("test10Snippet", 5, new int[]{1}); + } + + @Test(expected = AssertionError.class) + public void test39() { + test("test10Snippet", 5, new int[]{2}); + } + + @Test(expected = AssertionError.class) + public void test40() { + test("test10Snippet", 5, new int[]{3}); + } + + @Test(expected = AssertionError.class) + public void test41() { + test("test10Snippet", 5, new int[]{4}); + } + + @Test + public void test42() { + test("test10Snippet", 5, new int[]{5}); + } + + @Test(expected = AssertionError.class) + public void test43() { + test("test10Snippet", 5, new int[]{1, 2}); + } + + @Test(expected = AssertionError.class) + public void test44() { + test("test10Snippet", 5, new int[]{1, 2, 3}); + } + + @Test(expected = AssertionError.class) + public void test45() { + test("test10Snippet", 5, new int[]{3, 4}); + } + public static void test11Snippet(boolean test) { Container main1 = new Container(); Container main2 = new Container(); @@ -281,262 +506,6 @@ safepoint(); } - public static void test12Snippet(boolean test) { - Container main = new Container(); - Container main1 = new Container(); - Container temp1 = new Container(); - Container temp2 = new Container(); - barrierIndex = 0; - safepoint(); - barrierIndex = 7; - main1.a = temp1; - for (int i = 0; i < 10; i++) { - if (test) { - barrierIndex = 1; - main.a = temp1; - barrierIndex = 2; - main.b = temp2; - } else { - barrierIndex = 3; - main.a = temp1; - barrierIndex = 4; - main.b = temp2; - } - } - barrierIndex = 5; - main.a = temp1; - barrierIndex = 6; - main.b = temp1; - barrierIndex = 8; - main1.b = temp1; - safepoint(); - } - - @Test(expected = AssertionError.class) - public void test1() { - test("test1Snippet", 2, new int[]{1}); - } - - @Test(expected = AssertionError.class) - public void test2() { - test("test1Snippet", 2, new int[]{2}); - } - - @Test(expected = AssertionError.class) - public void test3() { - test("test2Snippet", 2, new int[]{1}); - } - - @Test - public void test4() { - test("test2Snippet", 2, new int[]{2}); - } - - @Test(expected = AssertionError.class) - public void test5() { - test("test3Snippet", 4, new int[]{1, 2}); - } - - @Test(expected = AssertionError.class) - public void test6() { - test("test3Snippet", 4, new int[]{3, 4}); - } - - @Test(expected = AssertionError.class) - public void test7() { - test("test3Snippet", 4, new int[]{1}); - } - - @Test - public void test8() { - test("test3Snippet", 4, new int[]{2}); - } - - @Test(expected = AssertionError.class) - public void test9() { - test("test3Snippet", 4, new int[]{3}); - } - - @Test - public void test10() { - test("test3Snippet", 4, new int[]{4}); - } - - @Test(expected = AssertionError.class) - public void test11() { - test("test4Snippet", 5, new int[]{2, 3}); - } - - @Test(expected = AssertionError.class) - public void test12() { - test("test4Snippet", 5, new int[]{4, 5}); - } - - @Test(expected = AssertionError.class) - public void test13() { - test("test4Snippet", 5, new int[]{1}); - } - - @Test(expected = AssertionError.class) - public void test14() { - test("test5Snippet", 5, new int[]{1}); - } - - @Test - public void test15() { - test("test5Snippet", 5, new int[]{2}); - } - - @Test - public void test16() { - test("test5Snippet", 5, new int[]{4}); - } - - @Test - public void test17() { - test("test5Snippet", 5, new int[]{3}); - } - - @Test - public void test18() { - test("test5Snippet", 5, new int[]{5}); - } - - @Test - public void test19() { - test("test5Snippet", 5, new int[]{2, 3}); - } - - @Test - public void test20() { - test("test5Snippet", 5, new int[]{4, 5}); - } - - @Test(expected = AssertionError.class) - public void test21() { - test("test6Snippet", 5, new int[]{1}); - } - - @Test(expected = AssertionError.class) - public void test22() { - test("test6Snippet", 5, new int[]{1, 2}); - } - - @Test(expected = AssertionError.class) - public void test23() { - test("test6Snippet", 5, new int[]{3}); - } - - @Test - public void test24() { - test("test6Snippet", 5, new int[]{4}); - } - - @Test - public void test25() { - test("test7Snippet", 3, new int[]{2}); - } - - @Test - public void test26() { - test("test7Snippet", 3, new int[]{3}); - } - - @Test - public void test27() { - test("test7Snippet", 3, new int[]{2, 3}); - } - - @Test(expected = AssertionError.class) - public void test28() { - test("test7Snippet", 3, new int[]{1}); - } - - @Test(expected = AssertionError.class) - public void test29() { - test("test8Snippet", 2, new int[]{1}); - } - - @Test(expected = AssertionError.class) - public void test30() { - test("test8Snippet", 2, new int[]{2}); - } - - @Test(expected = AssertionError.class) - public void test31() { - test("test8Snippet", 2, new int[]{1, 2}); - } - - @Test(expected = AssertionError.class) - public void test32() { - test("test9Snippet", 4, new int[]{1}); - } - - @Test(expected = AssertionError.class) - public void test33() { - test("test9Snippet", 4, new int[]{2}); - } - - @Test(expected = AssertionError.class) - public void test34() { - test("test9Snippet", 4, new int[]{3}); - } - - @Test(expected = AssertionError.class) - public void test35() { - test("test9Snippet", 4, new int[]{4}); - } - - @Test(expected = AssertionError.class) - public void test36() { - test("test9Snippet", 4, new int[]{1, 2}); - } - - @Test(expected = AssertionError.class) - public void test37() { - test("test9Snippet", 4, new int[]{3, 4}); - } - - @Test(expected = AssertionError.class) - public void test38() { - test("test10Snippet", 5, new int[]{1}); - } - - @Test(expected = AssertionError.class) - public void test39() { - test("test10Snippet", 5, new int[]{2}); - } - - @Test(expected = AssertionError.class) - public void test40() { - test("test10Snippet", 5, new int[]{3}); - } - - @Test(expected = AssertionError.class) - public void test41() { - test("test10Snippet", 5, new int[]{4}); - } - - @Test - public void test42() { - test("test10Snippet", 5, new int[]{5}); - } - - @Test(expected = AssertionError.class) - public void test43() { - test("test10Snippet", 5, new int[]{1, 2}); - } - - @Test(expected = AssertionError.class) - public void test44() { - test("test10Snippet", 5, new int[]{1, 2, 3}); - } - - @Test(expected = AssertionError.class) - public void test45() { - test("test10Snippet", 5, new int[]{3, 4}); - } - @Test(expected = AssertionError.class) public void test46() { test("test11Snippet", 11, new int[]{1}); @@ -592,6 +561,37 @@ test("test11Snippet", 11, new int[]{11}); } + public static void test12Snippet(boolean test) { + Container main = new Container(); + Container main1 = new Container(); + Container temp1 = new Container(); + Container temp2 = new Container(); + barrierIndex = 0; + safepoint(); + barrierIndex = 7; + main1.a = temp1; + for (int i = 0; i < 10; i++) { + if (test) { + barrierIndex = 1; + main.a = temp1; + barrierIndex = 2; + main.b = temp2; + } else { + barrierIndex = 3; + main.a = temp1; + barrierIndex = 4; + main.b = temp2; + } + } + barrierIndex = 5; + main.a = temp1; + barrierIndex = 6; + main.b = temp1; + barrierIndex = 8; + main1.b = temp1; + safepoint(); + } + @Test(expected = AssertionError.class) public void test57() { test("test12Snippet", 8, new int[]{5}); @@ -625,6 +625,7 @@ new SafepointInsertionPhase().apply(graph); new WriteBarrierAdditionPhase().apply(graph); + // First, the total number of expected barriers is checked. final int barriers = graph.getNodes(SerialWriteBarrier.class).count(); Assert.assertTrue(expectedBarriers == barriers); @@ -633,6 +634,8 @@ boolean removeBarrier = false; } + + // Iterate over all write nodes and remove barriers according to input indices. NodeIteratorClosure closure = new NodeIteratorClosure() { @Override @@ -642,12 +645,17 @@ Object obj = write.getLocationIdentities()[0]; if (obj instanceof ResolvedJavaField) { if (((ResolvedJavaField) obj).getName().equals("barrierIndex")) { + /* + * A "barrierIndex" variable was found and is checked against + * the input barrier array. + */ if (eliminateBarrier(write.value().asConstant().asInt(), removedBarrierIndices)) { currentState.removeBarrier = true; } } } } else if (node instanceof SerialWriteBarrier) { + // Remove flagged write barriers. if (currentState.removeBarrier) { graph.removeFixed(((SerialWriteBarrier) node)); currentState.removeBarrier = false; @@ -684,6 +692,10 @@ ReentrantNodeIterator.apply(closure, graph.start(), new State(), null); new WriteBarrierVerificationPhase().apply(graph); } catch (AssertionError error) { + /* + * Catch assertion, test for expected one and re-throw in order to validate unit + * test. + */ Assert.assertTrue(error.getMessage().equals("Write barrier must be present")); throw new AssertionError(); }