diff options
Diffstat (limited to 'test/463-checker-boolean-simplifier/src/Main.java')
-rw-r--r-- | test/463-checker-boolean-simplifier/src/Main.java | 174 |
1 files changed, 21 insertions, 153 deletions
diff --git a/test/463-checker-boolean-simplifier/src/Main.java b/test/463-checker-boolean-simplifier/src/Main.java index d1d02cdfee..2c759ed6f9 100644 --- a/test/463-checker-boolean-simplifier/src/Main.java +++ b/test/463-checker-boolean-simplifier/src/Main.java @@ -14,6 +14,8 @@ * limitations under the License. */ +import java.lang.reflect.Method; + public class Main { // Note #1: `javac` flips the conditions of If statements. @@ -33,44 +35,6 @@ public class Main { } /* - * Elementary test negating a boolean. Verifies that blocks are merged and - * empty branches removed. - */ - - /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (before) - /// CHECK-DAG: <<Param:z\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: If [<<Param>>] - /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Const1>>,<<Const0>>] - /// CHECK-DAG: Return [<<Phi>>] - - /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (before) - /// CHECK: Goto - /// CHECK: Goto - /// CHECK: Goto - /// CHECK-NOT: Goto - - /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (after) - /// CHECK-DAG: <<Param:z\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<NotParam:i\d+>> Select [<<Const1>>,<<Const0>>,<<Param>>] - /// CHECK-DAG: Return [<<NotParam>>] - - /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (after) - /// CHECK-NOT: If - /// CHECK-NOT: Phi - - /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (after) - /// CHECK: Goto - /// CHECK-NOT: Goto - - public static boolean BooleanNot(boolean x) { - return !x; - } - - /* * Program which only delegates the condition, i.e. returns 1 when True * and 0 when False. */ @@ -126,72 +90,6 @@ public class Main { return (x < y) ? true : false; } - /* - * Program which further uses negated conditions. - * Note that Phis are discovered retrospectively. - */ - - /// CHECK-START: boolean Main.ValuesOrdered(int, int, int) select_generator (before) - /// CHECK-DAG: <<ParamX:i\d+>> ParameterValue - /// CHECK-DAG: <<ParamY:i\d+>> ParameterValue - /// CHECK-DAG: <<ParamZ:i\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<CondXY:z\d+>> GreaterThan [<<ParamX>>,<<ParamY>>] - /// CHECK-DAG: If [<<CondXY>>] - /// CHECK-DAG: <<CondYZ:z\d+>> GreaterThan [<<ParamY>>,<<ParamZ>>] - /// CHECK-DAG: If [<<CondYZ>>] - /// CHECK-DAG: <<CondXYZ:z\d+>> NotEqual [<<PhiXY:i\d+>>,<<PhiYZ:i\d+>>] - /// CHECK-DAG: If [<<CondXYZ>>] - /// CHECK-DAG: Return [<<PhiXYZ:i\d+>>] - /// CHECK-DAG: <<PhiXY>> Phi [<<Const1>>,<<Const0>>] - /// CHECK-DAG: <<PhiYZ>> Phi [<<Const1>>,<<Const0>>] - /// CHECK-DAG: <<PhiXYZ>> Phi [<<Const1>>,<<Const0>>] - - /// CHECK-START: boolean Main.ValuesOrdered(int, int, int) select_generator (after) - /// CHECK-DAG: <<ParamX:i\d+>> ParameterValue - /// CHECK-DAG: <<ParamY:i\d+>> ParameterValue - /// CHECK-DAG: <<ParamZ:i\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<CmpXY:z\d+>> GreaterThan [<<ParamX>>,<<ParamY>>] - /// CHECK-DAG: <<SelXY:i\d+>> Select [<<Const1>>,<<Const0>>,<<CmpXY>>] - /// CHECK-DAG: <<CmpYZ:z\d+>> GreaterThan [<<ParamY>>,<<ParamZ>>] - /// CHECK-DAG: <<SelYZ:i\d+>> Select [<<Const1>>,<<Const0>>,<<CmpYZ>>] - /// CHECK-DAG: <<CmpXYZ:z\d+>> NotEqual [<<SelXY>>,<<SelYZ>>] - /// CHECK-DAG: <<SelXYZ:i\d+>> Select [<<Const1>>,<<Const0>>,<<CmpXYZ>>] - /// CHECK-DAG: Return [<<SelXYZ>>] - - public static boolean ValuesOrdered(int x, int y, int z) { - return (x <= y) == (y <= z); - } - - /// CHECK-START: int Main.NegatedCondition(boolean) select_generator (before) - /// CHECK-DAG: <<Param:z\d+>> ParameterValue - /// CHECK-DAG: <<Const42:i\d+>> IntConstant 42 - /// CHECK-DAG: <<Const43:i\d+>> IntConstant 43 - /// CHECK-DAG: If [<<Param>>] - /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Const42>>,<<Const43>>] - /// CHECK-DAG: Return [<<Phi>>] - - /// CHECK-START: int Main.NegatedCondition(boolean) select_generator (after) - /// CHECK-DAG: <<Param:z\d+>> ParameterValue - /// CHECK-DAG: <<Const42:i\d+>> IntConstant 42 - /// CHECK-DAG: <<Const43:i\d+>> IntConstant 43 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const43>>,<<Const42>>,<<Param>>] - /// CHECK-DAG: Return [<<Select>>] - - /// CHECK-START: int Main.NegatedCondition(boolean) select_generator (after) - /// CHECK-NOT: BooleanNot - - public static int NegatedCondition(boolean x) { - if (x != false) { - return 42; - } else { - return 43; - } - } - /// CHECK-START: int Main.SimpleTrueBlock(boolean, int) select_generator (after) /// CHECK-DAG: <<ParamX:z\d+>> ParameterValue /// CHECK-DAG: <<ParamY:i\d+>> ParameterValue @@ -262,43 +160,6 @@ public class Main { } } - /// CHECK-START: int Main.MultiplePhis() select_generator (before) - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<Const13:i\d+>> IntConstant 13 - /// CHECK-DAG: <<Const42:i\d+>> IntConstant 42 - /// CHECK-DAG: <<PhiX:i\d+>> Phi [<<Const0>>,<<Const13>>,<<Const42>>] - /// CHECK-DAG: <<PhiY:i\d+>> Phi [<<Const1>>,<<Add:i\d+>>,<<Add>>] - /// CHECK-DAG: <<Add>> Add [<<PhiY>>,<<Const1>>] - /// CHECK-DAG: <<Cond:z\d+>> LessThanOrEqual [<<Add>>,<<Const1>>] - /// CHECK-DAG: If [<<Cond>>] - /// CHECK-DAG: Return [<<PhiX>>] - - /// CHECK-START: int Main.MultiplePhis() select_generator (after) - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<Const13:i\d+>> IntConstant 13 - /// CHECK-DAG: <<Const42:i\d+>> IntConstant 42 - /// CHECK-DAG: <<PhiX:i\d+>> Phi [<<Const0>>,<<Select:i\d+>>] - /// CHECK-DAG: <<PhiY:i\d+>> Phi [<<Const1>>,<<Add:i\d+>>] - /// CHECK-DAG: <<Add>> Add [<<PhiY>>,<<Const1>>] - /// CHECK-DAG: <<Cond:z\d+>> LessThanOrEqual [<<Add>>,<<Const1>>] - /// CHECK-DAG: <<Select>> Select [<<Const13>>,<<Const42>>,<<Cond>>] - /// CHECK-DAG: Return [<<PhiX>>] - - public static int MultiplePhis() { - int x = 0; - int y = 1; - while (y++ < 10) { - if (y > 1) { - x = 13; - } else { - x = 42; - } - } - return x; - } - /// CHECK-START: int Main.TrueBlockWithTooManyInstructions(boolean) select_generator (before) /// CHECK-DAG: <<This:l\d+>> ParameterValue /// CHECK-DAG: <<Cond:z\d+>> ParameterValue @@ -366,23 +227,30 @@ public class Main { } public static void main(String[] args) throws Exception { - assertBoolEquals(false, BooleanNot(true)); - assertBoolEquals(true, BooleanNot(false)); + Class main2 = Class.forName("Main2"); + Method booleanNot = main2.getMethod("BooleanNot", boolean.class); + Method valuesOrdered = main2.getMethod("ValuesOrdered", int.class, int.class, int.class); + Method negatedCondition = main2.getMethod("NegatedCondition", boolean.class); + Method multiplePhis = main2.getMethod("MultiplePhis"); + + assertBoolEquals(false, (boolean)booleanNot.invoke(null, true)); + assertBoolEquals(true, (boolean)booleanNot.invoke(null, false)); assertBoolEquals(true, GreaterThan(10, 5)); assertBoolEquals(false, GreaterThan(10, 10)); assertBoolEquals(false, GreaterThan(5, 10)); assertBoolEquals(true, LessThan(5, 10)); assertBoolEquals(false, LessThan(10, 10)); assertBoolEquals(false, LessThan(10, 5)); - assertBoolEquals(true, ValuesOrdered(1, 3, 5)); - assertBoolEquals(true, ValuesOrdered(5, 3, 1)); - assertBoolEquals(false, ValuesOrdered(1, 3, 2)); - assertBoolEquals(false, ValuesOrdered(2, 3, 1)); - assertBoolEquals(true, ValuesOrdered(3, 3, 3)); - assertBoolEquals(true, ValuesOrdered(3, 3, 5)); - assertBoolEquals(false, ValuesOrdered(5, 5, 3)); - assertIntEquals(42, NegatedCondition(true)); - assertIntEquals(43, NegatedCondition(false)); + + assertBoolEquals(true, (boolean)valuesOrdered.invoke(null, 1, 3, 5)); + assertBoolEquals(true, (boolean)valuesOrdered.invoke(null, 5, 3, 1)); + assertBoolEquals(false, (boolean)valuesOrdered.invoke(null, 1, 3, 2)); + assertBoolEquals(false, (boolean)valuesOrdered.invoke(null, 2, 3, 1)); + assertBoolEquals(true, (boolean)valuesOrdered.invoke(null, 3, 3, 3)); + assertBoolEquals(true, (boolean)valuesOrdered.invoke(null, 3, 3, 5)); + assertBoolEquals(false, (boolean)valuesOrdered.invoke(null, 5, 5, 3)); + assertIntEquals(42, (int)negatedCondition.invoke(null, true)); + assertIntEquals(43, (int)negatedCondition.invoke(null, false)); assertIntEquals(46, SimpleTrueBlock(true, 4)); assertIntEquals(43, SimpleTrueBlock(false, 4)); assertIntEquals(42, SimpleFalseBlock(true, 7)); @@ -393,7 +261,7 @@ public class Main { assertIntEquals(1, ThreeBlocks(true, false)); assertIntEquals(2, ThreeBlocks(false, true)); assertIntEquals(3, ThreeBlocks(false, false)); - assertIntEquals(13, MultiplePhis()); + assertIntEquals(13, (int)multiplePhis.invoke(null)); Main m = new Main(); assertIntEquals(42, m.TrueBlockWithTooManyInstructions(true)); |