diff options
| author | 2015-07-23 12:11:42 +0100 | |
|---|---|---|
| committer | 2015-07-27 16:18:05 +0100 | |
| commit | b65eb5058dd6178d329e51e9dfd6d8cf58c6a0bb (patch) | |
| tree | 4435547de496bef1f293a3ed82627482721adb04 /test | |
| parent | e6e38ce021ef5e0d326d76172307c000e0e6fab3 (diff) | |
Fix & add Checker assertions in 442-checker-constant-folding.
Change-Id: Id4165b14816c04961d5c274f24861d0e7856d95e
Diffstat (limited to 'test')
| -rw-r--r-- | test/442-checker-constant-folding/src/Main.java | 255 |
1 files changed, 170 insertions, 85 deletions
diff --git a/test/442-checker-constant-folding/src/Main.java b/test/442-checker-constant-folding/src/Main.java index b7863be6ce..079777e409 100644 --- a/test/442-checker-constant-folding/src/Main.java +++ b/test/442-checker-constant-folding/src/Main.java @@ -46,9 +46,9 @@ public class Main { } } + /** - * Tiny three-register program exercising int constant folding - * on negation. + * Exercise constant folding on negation. */ /// CHECK-START: int Main.IntNegation() constant_folding (before) @@ -60,6 +60,9 @@ public class Main { /// CHECK-DAG: <<ConstN42:i\d+>> IntConstant -42 /// CHECK-DAG: Return [<<ConstN42>>] + /// CHECK-START: int Main.IntNegation() constant_folding (after) + /// CHECK-NOT: Neg + public static int IntNegation() { int x, y; x = 42; @@ -67,9 +70,9 @@ public class Main { return y; } + /** - * Tiny three-register program exercising int constant folding - * on addition. + * Exercise constant folding on addition. */ /// CHECK-START: int Main.IntAddition1() constant_folding (before) @@ -82,6 +85,9 @@ public class Main { /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: Return [<<Const3>>] + /// CHECK-START: int Main.IntAddition1() constant_folding (after) + /// CHECK-NOT: Add + public static int IntAddition1() { int a, b, c; a = 1; @@ -90,11 +96,6 @@ public class Main { return c; } - /** - * Small three-register program exercising int constant folding - * on addition. - */ - /// CHECK-START: int Main.IntAddition2() constant_folding (before) /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 @@ -109,6 +110,9 @@ public class Main { /// CHECK-DAG: <<Const14:i\d+>> IntConstant 14 /// CHECK-DAG: Return [<<Const14>>] + /// CHECK-START: int Main.IntAddition2() constant_folding (after) + /// CHECK-NOT: Add + public static int IntAddition2() { int a, b, c; a = 1; @@ -121,34 +125,6 @@ public class Main { return c; } - /** - * Tiny three-register program exercising int constant folding - * on subtraction. - */ - - /// CHECK-START: int Main.IntSubtraction() constant_folding (before) - /// CHECK-DAG: <<Const6:i\d+>> IntConstant 6 - /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 - /// CHECK-DAG: <<Sub:i\d+>> Sub [<<Const6>>,<<Const2>>] - /// CHECK-DAG: Return [<<Sub>>] - - /// CHECK-START: int Main.IntSubtraction() constant_folding (after) - /// CHECK-DAG: <<Const4:i\d+>> IntConstant 4 - /// CHECK-DAG: Return [<<Const4>>] - - public static int IntSubtraction() { - int a, b, c; - a = 6; - b = 2; - c = a - b; - return c; - } - - /** - * Tiny three-register program exercising long constant folding - * on addition. - */ - /// CHECK-START: long Main.LongAddition() constant_folding (before) /// CHECK-DAG: <<Const1:j\d+>> LongConstant 1 /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 @@ -159,6 +135,9 @@ public class Main { /// CHECK-DAG: <<Const3:j\d+>> LongConstant 3 /// CHECK-DAG: Return [<<Const3>>] + /// CHECK-START: long Main.LongAddition() constant_folding (after) + /// CHECK-NOT: Add + public static long LongAddition() { long a, b, c; a = 1L; @@ -167,11 +146,32 @@ public class Main { return c; } + /** - * Tiny three-register program exercising long constant folding - * on subtraction. + * Exercise constant folding on subtraction. */ + /// CHECK-START: int Main.IntSubtraction() constant_folding (before) + /// CHECK-DAG: <<Const6:i\d+>> IntConstant 6 + /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 + /// CHECK-DAG: <<Sub:i\d+>> Sub [<<Const6>>,<<Const2>>] + /// CHECK-DAG: Return [<<Sub>>] + + /// CHECK-START: int Main.IntSubtraction() constant_folding (after) + /// CHECK-DAG: <<Const4:i\d+>> IntConstant 4 + /// CHECK-DAG: Return [<<Const4>>] + + /// CHECK-START: int Main.IntSubtraction() constant_folding (after) + /// CHECK-NOT: Sub + + public static int IntSubtraction() { + int a, b, c; + a = 6; + b = 2; + c = a - b; + return c; + } + /// CHECK-START: long Main.LongSubtraction() constant_folding (before) /// CHECK-DAG: <<Const6:j\d+>> LongConstant 6 /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 @@ -182,6 +182,9 @@ public class Main { /// CHECK-DAG: <<Const4:j\d+>> LongConstant 4 /// CHECK-DAG: Return [<<Const4>>] + /// CHECK-START: long Main.LongSubtraction() constant_folding (after) + /// CHECK-NOT: Sub + public static long LongSubtraction() { long a, b, c; a = 6L; @@ -190,8 +193,9 @@ public class Main { return c; } + /** - * Three-register program with a constant (static) condition. + * Exercise constant folding on constant (static) condition. */ /// CHECK-START: int Main.StaticCondition() constant_folding (before) @@ -204,6 +208,9 @@ public class Main { /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 /// CHECK-DAG: If [<<Const1>>] + /// CHECK-START: int Main.StaticCondition() constant_folding (after) + /// CHECK-NOT: GreaterThanOrEqual + public static int StaticCondition() { int a, b, c; a = 7; @@ -215,9 +222,10 @@ public class Main { return c; } + /** - * Four-variable program with jumps leading to the creation of many - * blocks. + * Exercise constant folding on a program with condition + * (i.e. jumps) leading to the creation of many blocks. * * The intent of this test is to ensure that all constant expressions * are actually evaluated at compile-time, thanks to the reverse @@ -238,6 +246,10 @@ public class Main { /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Const7>>,<<Const3>>] /// CHECK-DAG: Return [<<Phi>>] + /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after) + /// CHECK-NOT: Add + /// CHECK-NOT: Sub + public static int JumpsAndConditionals(boolean cond) { int a, b, c; a = 5; @@ -249,6 +261,7 @@ public class Main { return c; } + /** * Test optimizations of arithmetic identities yielding a constant result. */ @@ -262,9 +275,11 @@ public class Main { /// CHECK-START: int Main.And0(int) constant_folding (after) /// CHECK-DAG: <<Arg:i\d+>> ParameterValue /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-NOT: And /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: int Main.And0(int) constant_folding (after) + /// CHECK-NOT: And + public static int And0(int arg) { return arg & 0; } @@ -278,9 +293,11 @@ public class Main { /// CHECK-START: long Main.Mul0(long) constant_folding (after) /// CHECK-DAG: <<Arg:j\d+>> ParameterValue /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0 - /// CHECK-NOT: Mul /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: long Main.Mul0(long) constant_folding (after) + /// CHECK-NOT: Mul + public static long Mul0(long arg) { return arg * 0; } @@ -293,9 +310,11 @@ public class Main { /// CHECK-START: int Main.OrAllOnes(int) constant_folding (after) /// CHECK-DAG: <<ConstF:i\d+>> IntConstant -1 - /// CHECK-NOT: Or /// CHECK-DAG: Return [<<ConstF>>] + /// CHECK-START: int Main.OrAllOnes(int) constant_folding (after) + /// CHECK-NOT: Or + public static int OrAllOnes(int arg) { return arg | -1; } @@ -309,9 +328,11 @@ public class Main { /// CHECK-START: long Main.Rem0(long) constant_folding (after) /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0 - /// CHECK-NOT: Rem /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: long Main.Rem0(long) constant_folding (after) + /// CHECK-NOT: Rem + public static long Rem0(long arg) { return 0 % arg; } @@ -324,9 +345,11 @@ public class Main { /// CHECK-START: int Main.Rem1(int) constant_folding (after) /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-NOT: Rem /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: int Main.Rem1(int) constant_folding (after) + /// CHECK-NOT: Rem + public static int Rem1(int arg) { return arg % 1; } @@ -340,9 +363,11 @@ public class Main { /// CHECK-START: long Main.RemN1(long) constant_folding (after) /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0 - /// CHECK-NOT: Rem /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: long Main.RemN1(long) constant_folding (after) + /// CHECK-NOT: Rem + public static long RemN1(long arg) { return arg % -1; } @@ -356,9 +381,11 @@ public class Main { /// CHECK-START: int Main.Shl0(int) constant_folding (after) /// CHECK-DAG: <<Arg:i\d+>> ParameterValue /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-NOT: Shl /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: int Main.Shl0(int) constant_folding (after) + /// CHECK-NOT: Shl + public static int Shl0(int arg) { return 0 << arg; } @@ -372,9 +399,11 @@ public class Main { /// CHECK-START: long Main.Shr0(int) constant_folding (after) /// CHECK-DAG: <<Arg:i\d+>> ParameterValue /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0 - /// CHECK-NOT: Shr /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: long Main.Shr0(int) constant_folding (after) + /// CHECK-NOT: Shr + public static long Shr0(int arg) { return (long)0 >> arg; } @@ -387,9 +416,11 @@ public class Main { /// CHECK-START: long Main.SubSameLong(long) constant_folding (after) /// CHECK-DAG: <<Arg:j\d+>> ParameterValue /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0 - /// CHECK-NOT: Sub /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: long Main.SubSameLong(long) constant_folding (after) + /// CHECK-NOT: Sub + public static long SubSameLong(long arg) { return arg - arg; } @@ -403,9 +434,11 @@ public class Main { /// CHECK-START: int Main.UShr0(int) constant_folding (after) /// CHECK-DAG: <<Arg:i\d+>> ParameterValue /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-NOT: UShr /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: int Main.UShr0(int) constant_folding (after) + /// CHECK-NOT: UShr + public static int UShr0(int arg) { return 0 >>> arg; } @@ -418,9 +451,11 @@ public class Main { /// CHECK-START: int Main.XorSameInt(int) constant_folding (after) /// CHECK-DAG: <<Arg:i\d+>> ParameterValue /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-NOT: Xor /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: int Main.XorSameInt(int) constant_folding (after) + /// CHECK-NOT: Xor + public static int XorSameInt(int arg) { return arg ^ arg; } @@ -473,6 +508,11 @@ public class Main { return arg < Double.NaN; } + + /** + * Exercise constant folding on type conversions. + */ + /// CHECK-START: int Main.ReturnInt33() constant_folding (before) /// CHECK-DAG: <<Const33:j\d+>> LongConstant 33 /// CHECK-DAG: <<Convert:i\d+>> TypeConversion [<<Const33>>] @@ -482,6 +522,9 @@ public class Main { /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33 /// CHECK-DAG: Return [<<Const33>>] + /// CHECK-START: int Main.ReturnInt33() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static int ReturnInt33() { long imm = 33L; return (int) imm; @@ -496,6 +539,9 @@ public class Main { /// CHECK-DAG: <<ConstMax:i\d+>> IntConstant 2147483647 /// CHECK-DAG: Return [<<ConstMax>>] + /// CHECK-START: int Main.ReturnIntMax() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static int ReturnIntMax() { float imm = 1.0e34f; return (int) imm; @@ -510,6 +556,9 @@ public class Main { /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: int Main.ReturnInt0() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static int ReturnInt0() { double imm = Double.NaN; return (int) imm; @@ -524,6 +573,9 @@ public class Main { /// CHECK-DAG: <<Const33:j\d+>> LongConstant 33 /// CHECK-DAG: Return [<<Const33>>] + /// CHECK-START: long Main.ReturnLong33() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static long ReturnLong33() { int imm = 33; return (long) imm; @@ -538,6 +590,9 @@ public class Main { /// CHECK-DAG: <<Const34:j\d+>> LongConstant 34 /// CHECK-DAG: Return [<<Const34>>] + /// CHECK-START: long Main.ReturnLong34() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static long ReturnLong34() { float imm = 34.0f; return (long) imm; @@ -552,6 +607,9 @@ public class Main { /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0 /// CHECK-DAG: Return [<<Const0>>] + /// CHECK-START: long Main.ReturnLong0() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static long ReturnLong0() { double imm = -Double.NaN; return (long) imm; @@ -566,6 +624,9 @@ public class Main { /// CHECK-DAG: <<Const33:f\d+>> FloatConstant 33 /// CHECK-DAG: Return [<<Const33>>] + /// CHECK-START: float Main.ReturnFloat33() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static float ReturnFloat33() { int imm = 33; return (float) imm; @@ -580,6 +641,9 @@ public class Main { /// CHECK-DAG: <<Const34:f\d+>> FloatConstant 34 /// CHECK-DAG: Return [<<Const34>>] + /// CHECK-START: float Main.ReturnFloat34() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static float ReturnFloat34() { long imm = 34L; return (float) imm; @@ -594,6 +658,9 @@ public class Main { /// CHECK-DAG: <<Const:f\d+>> FloatConstant 99.25 /// CHECK-DAG: Return [<<Const>>] + /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static float ReturnFloat99P25() { double imm = 99.25; return (float) imm; @@ -622,6 +689,9 @@ public class Main { /// CHECK-DAG: <<Const34:d\d+>> DoubleConstant 34 /// CHECK-DAG: Return [<<Const34>>] + /// CHECK-START: double Main.ReturnDouble34() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static double ReturnDouble34() { long imm = 34L; return (double) imm; @@ -636,46 +706,61 @@ public class Main { /// CHECK-DAG: <<Const:d\d+>> DoubleConstant 99.25 /// CHECK-DAG: Return [<<Const>>] + /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after) + /// CHECK-NOT: TypeConversion + public static double ReturnDouble99P25() { float imm = 99.25f; return (double) imm; } + public static void main(String[] args) { - assertIntEquals(IntNegation(), -42); - assertIntEquals(IntAddition1(), 3); - assertIntEquals(IntAddition2(), 14); - assertIntEquals(IntSubtraction(), 4); - assertLongEquals(LongAddition(), 3L); - assertLongEquals(LongSubtraction(), 4L); - assertIntEquals(StaticCondition(), 5); - assertIntEquals(JumpsAndConditionals(true), 7); - assertIntEquals(JumpsAndConditionals(false), 3); + assertIntEquals(-42, IntNegation()); + + assertIntEquals(3, IntAddition1()); + assertIntEquals(14, IntAddition2()); + assertLongEquals(3L, LongAddition()); + + assertIntEquals(4, IntSubtraction()); + assertLongEquals(4L, LongSubtraction()); + + assertIntEquals(5, StaticCondition()); + + assertIntEquals(7, JumpsAndConditionals(true)); + assertIntEquals(3, JumpsAndConditionals(false)); + int arbitrary = 123456; // Value chosen arbitrarily. - assertIntEquals(And0(arbitrary), 0); - assertLongEquals(Mul0(arbitrary), 0); - assertIntEquals(OrAllOnes(arbitrary), -1); - assertLongEquals(Rem0(arbitrary), 0); - assertIntEquals(Rem1(arbitrary), 0); - assertLongEquals(RemN1(arbitrary), 0); - assertIntEquals(Shl0(arbitrary), 0); - assertLongEquals(Shr0(arbitrary), 0); - assertLongEquals(SubSameLong(arbitrary), 0); - assertIntEquals(UShr0(arbitrary), 0); - assertIntEquals(XorSameInt(arbitrary), 0); + + assertIntEquals(0, And0(arbitrary)); + assertLongEquals(0, Mul0(arbitrary)); + assertIntEquals(-1, OrAllOnes(arbitrary)); + assertLongEquals(0, Rem0(arbitrary)); + assertIntEquals(0, Rem1(arbitrary)); + assertLongEquals(0, RemN1(arbitrary)); + assertIntEquals(0, Shl0(arbitrary)); + assertLongEquals(0, Shr0(arbitrary)); + assertLongEquals(0, SubSameLong(arbitrary)); + assertIntEquals(0, UShr0(arbitrary)); + assertIntEquals(0, XorSameInt(arbitrary)); + assertFalse(CmpFloatGreaterThanNaN(arbitrary)); assertFalse(CmpDoubleLessThanNaN(arbitrary)); - assertIntEquals(ReturnInt33(), 33); - assertIntEquals(ReturnIntMax(), 2147483647); - assertIntEquals(ReturnInt0(), 0); - assertLongEquals(ReturnLong33(), 33); - assertLongEquals(ReturnLong34(), 34); - assertLongEquals(ReturnLong0(), 0); - assertFloatEquals(ReturnFloat33(), 33); - assertFloatEquals(ReturnFloat34(), 34); - assertFloatEquals(ReturnFloat99P25(), 99.25f); - assertDoubleEquals(ReturnDouble33(), 33); - assertDoubleEquals(ReturnDouble34(), 34); - assertDoubleEquals(ReturnDouble99P25(), 99.25); + + assertIntEquals(33, ReturnInt33()); + assertIntEquals(2147483647, ReturnIntMax()); + assertIntEquals(0, ReturnInt0()); + + assertLongEquals(33, ReturnLong33()); + assertLongEquals(34, ReturnLong34()); + assertLongEquals(0, ReturnLong0()); + + assertFloatEquals(33, ReturnFloat33()); + assertFloatEquals(34, ReturnFloat34()); + assertFloatEquals(99.25f, ReturnFloat99P25()); + + assertDoubleEquals(33, ReturnDouble33()); + assertDoubleEquals(34, ReturnDouble34()); + assertDoubleEquals(99.25, ReturnDouble99P25()); } } |