diff options
| author | 2016-02-29 09:14:51 +0000 | |
|---|---|---|
| committer | 2016-03-02 11:26:02 +0000 | |
| commit | f02c3cf66c2c24533f6da43970e7b766b2ca9938 (patch) | |
| tree | 28dc729ed7e19f671b959531776682029ea197a8 | |
| parent | 8d468e351e42e8424f93746d9ee183f8cff01ec2 (diff) | |
ART: Switch Checker run-tests to Jack
Bug: 25635944
Change-Id: Ic6774028025b51f54589e9625003e8f69cf39dea
| -rw-r--r-- | test/442-checker-constant-folding/src/Main.java | 479 | ||||
| -rw-r--r-- | test/450-checker-types/smali/SmaliTests.smali | 120 | ||||
| -rw-r--r-- | test/450-checker-types/src/Main.java | 52 | ||||
| -rw-r--r-- | test/458-checker-instruction-simplification/smali/SmaliTests.smali | 193 | ||||
| -rw-r--r-- | test/458-checker-instruction-simplification/src/Main.java | 256 | ||||
| -rw-r--r-- | test/463-checker-boolean-simplifier/src/Main.java | 18 | ||||
| -rw-r--r-- | test/537-checker-inline-and-unverified/src/Main.java | 6 | ||||
| -rw-r--r-- | test/555-checker-regression-x86const/build | 10 | ||||
| -rw-r--r-- | test/565-checker-doublenegbitwise/src/Main.java | 31 | ||||
| -rw-r--r-- | test/Android.run-test.mk | 5 | ||||
| -rwxr-xr-x | test/run-test | 6 |
11 files changed, 640 insertions, 536 deletions
diff --git a/test/442-checker-constant-folding/src/Main.java b/test/442-checker-constant-folding/src/Main.java index 93fe397273..b7712a701f 100644 --- a/test/442-checker-constant-folding/src/Main.java +++ b/test/442-checker-constant-folding/src/Main.java @@ -51,6 +51,21 @@ public class Main { } } + private static int $inline$int(int x) { + return x; + } + + private static long $inline$long(long x) { + return x; + } + + private static float $inline$float(float x) { + return x; + } + + private static double $inline$double(double x) { + return x; + } // Wrappers around methods located in file TestCmp.smali. @@ -194,121 +209,119 @@ public class Main { return y; } - /** * Exercise constant folding on addition. */ - /// CHECK-START: int Main.IntAddition1() constant_folding (before) + /// CHECK-START: int Main.IntAddition1() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: <<Add:i\d+>> Add [<<Const1>>,<<Const2>>] /// CHECK-DAG: Return [<<Add>>] - /// CHECK-START: int Main.IntAddition1() constant_folding (after) + /// CHECK-START: int Main.IntAddition1() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: Return [<<Const3>>] - /// CHECK-START: int Main.IntAddition1() constant_folding (after) + /// CHECK-START: int Main.IntAddition1() constant_folding_after_inlining (after) /// CHECK-NOT: Add public static int IntAddition1() { int a, b, c; - a = 1; - b = 2; + a = $inline$int(1); + b = $inline$int(2); c = a + b; return c; } - /// CHECK-START: int Main.IntAddition2() constant_folding (before) + /// CHECK-START: int Main.IntAddition2() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 /// CHECK-DAG: <<Const6:i\d+>> IntConstant 6 - /// CHECK-DAG: <<Const11:i\d+>> IntConstant 11 /// CHECK-DAG: <<Add1:i\d+>> Add [<<Const1>>,<<Const2>>] - /// CHECK-DAG: Add [<<Const5>>,<<Const6>>] - /// CHECK-DAG: <<Add3:i\d+>> Add [<<Add1>>,<<Const11>>] + /// CHECK-DAG: <<Add2:i\d+>> Add [<<Const5>>,<<Const6>>] + /// CHECK-DAG: <<Add3:i\d+>> Add [<<Add1>>,<<Add2>>] /// CHECK-DAG: Return [<<Add3>>] - /// CHECK-START: int Main.IntAddition2() constant_folding (after) + /// CHECK-START: int Main.IntAddition2() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const14:i\d+>> IntConstant 14 /// CHECK-DAG: Return [<<Const14>>] - /// CHECK-START: int Main.IntAddition2() constant_folding (after) + /// CHECK-START: int Main.IntAddition2() constant_folding_after_inlining (after) /// CHECK-NOT: Add public static int IntAddition2() { int a, b, c; - a = 1; - b = 2; + a = $inline$int(1); + b = $inline$int(2); a += b; - b = 5; - c = 6; + b = $inline$int(5); + c = $inline$int(6); b += c; c = a + b; return c; } - /// CHECK-START: long Main.LongAddition() constant_folding (before) + /// CHECK-START: long Main.LongAddition() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const1:j\d+>> LongConstant 1 /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 /// CHECK-DAG: <<Add:j\d+>> Add [<<Const1>>,<<Const2>>] /// CHECK-DAG: Return [<<Add>>] - /// CHECK-START: long Main.LongAddition() constant_folding (after) + /// CHECK-START: long Main.LongAddition() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const3:j\d+>> LongConstant 3 /// CHECK-DAG: Return [<<Const3>>] - /// CHECK-START: long Main.LongAddition() constant_folding (after) + /// CHECK-START: long Main.LongAddition() constant_folding_after_inlining (after) /// CHECK-NOT: Add public static long LongAddition() { long a, b, c; - a = 1L; - b = 2L; + a = $inline$long(1L); + b = $inline$long(2L); c = a + b; return c; } - /// CHECK-START: float Main.FloatAddition() constant_folding (before) + /// CHECK-START: float Main.FloatAddition() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const1:f\d+>> FloatConstant 1 /// CHECK-DAG: <<Const2:f\d+>> FloatConstant 2 /// CHECK-DAG: <<Add:f\d+>> Add [<<Const1>>,<<Const2>>] /// CHECK-DAG: Return [<<Add>>] - /// CHECK-START: float Main.FloatAddition() constant_folding (after) + /// CHECK-START: float Main.FloatAddition() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const3:f\d+>> FloatConstant 3 /// CHECK-DAG: Return [<<Const3>>] - /// CHECK-START: float Main.FloatAddition() constant_folding (after) + /// CHECK-START: float Main.FloatAddition() constant_folding_after_inlining (after) /// CHECK-NOT: Add public static float FloatAddition() { float a, b, c; - a = 1F; - b = 2F; + a = $inline$float(1F); + b = $inline$float(2F); c = a + b; return c; } - /// CHECK-START: double Main.DoubleAddition() constant_folding (before) + /// CHECK-START: double Main.DoubleAddition() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const1:d\d+>> DoubleConstant 1 /// CHECK-DAG: <<Const2:d\d+>> DoubleConstant 2 /// CHECK-DAG: <<Add:d\d+>> Add [<<Const1>>,<<Const2>>] /// CHECK-DAG: Return [<<Add>>] - /// CHECK-START: double Main.DoubleAddition() constant_folding (after) + /// CHECK-START: double Main.DoubleAddition() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const3:d\d+>> DoubleConstant 3 /// CHECK-DAG: Return [<<Const3>>] - /// CHECK-START: double Main.DoubleAddition() constant_folding (after) + /// CHECK-START: double Main.DoubleAddition() constant_folding_after_inlining (after) /// CHECK-NOT: Add public static double DoubleAddition() { double a, b, c; - a = 1D; - b = 2D; + a = $inline$double(1D); + b = $inline$double(2D); c = a + b; return c; } @@ -318,86 +331,86 @@ public class Main { * Exercise constant folding on subtraction. */ - /// CHECK-START: int Main.IntSubtraction() constant_folding (before) + /// CHECK-START: int Main.IntSubtraction() constant_folding_after_inlining (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-START: int Main.IntSubtraction() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const4:i\d+>> IntConstant 4 /// CHECK-DAG: Return [<<Const4>>] - /// CHECK-START: int Main.IntSubtraction() constant_folding (after) + /// CHECK-START: int Main.IntSubtraction() constant_folding_after_inlining (after) /// CHECK-NOT: Sub public static int IntSubtraction() { int a, b, c; - a = 6; - b = 2; + a = $inline$int(6); + b = $inline$int(2); c = a - b; return c; } - /// CHECK-START: long Main.LongSubtraction() constant_folding (before) + /// CHECK-START: long Main.LongSubtraction() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const6:j\d+>> LongConstant 6 /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 /// CHECK-DAG: <<Sub:j\d+>> Sub [<<Const6>>,<<Const2>>] /// CHECK-DAG: Return [<<Sub>>] - /// CHECK-START: long Main.LongSubtraction() constant_folding (after) + /// CHECK-START: long Main.LongSubtraction() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const4:j\d+>> LongConstant 4 /// CHECK-DAG: Return [<<Const4>>] - /// CHECK-START: long Main.LongSubtraction() constant_folding (after) + /// CHECK-START: long Main.LongSubtraction() constant_folding_after_inlining (after) /// CHECK-NOT: Sub public static long LongSubtraction() { long a, b, c; - a = 6L; - b = 2L; + a = $inline$long(6L); + b = $inline$long(2L); c = a - b; return c; } - /// CHECK-START: float Main.FloatSubtraction() constant_folding (before) + /// CHECK-START: float Main.FloatSubtraction() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const6:f\d+>> FloatConstant 6 /// CHECK-DAG: <<Const2:f\d+>> FloatConstant 2 /// CHECK-DAG: <<Sub:f\d+>> Sub [<<Const6>>,<<Const2>>] /// CHECK-DAG: Return [<<Sub>>] - /// CHECK-START: float Main.FloatSubtraction() constant_folding (after) + /// CHECK-START: float Main.FloatSubtraction() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const4:f\d+>> FloatConstant 4 /// CHECK-DAG: Return [<<Const4>>] - /// CHECK-START: float Main.FloatSubtraction() constant_folding (after) + /// CHECK-START: float Main.FloatSubtraction() constant_folding_after_inlining (after) /// CHECK-NOT: Sub public static float FloatSubtraction() { float a, b, c; - a = 6F; - b = 2F; + a = $inline$float(6F); + b = $inline$float(2F); c = a - b; return c; } - /// CHECK-START: double Main.DoubleSubtraction() constant_folding (before) + /// CHECK-START: double Main.DoubleSubtraction() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const6:d\d+>> DoubleConstant 6 /// CHECK-DAG: <<Const2:d\d+>> DoubleConstant 2 /// CHECK-DAG: <<Sub:d\d+>> Sub [<<Const6>>,<<Const2>>] /// CHECK-DAG: Return [<<Sub>>] - /// CHECK-START: double Main.DoubleSubtraction() constant_folding (after) + /// CHECK-START: double Main.DoubleSubtraction() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const4:d\d+>> DoubleConstant 4 /// CHECK-DAG: Return [<<Const4>>] - /// CHECK-START: double Main.DoubleSubtraction() constant_folding (after) + /// CHECK-START: double Main.DoubleSubtraction() constant_folding_after_inlining (after) /// CHECK-NOT: Sub public static double DoubleSubtraction() { double a, b, c; - a = 6D; - b = 2D; + a = $inline$double(6D); + b = $inline$double(2D); c = a - b; return c; } @@ -407,86 +420,86 @@ public class Main { * Exercise constant folding on multiplication. */ - /// CHECK-START: int Main.IntMultiplication() constant_folding (before) + /// CHECK-START: int Main.IntMultiplication() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const7:i\d+>> IntConstant 7 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: <<Mul:i\d+>> Mul [<<Const7>>,<<Const3>>] /// CHECK-DAG: Return [<<Mul>>] - /// CHECK-START: int Main.IntMultiplication() constant_folding (after) + /// CHECK-START: int Main.IntMultiplication() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const21:i\d+>> IntConstant 21 /// CHECK-DAG: Return [<<Const21>>] - /// CHECK-START: int Main.IntMultiplication() constant_folding (after) + /// CHECK-START: int Main.IntMultiplication() constant_folding_after_inlining (after) /// CHECK-NOT: Mul public static int IntMultiplication() { int a, b, c; - a = 7; - b = 3; + a = $inline$int(7); + b = $inline$int(3); c = a * b; return c; } - /// CHECK-START: long Main.LongMultiplication() constant_folding (before) + /// CHECK-START: long Main.LongMultiplication() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const7:j\d+>> LongConstant 7 /// CHECK-DAG: <<Const3:j\d+>> LongConstant 3 /// CHECK-DAG: <<Mul:j\d+>> Mul [<<Const7>>,<<Const3>>] /// CHECK-DAG: Return [<<Mul>>] - /// CHECK-START: long Main.LongMultiplication() constant_folding (after) + /// CHECK-START: long Main.LongMultiplication() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const21:j\d+>> LongConstant 21 /// CHECK-DAG: Return [<<Const21>>] - /// CHECK-START: long Main.LongMultiplication() constant_folding (after) + /// CHECK-START: long Main.LongMultiplication() constant_folding_after_inlining (after) /// CHECK-NOT: Mul public static long LongMultiplication() { long a, b, c; - a = 7L; - b = 3L; + a = $inline$long(7L); + b = $inline$long(3L); c = a * b; return c; } - /// CHECK-START: float Main.FloatMultiplication() constant_folding (before) + /// CHECK-START: float Main.FloatMultiplication() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const7:f\d+>> FloatConstant 7 /// CHECK-DAG: <<Const3:f\d+>> FloatConstant 3 /// CHECK-DAG: <<Mul:f\d+>> Mul [<<Const7>>,<<Const3>>] /// CHECK-DAG: Return [<<Mul>>] - /// CHECK-START: float Main.FloatMultiplication() constant_folding (after) + /// CHECK-START: float Main.FloatMultiplication() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const21:f\d+>> FloatConstant 21 /// CHECK-DAG: Return [<<Const21>>] - /// CHECK-START: float Main.FloatMultiplication() constant_folding (after) + /// CHECK-START: float Main.FloatMultiplication() constant_folding_after_inlining (after) /// CHECK-NOT: Mul public static float FloatMultiplication() { float a, b, c; - a = 7F; - b = 3F; + a = $inline$float(7F); + b = $inline$float(3F); c = a * b; return c; } - /// CHECK-START: double Main.DoubleMultiplication() constant_folding (before) + /// CHECK-START: double Main.DoubleMultiplication() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const7:d\d+>> DoubleConstant 7 /// CHECK-DAG: <<Const3:d\d+>> DoubleConstant 3 /// CHECK-DAG: <<Mul:d\d+>> Mul [<<Const7>>,<<Const3>>] /// CHECK-DAG: Return [<<Mul>>] - /// CHECK-START: double Main.DoubleMultiplication() constant_folding (after) + /// CHECK-START: double Main.DoubleMultiplication() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const21:d\d+>> DoubleConstant 21 /// CHECK-DAG: Return [<<Const21>>] - /// CHECK-START: double Main.DoubleMultiplication() constant_folding (after) + /// CHECK-START: double Main.DoubleMultiplication() constant_folding_after_inlining (after) /// CHECK-NOT: Mul public static double DoubleMultiplication() { double a, b, c; - a = 7D; - b = 3D; + a = $inline$double(7D); + b = $inline$double(3D); c = a * b; return c; } @@ -496,90 +509,90 @@ public class Main { * Exercise constant folding on division. */ - /// CHECK-START: int Main.IntDivision() constant_folding (before) + /// CHECK-START: int Main.IntDivision() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: <<Div0Chk:i\d+>> DivZeroCheck [<<Const3>>] /// CHECK-DAG: <<Div:i\d+>> Div [<<Const8>>,<<Div0Chk>>] /// CHECK-DAG: Return [<<Div>>] - /// CHECK-START: int Main.IntDivision() constant_folding (after) + /// CHECK-START: int Main.IntDivision() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: Return [<<Const2>>] - /// CHECK-START: int Main.IntDivision() constant_folding (after) + /// CHECK-START: int Main.IntDivision() constant_folding_after_inlining (after) /// CHECK-NOT: DivZeroCheck /// CHECK-NOT: Div public static int IntDivision() { int a, b, c; - a = 8; - b = 3; + a = $inline$int(8); + b = $inline$int(3); c = a / b; return c; } - /// CHECK-START: long Main.LongDivision() constant_folding (before) + /// CHECK-START: long Main.LongDivision() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:j\d+>> LongConstant 8 /// CHECK-DAG: <<Const3:j\d+>> LongConstant 3 /// CHECK-DAG: <<Div0Chk:j\d+>> DivZeroCheck [<<Const3>>] /// CHECK-DAG: <<Div:j\d+>> Div [<<Const8>>,<<Div0Chk>>] /// CHECK-DAG: Return [<<Div>>] - /// CHECK-START: long Main.LongDivision() constant_folding (after) + /// CHECK-START: long Main.LongDivision() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 /// CHECK-DAG: Return [<<Const2>>] - /// CHECK-START: long Main.LongDivision() constant_folding (after) + /// CHECK-START: long Main.LongDivision() constant_folding_after_inlining (after) /// CHECK-NOT: DivZeroCheck /// CHECK-NOT: Div public static long LongDivision() { long a, b, c; - a = 8L; - b = 3L; + a = $inline$long(8L); + b = $inline$long(3L); c = a / b; return c; } - /// CHECK-START: float Main.FloatDivision() constant_folding (before) + /// CHECK-START: float Main.FloatDivision() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:f\d+>> FloatConstant 8 /// CHECK-DAG: <<Const2P5:f\d+>> FloatConstant 2.5 /// CHECK-DAG: <<Div:f\d+>> Div [<<Const8>>,<<Const2P5>>] /// CHECK-DAG: Return [<<Div>>] - /// CHECK-START: float Main.FloatDivision() constant_folding (after) + /// CHECK-START: float Main.FloatDivision() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const3P2:f\d+>> FloatConstant 3.2 /// CHECK-DAG: Return [<<Const3P2>>] - /// CHECK-START: float Main.FloatDivision() constant_folding (after) + /// CHECK-START: float Main.FloatDivision() constant_folding_after_inlining (after) /// CHECK-NOT: Div public static float FloatDivision() { float a, b, c; - a = 8F; - b = 2.5F; + a = $inline$float(8F); + b = $inline$float(2.5F); c = a / b; return c; } - /// CHECK-START: double Main.DoubleDivision() constant_folding (before) + /// CHECK-START: double Main.DoubleDivision() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:d\d+>> DoubleConstant 8 /// CHECK-DAG: <<Const2P5:d\d+>> DoubleConstant 2.5 /// CHECK-DAG: <<Div:d\d+>> Div [<<Const8>>,<<Const2P5>>] /// CHECK-DAG: Return [<<Div>>] - /// CHECK-START: double Main.DoubleDivision() constant_folding (after) + /// CHECK-START: double Main.DoubleDivision() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const3P2:d\d+>> DoubleConstant 3.2 /// CHECK-DAG: Return [<<Const3P2>>] - /// CHECK-START: double Main.DoubleDivision() constant_folding (after) + /// CHECK-START: double Main.DoubleDivision() constant_folding_after_inlining (after) /// CHECK-NOT: Div public static double DoubleDivision() { double a, b, c; - a = 8D; - b = 2.5D; + a = $inline$double(8D); + b = $inline$double(2.5D); c = a / b; return c; } @@ -589,90 +602,90 @@ public class Main { * Exercise constant folding on remainder. */ - /// CHECK-START: int Main.IntRemainder() constant_folding (before) + /// CHECK-START: int Main.IntRemainder() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: <<Div0Chk:i\d+>> DivZeroCheck [<<Const3>>] /// CHECK-DAG: <<Rem:i\d+>> Rem [<<Const8>>,<<Div0Chk>>] /// CHECK-DAG: Return [<<Rem>>] - /// CHECK-START: int Main.IntRemainder() constant_folding (after) + /// CHECK-START: int Main.IntRemainder() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: Return [<<Const2>>] - /// CHECK-START: int Main.IntRemainder() constant_folding (after) + /// CHECK-START: int Main.IntRemainder() constant_folding_after_inlining (after) /// CHECK-NOT: DivZeroCheck /// CHECK-NOT: Rem public static int IntRemainder() { int a, b, c; - a = 8; - b = 3; + a = $inline$int(8); + b = $inline$int(3); c = a % b; return c; } - /// CHECK-START: long Main.LongRemainder() constant_folding (before) + /// CHECK-START: long Main.LongRemainder() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:j\d+>> LongConstant 8 /// CHECK-DAG: <<Const3:j\d+>> LongConstant 3 /// CHECK-DAG: <<Div0Chk:j\d+>> DivZeroCheck [<<Const3>>] /// CHECK-DAG: <<Rem:j\d+>> Rem [<<Const8>>,<<Div0Chk>>] /// CHECK-DAG: Return [<<Rem>>] - /// CHECK-START: long Main.LongRemainder() constant_folding (after) + /// CHECK-START: long Main.LongRemainder() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 /// CHECK-DAG: Return [<<Const2>>] - /// CHECK-START: long Main.LongRemainder() constant_folding (after) + /// CHECK-START: long Main.LongRemainder() constant_folding_after_inlining (after) /// CHECK-NOT: DivZeroCheck /// CHECK-NOT: Rem public static long LongRemainder() { long a, b, c; - a = 8L; - b = 3L; + a = $inline$long(8L); + b = $inline$long(3L); c = a % b; return c; } - /// CHECK-START: float Main.FloatRemainder() constant_folding (before) + /// CHECK-START: float Main.FloatRemainder() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:f\d+>> FloatConstant 8 /// CHECK-DAG: <<Const2P5:f\d+>> FloatConstant 2.5 /// CHECK-DAG: <<Rem:f\d+>> Rem [<<Const8>>,<<Const2P5>>] /// CHECK-DAG: Return [<<Rem>>] - /// CHECK-START: float Main.FloatRemainder() constant_folding (after) + /// CHECK-START: float Main.FloatRemainder() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const0P5:f\d+>> FloatConstant 0.5 /// CHECK-DAG: Return [<<Const0P5>>] - /// CHECK-START: float Main.FloatRemainder() constant_folding (after) + /// CHECK-START: float Main.FloatRemainder() constant_folding_after_inlining (after) /// CHECK-NOT: Rem public static float FloatRemainder() { float a, b, c; - a = 8F; - b = 2.5F; + a = $inline$float(8F); + b = $inline$float(2.5F); c = a % b; return c; } - /// CHECK-START: double Main.DoubleRemainder() constant_folding (before) + /// CHECK-START: double Main.DoubleRemainder() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const8:d\d+>> DoubleConstant 8 /// CHECK-DAG: <<Const2P5:d\d+>> DoubleConstant 2.5 /// CHECK-DAG: <<Rem:d\d+>> Rem [<<Const8>>,<<Const2P5>>] /// CHECK-DAG: Return [<<Rem>>] - /// CHECK-START: double Main.DoubleRemainder() constant_folding (after) + /// CHECK-START: double Main.DoubleRemainder() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const0P5:d\d+>> DoubleConstant 0.5 /// CHECK-DAG: Return [<<Const0P5>>] - /// CHECK-START: double Main.DoubleRemainder() constant_folding (after) + /// CHECK-START: double Main.DoubleRemainder() constant_folding_after_inlining (after) /// CHECK-NOT: Rem public static double DoubleRemainder() { double a, b, c; - a = 8D; - b = 2.5D; + a = $inline$double(8D); + b = $inline$double(2.5D); c = a % b; return c; } @@ -682,42 +695,42 @@ public class Main { * Exercise constant folding on left shift. */ - /// CHECK-START: int Main.ShlIntLong() constant_folding (before) + /// CHECK-START: int Main.ShlIntLong() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 /// CHECK-DAG: <<Const2L:j\d+>> LongConstant 2 /// CHECK-DAG: <<TypeConv:i\d+>> TypeConversion [<<Const2L>>] /// CHECK-DAG: <<Shl:i\d+>> Shl [<<Const1>>,<<TypeConv>>] /// CHECK-DAG: Return [<<Shl>>] - /// CHECK-START: int Main.ShlIntLong() constant_folding (after) + /// CHECK-START: int Main.ShlIntLong() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const4:i\d+>> IntConstant 4 /// CHECK-DAG: Return [<<Const4>>] - /// CHECK-START: int Main.ShlIntLong() constant_folding (after) + /// CHECK-START: int Main.ShlIntLong() constant_folding_after_inlining (after) /// CHECK-NOT: Shl public static int ShlIntLong() { - int lhs = 1; - long rhs = 2; + int lhs = $inline$int(1); + long rhs = $inline$long(2L); return lhs << rhs; } - /// CHECK-START: long Main.ShlLongInt() constant_folding (before) + /// CHECK-START: long Main.ShlLongInt() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const3L:j\d+>> LongConstant 3 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: <<Shl:j\d+>> Shl [<<Const3L>>,<<Const2>>] /// CHECK-DAG: Return [<<Shl>>] - /// CHECK-START: long Main.ShlLongInt() constant_folding (after) + /// CHECK-START: long Main.ShlLongInt() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const12L:j\d+>> LongConstant 12 /// CHECK-DAG: Return [<<Const12L>>] - /// CHECK-START: long Main.ShlLongInt() constant_folding (after) + /// CHECK-START: long Main.ShlLongInt() constant_folding_after_inlining (after) /// CHECK-NOT: Shl public static long ShlLongInt() { - long lhs = 3; - int rhs = 2; + long lhs = $inline$long(3L); + int rhs = $inline$int(2); return lhs << rhs; } @@ -726,42 +739,42 @@ public class Main { * Exercise constant folding on right shift. */ - /// CHECK-START: int Main.ShrIntLong() constant_folding (before) + /// CHECK-START: int Main.ShrIntLong() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const7:i\d+>> IntConstant 7 /// CHECK-DAG: <<Const2L:j\d+>> LongConstant 2 /// CHECK-DAG: <<TypeConv:i\d+>> TypeConversion [<<Const2L>>] /// CHECK-DAG: <<Shr:i\d+>> Shr [<<Const7>>,<<TypeConv>>] /// CHECK-DAG: Return [<<Shr>>] - /// CHECK-START: int Main.ShrIntLong() constant_folding (after) + /// CHECK-START: int Main.ShrIntLong() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 /// CHECK-DAG: Return [<<Const1>>] - /// CHECK-START: int Main.ShrIntLong() constant_folding (after) + /// CHECK-START: int Main.ShrIntLong() constant_folding_after_inlining (after) /// CHECK-NOT: Shr public static int ShrIntLong() { - int lhs = 7; - long rhs = 2; + int lhs = $inline$int(7); + long rhs = $inline$long(2L); return lhs >> rhs; } - /// CHECK-START: long Main.ShrLongInt() constant_folding (before) + /// CHECK-START: long Main.ShrLongInt() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const9L:j\d+>> LongConstant 9 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: <<Shr:j\d+>> Shr [<<Const9L>>,<<Const2>>] /// CHECK-DAG: Return [<<Shr>>] - /// CHECK-START: long Main.ShrLongInt() constant_folding (after) + /// CHECK-START: long Main.ShrLongInt() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const2L:j\d+>> LongConstant 2 /// CHECK-DAG: Return [<<Const2L>>] - /// CHECK-START: long Main.ShrLongInt() constant_folding (after) + /// CHECK-START: long Main.ShrLongInt() constant_folding_after_inlining (after) /// CHECK-NOT: Shr public static long ShrLongInt() { - long lhs = 9; - int rhs = 2; + long lhs = $inline$long(9); + int rhs = $inline$int(2); return lhs >> rhs; } @@ -770,42 +783,42 @@ public class Main { * Exercise constant folding on unsigned right shift. */ - /// CHECK-START: int Main.UShrIntLong() constant_folding (before) + /// CHECK-START: int Main.UShrIntLong() constant_folding_after_inlining (before) /// CHECK-DAG: <<ConstM7:i\d+>> IntConstant -7 /// CHECK-DAG: <<Const2L:j\d+>> LongConstant 2 /// CHECK-DAG: <<TypeConv:i\d+>> TypeConversion [<<Const2L>>] /// CHECK-DAG: <<UShr:i\d+>> UShr [<<ConstM7>>,<<TypeConv>>] /// CHECK-DAG: Return [<<UShr>>] - /// CHECK-START: int Main.UShrIntLong() constant_folding (after) + /// CHECK-START: int Main.UShrIntLong() constant_folding_after_inlining (after) /// CHECK-DAG: <<ConstRes:i\d+>> IntConstant 1073741822 /// CHECK-DAG: Return [<<ConstRes>>] - /// CHECK-START: int Main.UShrIntLong() constant_folding (after) + /// CHECK-START: int Main.UShrIntLong() constant_folding_after_inlining (after) /// CHECK-NOT: UShr public static int UShrIntLong() { - int lhs = -7; - long rhs = 2; + int lhs = $inline$int(-7); + long rhs = $inline$long(2L); return lhs >>> rhs; } - /// CHECK-START: long Main.UShrLongInt() constant_folding (before) + /// CHECK-START: long Main.UShrLongInt() constant_folding_after_inlining (before) /// CHECK-DAG: <<ConstM9L:j\d+>> LongConstant -9 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: <<UShr:j\d+>> UShr [<<ConstM9L>>,<<Const2>>] /// CHECK-DAG: Return [<<UShr>>] - /// CHECK-START: long Main.UShrLongInt() constant_folding (after) + /// CHECK-START: long Main.UShrLongInt() constant_folding_after_inlining (after) /// CHECK-DAG: <<ConstRes:j\d+>> LongConstant 4611686018427387901 /// CHECK-DAG: Return [<<ConstRes>>] - /// CHECK-START: long Main.UShrLongInt() constant_folding (after) + /// CHECK-START: long Main.UShrLongInt() constant_folding_after_inlining (after) /// CHECK-NOT: UShr public static long UShrLongInt() { - long lhs = -9; - int rhs = 2; + long lhs = $inline$long(-9); + int rhs = $inline$int(2); return lhs >>> rhs; } @@ -814,43 +827,43 @@ public class Main { * Exercise constant folding on logical and. */ - /// CHECK-START: long Main.AndIntLong() constant_folding (before) + /// CHECK-START: long Main.AndIntLong() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const10:i\d+>> IntConstant 10 /// CHECK-DAG: <<Const3L:j\d+>> LongConstant 3 /// CHECK-DAG: <<TypeConv:j\d+>> TypeConversion [<<Const10>>] /// CHECK-DAG: <<And:j\d+>> And [<<TypeConv>>,<<Const3L>>] /// CHECK-DAG: Return [<<And>>] - /// CHECK-START: long Main.AndIntLong() constant_folding (after) + /// CHECK-START: long Main.AndIntLong() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 /// CHECK-DAG: Return [<<Const2>>] - /// CHECK-START: long Main.AndIntLong() constant_folding (after) + /// CHECK-START: long Main.AndIntLong() constant_folding_after_inlining (after) /// CHECK-NOT: And public static long AndIntLong() { - int lhs = 10; - long rhs = 3; + int lhs = $inline$int(10); + long rhs = $inline$long(3L); return lhs & rhs; } - /// CHECK-START: long Main.AndLongInt() constant_folding (before) + /// CHECK-START: long Main.AndLongInt() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const10L:j\d+>> LongConstant 10 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: <<TypeConv:j\d+>> TypeConversion [<<Const3>>] /// CHECK-DAG: <<And:j\d+>> And [<<TypeConv>>,<<Const10L>>] /// CHECK-DAG: Return [<<And>>] - /// CHECK-START: long Main.AndLongInt() constant_folding (after) + /// CHECK-START: long Main.AndLongInt() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const2:j\d+>> LongConstant 2 /// CHECK-DAG: Return [<<Const2>>] - /// CHECK-START: long Main.AndLongInt() constant_folding (after) + /// CHECK-START: long Main.AndLongInt() constant_folding_after_inlining (after) /// CHECK-NOT: And public static long AndLongInt() { - long lhs = 10; - int rhs = 3; + long lhs = $inline$long(10L); + int rhs = $inline$int(3); return lhs & rhs; } @@ -859,43 +872,43 @@ public class Main { * Exercise constant folding on logical or. */ - /// CHECK-START: long Main.OrIntLong() constant_folding (before) + /// CHECK-START: long Main.OrIntLong() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const10:i\d+>> IntConstant 10 /// CHECK-DAG: <<Const3L:j\d+>> LongConstant 3 /// CHECK-DAG: <<TypeConv:j\d+>> TypeConversion [<<Const10>>] /// CHECK-DAG: <<Or:j\d+>> Or [<<TypeConv>>,<<Const3L>>] /// CHECK-DAG: Return [<<Or>>] - /// CHECK-START: long Main.OrIntLong() constant_folding (after) + /// CHECK-START: long Main.OrIntLong() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const11:j\d+>> LongConstant 11 /// CHECK-DAG: Return [<<Const11>>] - /// CHECK-START: long Main.OrIntLong() constant_folding (after) + /// CHECK-START: long Main.OrIntLong() constant_folding_after_inlining (after) /// CHECK-NOT: Or public static long OrIntLong() { - int lhs = 10; - long rhs = 3; + int lhs = $inline$int(10); + long rhs = $inline$long(3L); return lhs | rhs; } - /// CHECK-START: long Main.OrLongInt() constant_folding (before) + /// CHECK-START: long Main.OrLongInt() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const10L:j\d+>> LongConstant 10 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: <<TypeConv:j\d+>> TypeConversion [<<Const3>>] /// CHECK-DAG: <<Or:j\d+>> Or [<<TypeConv>>,<<Const10L>>] /// CHECK-DAG: Return [<<Or>>] - /// CHECK-START: long Main.OrLongInt() constant_folding (after) + /// CHECK-START: long Main.OrLongInt() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const11:j\d+>> LongConstant 11 /// CHECK-DAG: Return [<<Const11>>] - /// CHECK-START: long Main.OrLongInt() constant_folding (after) + /// CHECK-START: long Main.OrLongInt() constant_folding_after_inlining (after) /// CHECK-NOT: Or public static long OrLongInt() { - long lhs = 10; - int rhs = 3; + long lhs = $inline$long(10L); + int rhs = $inline$int(3); return lhs | rhs; } @@ -904,43 +917,43 @@ public class Main { * Exercise constant folding on logical exclusive or. */ - /// CHECK-START: long Main.XorIntLong() constant_folding (before) + /// CHECK-START: long Main.XorIntLong() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const10:i\d+>> IntConstant 10 /// CHECK-DAG: <<Const3L:j\d+>> LongConstant 3 /// CHECK-DAG: <<TypeConv:j\d+>> TypeConversion [<<Const10>>] /// CHECK-DAG: <<Xor:j\d+>> Xor [<<TypeConv>>,<<Const3L>>] /// CHECK-DAG: Return [<<Xor>>] - /// CHECK-START: long Main.XorIntLong() constant_folding (after) + /// CHECK-START: long Main.XorIntLong() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const9:j\d+>> LongConstant 9 /// CHECK-DAG: Return [<<Const9>>] - /// CHECK-START: long Main.XorIntLong() constant_folding (after) + /// CHECK-START: long Main.XorIntLong() constant_folding_after_inlining (after) /// CHECK-NOT: Xor public static long XorIntLong() { - int lhs = 10; - long rhs = 3; + int lhs = $inline$int(10); + long rhs = $inline$long(3L); return lhs ^ rhs; } - /// CHECK-START: long Main.XorLongInt() constant_folding (before) + /// CHECK-START: long Main.XorLongInt() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const10L:j\d+>> LongConstant 10 /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: <<TypeConv:j\d+>> TypeConversion [<<Const3>>] /// CHECK-DAG: <<Xor:j\d+>> Xor [<<TypeConv>>,<<Const10L>>] /// CHECK-DAG: Return [<<Xor>>] - /// CHECK-START: long Main.XorLongInt() constant_folding (after) + /// CHECK-START: long Main.XorLongInt() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const9:j\d+>> LongConstant 9 /// CHECK-DAG: Return [<<Const9>>] - /// CHECK-START: long Main.XorLongInt() constant_folding (after) + /// CHECK-START: long Main.XorLongInt() constant_folding_after_inlining (after) /// CHECK-NOT: Xor public static long XorLongInt() { - long lhs = 10; - int rhs = 3; + long lhs = $inline$long(10L); + int rhs = $inline$int(3); return lhs ^ rhs; } @@ -949,23 +962,23 @@ public class Main { * Exercise constant folding on constant (static) condition. */ - /// CHECK-START: int Main.StaticCondition() constant_folding (before) + /// CHECK-START: int Main.StaticCondition() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const7:i\d+>> IntConstant 7 /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: <<Cond:z\d+>> GreaterThanOrEqual [<<Const7>>,<<Const2>>] - /// CHECK-DAG: If [<<Cond>>] + /// CHECK-DAG: Select [{{i\d+}},{{i\d+}},<<Cond>>] - /// CHECK-START: int Main.StaticCondition() constant_folding (after) + /// CHECK-START: int Main.StaticCondition() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: If [<<Const1>>] + /// CHECK-DAG: Select [{{i\d+}},{{i\d+}},<<Const1>>] - /// CHECK-START: int Main.StaticCondition() constant_folding (after) + /// CHECK-START: int Main.StaticCondition() constant_folding_after_inlining (after) /// CHECK-NOT: GreaterThanOrEqual public static int StaticCondition() { int a, b, c; - a = 7; - b = 2; + a = $inline$int(7); + b = $inline$int(2); if (a < b) c = a + b; else @@ -1010,28 +1023,30 @@ public class Main { * (forward) post-order traversal of the the dominator tree. */ - /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (before) + /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding_after_inlining (before) + /// CHECK-DAG: <<Cond:z\d+>> ParameterValue /// CHECK-DAG: <<Const2:i\d+>> IntConstant 2 /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 /// CHECK-DAG: <<Add:i\d+>> Add [<<Const5>>,<<Const2>>] /// CHECK-DAG: <<Sub:i\d+>> Sub [<<Const5>>,<<Const2>>] - /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>] + /// CHECK-DAG: <<Phi:i\d+>> Select [<<Sub>>,<<Add>>,<<Cond>>] /// CHECK-DAG: Return [<<Phi>>] - /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after) + /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding_after_inlining (after) + /// CHECK-DAG: <<Cond:z\d+>> ParameterValue /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 /// CHECK-DAG: <<Const7:i\d+>> IntConstant 7 - /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Const7>>,<<Const3>>] + /// CHECK-DAG: <<Phi:i\d+>> Select [<<Const3>>,<<Const7>>,<<Cond>>] /// CHECK-DAG: Return [<<Phi>>] - /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after) + /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding_after_inlining (after) /// CHECK-NOT: Add /// CHECK-NOT: Sub public static int JumpsAndConditionals(boolean cond) { int a, b, c; - a = 5; - b = 2; + a = $inline$int(5); + b = $inline$int(2); if (cond) c = a + b; else @@ -1310,204 +1325,204 @@ public class Main { * Exercise constant folding on type conversions. */ - /// CHECK-START: int Main.ReturnInt33() constant_folding (before) + /// CHECK-START: int Main.ReturnInt33() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const33:j\d+>> LongConstant 33 /// CHECK-DAG: <<Convert:i\d+>> TypeConversion [<<Const33>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: int Main.ReturnInt33() constant_folding (after) + /// CHECK-START: int Main.ReturnInt33() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33 /// CHECK-DAG: Return [<<Const33>>] - /// CHECK-START: int Main.ReturnInt33() constant_folding (after) + /// CHECK-START: int Main.ReturnInt33() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static int ReturnInt33() { - long imm = 33L; + long imm = $inline$long(33L); return (int) imm; } - /// CHECK-START: int Main.ReturnIntMax() constant_folding (before) + /// CHECK-START: int Main.ReturnIntMax() constant_folding_after_inlining (before) /// CHECK-DAG: <<ConstMax:f\d+>> FloatConstant 1e+34 /// CHECK-DAG: <<Convert:i\d+>> TypeConversion [<<ConstMax>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: int Main.ReturnIntMax() constant_folding (after) + /// CHECK-START: int Main.ReturnIntMax() constant_folding_after_inlining (after) /// CHECK-DAG: <<ConstMax:i\d+>> IntConstant 2147483647 /// CHECK-DAG: Return [<<ConstMax>>] - /// CHECK-START: int Main.ReturnIntMax() constant_folding (after) + /// CHECK-START: int Main.ReturnIntMax() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static int ReturnIntMax() { - float imm = 1.0e34f; + float imm = $inline$float(1.0e34f); return (int) imm; } - /// CHECK-START: int Main.ReturnInt0() constant_folding (before) + /// CHECK-START: int Main.ReturnInt0() constant_folding_after_inlining (before) /// CHECK-DAG: <<ConstNaN:d\d+>> DoubleConstant nan /// CHECK-DAG: <<Convert:i\d+>> TypeConversion [<<ConstNaN>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: int Main.ReturnInt0() constant_folding (after) + /// CHECK-START: int Main.ReturnInt0() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 /// CHECK-DAG: Return [<<Const0>>] - /// CHECK-START: int Main.ReturnInt0() constant_folding (after) + /// CHECK-START: int Main.ReturnInt0() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static int ReturnInt0() { - double imm = Double.NaN; + double imm = $inline$double(Double.NaN); return (int) imm; } - /// CHECK-START: long Main.ReturnLong33() constant_folding (before) + /// CHECK-START: long Main.ReturnLong33() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33 /// CHECK-DAG: <<Convert:j\d+>> TypeConversion [<<Const33>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: long Main.ReturnLong33() constant_folding (after) + /// CHECK-START: long Main.ReturnLong33() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const33:j\d+>> LongConstant 33 /// CHECK-DAG: Return [<<Const33>>] - /// CHECK-START: long Main.ReturnLong33() constant_folding (after) + /// CHECK-START: long Main.ReturnLong33() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static long ReturnLong33() { - int imm = 33; + int imm = $inline$int(33); return (long) imm; } - /// CHECK-START: long Main.ReturnLong34() constant_folding (before) + /// CHECK-START: long Main.ReturnLong34() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const34:f\d+>> FloatConstant 34 /// CHECK-DAG: <<Convert:j\d+>> TypeConversion [<<Const34>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: long Main.ReturnLong34() constant_folding (after) + /// CHECK-START: long Main.ReturnLong34() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const34:j\d+>> LongConstant 34 /// CHECK-DAG: Return [<<Const34>>] - /// CHECK-START: long Main.ReturnLong34() constant_folding (after) + /// CHECK-START: long Main.ReturnLong34() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static long ReturnLong34() { - float imm = 34.0f; + float imm = $inline$float(34.0f); return (long) imm; } - /// CHECK-START: long Main.ReturnLong0() constant_folding (before) + /// CHECK-START: long Main.ReturnLong0() constant_folding_after_inlining (before) /// CHECK-DAG: <<ConstNaN:d\d+>> DoubleConstant nan /// CHECK-DAG: <<Convert:j\d+>> TypeConversion [<<ConstNaN>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: long Main.ReturnLong0() constant_folding (after) + /// CHECK-START: long Main.ReturnLong0() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const0:j\d+>> LongConstant 0 /// CHECK-DAG: Return [<<Const0>>] - /// CHECK-START: long Main.ReturnLong0() constant_folding (after) + /// CHECK-START: long Main.ReturnLong0() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static long ReturnLong0() { - double imm = -Double.NaN; + double imm = $inline$double(-Double.NaN); return (long) imm; } - /// CHECK-START: float Main.ReturnFloat33() constant_folding (before) + /// CHECK-START: float Main.ReturnFloat33() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33 /// CHECK-DAG: <<Convert:f\d+>> TypeConversion [<<Const33>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: float Main.ReturnFloat33() constant_folding (after) + /// CHECK-START: float Main.ReturnFloat33() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const33:f\d+>> FloatConstant 33 /// CHECK-DAG: Return [<<Const33>>] - /// CHECK-START: float Main.ReturnFloat33() constant_folding (after) + /// CHECK-START: float Main.ReturnFloat33() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static float ReturnFloat33() { - int imm = 33; + int imm = $inline$int(33); return (float) imm; } - /// CHECK-START: float Main.ReturnFloat34() constant_folding (before) + /// CHECK-START: float Main.ReturnFloat34() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const34:j\d+>> LongConstant 34 /// CHECK-DAG: <<Convert:f\d+>> TypeConversion [<<Const34>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: float Main.ReturnFloat34() constant_folding (after) + /// CHECK-START: float Main.ReturnFloat34() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const34:f\d+>> FloatConstant 34 /// CHECK-DAG: Return [<<Const34>>] - /// CHECK-START: float Main.ReturnFloat34() constant_folding (after) + /// CHECK-START: float Main.ReturnFloat34() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static float ReturnFloat34() { - long imm = 34L; + long imm = $inline$long(34L); return (float) imm; } - /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (before) + /// CHECK-START: float Main.ReturnFloat99P25() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const:d\d+>> DoubleConstant 99.25 /// CHECK-DAG: <<Convert:f\d+>> TypeConversion [<<Const>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after) + /// CHECK-START: float Main.ReturnFloat99P25() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const:f\d+>> FloatConstant 99.25 /// CHECK-DAG: Return [<<Const>>] - /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after) + /// CHECK-START: float Main.ReturnFloat99P25() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static float ReturnFloat99P25() { - double imm = 99.25; + double imm = $inline$double(99.25); return (float) imm; } - /// CHECK-START: double Main.ReturnDouble33() constant_folding (before) + /// CHECK-START: double Main.ReturnDouble33() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const33:i\d+>> IntConstant 33 /// CHECK-DAG: <<Convert:d\d+>> TypeConversion [<<Const33>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: double Main.ReturnDouble33() constant_folding (after) + /// CHECK-START: double Main.ReturnDouble33() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const33:d\d+>> DoubleConstant 33 /// CHECK-DAG: Return [<<Const33>>] public static double ReturnDouble33() { - int imm = 33; + int imm = $inline$int(33); return (double) imm; } - /// CHECK-START: double Main.ReturnDouble34() constant_folding (before) + /// CHECK-START: double Main.ReturnDouble34() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const34:j\d+>> LongConstant 34 /// CHECK-DAG: <<Convert:d\d+>> TypeConversion [<<Const34>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: double Main.ReturnDouble34() constant_folding (after) + /// CHECK-START: double Main.ReturnDouble34() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const34:d\d+>> DoubleConstant 34 /// CHECK-DAG: Return [<<Const34>>] - /// CHECK-START: double Main.ReturnDouble34() constant_folding (after) + /// CHECK-START: double Main.ReturnDouble34() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static double ReturnDouble34() { - long imm = 34L; + long imm = $inline$long(34L); return (double) imm; } - /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (before) + /// CHECK-START: double Main.ReturnDouble99P25() constant_folding_after_inlining (before) /// CHECK-DAG: <<Const:f\d+>> FloatConstant 99.25 /// CHECK-DAG: <<Convert:d\d+>> TypeConversion [<<Const>>] /// CHECK-DAG: Return [<<Convert>>] - /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after) + /// CHECK-START: double Main.ReturnDouble99P25() constant_folding_after_inlining (after) /// CHECK-DAG: <<Const:d\d+>> DoubleConstant 99.25 /// CHECK-DAG: Return [<<Const>>] - /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after) + /// CHECK-START: double Main.ReturnDouble99P25() constant_folding_after_inlining (after) /// CHECK-NOT: TypeConversion public static double ReturnDouble99P25() { - float imm = 99.25f; + float imm = $inline$float(99.25f); return (double) imm; } diff --git a/test/450-checker-types/smali/SmaliTests.smali b/test/450-checker-types/smali/SmaliTests.smali new file mode 100644 index 0000000000..6a3122e41b --- /dev/null +++ b/test/450-checker-types/smali/SmaliTests.smali @@ -0,0 +1,120 @@ +# Copyright (C) 2016 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +.class public LSmaliTests; +.super Ljava/lang/Object; + +## CHECK-START: void SmaliTests.testInstanceOf_EQ0_NotInlined(java.lang.Object) builder (after) +## CHECK-DAG: <<Cst0:i\d+>> IntConstant 0 +## CHECK-DAG: <<IOf:z\d+>> InstanceOf +## CHECK-DAG: Equal [<<IOf>>,<<Cst0>>] + +## CHECK-START: void SmaliTests.testInstanceOf_EQ0_NotInlined(java.lang.Object) instruction_simplifier (before) +## CHECK: CheckCast + +## CHECK-START: void SmaliTests.testInstanceOf_EQ0_NotInlined(java.lang.Object) instruction_simplifier (after) +## CHECK-NOT: CheckCast + +.method public static testInstanceOf_EQ0_NotInlined(Ljava/lang/Object;)V + .registers 3 + + const v0, 0x0 + instance-of v1, p0, LSubclassC; + if-eq v1, v0, :return + + check-cast p0, LSubclassC; + invoke-virtual {p0}, LSubclassC;->$noinline$g()V + + :return + return-void + +.end method + +## CHECK-START: void SmaliTests.testInstanceOf_EQ1_NotInlined(java.lang.Object) builder (after) +## CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 +## CHECK-DAG: <<IOf:z\d+>> InstanceOf +## CHECK-DAG: Equal [<<IOf>>,<<Cst1>>] + +## CHECK-START: void SmaliTests.testInstanceOf_EQ1_NotInlined(java.lang.Object) instruction_simplifier (before) +## CHECK: CheckCast + +## CHECK-START: void SmaliTests.testInstanceOf_EQ1_NotInlined(java.lang.Object) instruction_simplifier (after) +## CHECK-NOT: CheckCast + +.method public static testInstanceOf_EQ1_NotInlined(Ljava/lang/Object;)V + .registers 3 + + const v0, 0x1 + instance-of v1, p0, LSubclassC; + if-eq v1, v0, :invoke + return-void + + :invoke + check-cast p0, LSubclassC; + invoke-virtual {p0}, LSubclassC;->$noinline$g()V + return-void + +.end method + +## CHECK-START: void SmaliTests.testInstanceOf_NE0_NotInlined(java.lang.Object) builder (after) +## CHECK-DAG: <<Cst0:i\d+>> IntConstant 0 +## CHECK-DAG: <<IOf:z\d+>> InstanceOf +## CHECK-DAG: NotEqual [<<IOf>>,<<Cst0>>] + +## CHECK-START: void SmaliTests.testInstanceOf_NE0_NotInlined(java.lang.Object) instruction_simplifier (before) +## CHECK: CheckCast + +## CHECK-START: void SmaliTests.testInstanceOf_NE0_NotInlined(java.lang.Object) instruction_simplifier (after) +## CHECK-NOT: CheckCast + +.method public static testInstanceOf_NE0_NotInlined(Ljava/lang/Object;)V + .registers 3 + + const v0, 0x0 + instance-of v1, p0, LSubclassC; + if-ne v1, v0, :invoke + return-void + + :invoke + check-cast p0, LSubclassC; + invoke-virtual {p0}, LSubclassC;->$noinline$g()V + return-void + +.end method + +## CHECK-START: void SmaliTests.testInstanceOf_NE1_NotInlined(java.lang.Object) builder (after) +## CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 +## CHECK-DAG: <<IOf:z\d+>> InstanceOf +## CHECK-DAG: NotEqual [<<IOf>>,<<Cst1>>] + +## CHECK-START: void SmaliTests.testInstanceOf_NE1_NotInlined(java.lang.Object) instruction_simplifier (before) +## CHECK: CheckCast + +## CHECK-START: void SmaliTests.testInstanceOf_NE1_NotInlined(java.lang.Object) instruction_simplifier (after) +## CHECK-NOT: CheckCast + +.method public static testInstanceOf_NE1_NotInlined(Ljava/lang/Object;)V + .registers 3 + + const v0, 0x1 + instance-of v1, p0, LSubclassC; + if-ne v1, v0, :return + + check-cast p0, LSubclassC; + invoke-virtual {p0}, LSubclassC;->$noinline$g()V + + :return + return-void + +.end method diff --git a/test/450-checker-types/src/Main.java b/test/450-checker-types/src/Main.java index 027a9d9487..08b6cec35f 100644 --- a/test/450-checker-types/src/Main.java +++ b/test/450-checker-types/src/Main.java @@ -205,58 +205,6 @@ public class Main { public static boolean $inline$InstanceofSubclassB(Object o) { return o instanceof SubclassB; } public static boolean $inline$InstanceofSubclassC(Object o) { return o instanceof SubclassC; } - /// CHECK-START: void Main.testInstanceOf_NotInlined(java.lang.Object) builder (after) - /// CHECK-DAG: <<Cst0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<IOf1:z\d+>> InstanceOf - /// CHECK-DAG: NotEqual [<<IOf1>>,<<Cst1>>] - /// CHECK-DAG: <<IOf2:z\d+>> InstanceOf - /// CHECK-DAG: Equal [<<IOf2>>,<<Cst0>>] - - /// CHECK-START: void Main.testInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (before) - /// CHECK: CheckCast - /// CHECK: CheckCast - /// CHECK-NOT: CheckCast - - /// CHECK-START: void Main.testInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (after) - /// CHECK-NOT: CheckCast - public void testInstanceOf_NotInlined(Object o) { - if ((o instanceof SubclassC) == true) { - ((SubclassC)o).$noinline$g(); - } - if ((o instanceof SubclassB) != false) { - ((SubclassB)o).$noinline$g(); - } - } - - /// CHECK-START: void Main.testNotInstanceOf_NotInlined(java.lang.Object) builder (after) - /// CHECK-DAG: <<Cst0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<IOf1:z\d+>> InstanceOf - /// CHECK-DAG: Equal [<<IOf1>>,<<Cst1>>] - /// CHECK-DAG: <<IOf2:z\d+>> InstanceOf - /// CHECK-DAG: NotEqual [<<IOf2>>,<<Cst0>>] - - /// CHECK-START: void Main.testNotInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (before) - /// CHECK: CheckCast - /// CHECK: CheckCast - /// CHECK-NOT: CheckCast - - /// CHECK-START: void Main.testNotInstanceOf_NotInlined(java.lang.Object) instruction_simplifier (after) - /// CHECK-NOT: CheckCast - public void testNotInstanceOf_NotInlined(Object o) { - if ((o instanceof SubclassC) != true) { - // Empty branch to flip the condition. - } else { - ((SubclassC)o).$noinline$g(); - } - if ((o instanceof SubclassB) == false) { - // Empty branch to flip the condition. - } else { - ((SubclassB)o).$noinline$g(); - } - } - /// CHECK-START: void Main.testInstanceOf_Inlined(java.lang.Object) inliner (after) /// CHECK-DAG: <<IOf:z\d+>> InstanceOf /// CHECK-DAG: If [<<IOf>>] diff --git a/test/458-checker-instruction-simplification/smali/SmaliTests.smali b/test/458-checker-instruction-simplification/smali/SmaliTests.smali new file mode 100644 index 0000000000..ede599b213 --- /dev/null +++ b/test/458-checker-instruction-simplification/smali/SmaliTests.smali @@ -0,0 +1,193 @@ +# Copyright (C) 2016 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +.class public LSmaliTests; +.super Ljava/lang/Object; + +## CHECK-START: int SmaliTests.EqualTrueRhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const1:i\d+>> IntConstant 1 +## CHECK-DAG: <<Cond:z\d+>> Equal [<<Arg>>,<<Const1>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.EqualTrueRhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static EqualTrueRhs(Z)I + .registers 3 + + const v0, 0x1 + const v1, 0x5 + if-eq p0, v0, :return + const v1, 0x3 + :return + return v1 + +.end method + +## CHECK-START: int SmaliTests.EqualTrueLhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const1:i\d+>> IntConstant 1 +## CHECK-DAG: <<Cond:z\d+>> Equal [<<Const1>>,<<Arg>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.EqualTrueLhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static EqualTrueLhs(Z)I + .registers 3 + + const v0, 0x1 + const v1, 0x5 + if-eq v0, p0, :return + const v1, 0x3 + :return + return v1 + +.end method + +## CHECK-START: int SmaliTests.EqualFalseRhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const0:i\d+>> IntConstant 0 +## CHECK-DAG: <<Cond:z\d+>> Equal [<<Arg>>,<<Const0>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.EqualFalseRhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static EqualFalseRhs(Z)I + .registers 3 + + const v0, 0x0 + const v1, 0x3 + if-eq p0, v0, :return + const v1, 0x5 + :return + return v1 + +.end method + +## CHECK-START: int SmaliTests.EqualFalseLhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const0:i\d+>> IntConstant 0 +## CHECK-DAG: <<Cond:z\d+>> Equal [<<Const0>>,<<Arg>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.EqualFalseLhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static EqualFalseLhs(Z)I + .registers 3 + + const v0, 0x0 + const v1, 0x3 + if-eq v0, p0, :return + const v1, 0x5 + :return + return v1 + +.end method + +## CHECK-START: int SmaliTests.NotEqualTrueRhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const1:i\d+>> IntConstant 1 +## CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Arg>>,<<Const1>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.NotEqualTrueRhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static NotEqualTrueRhs(Z)I + .registers 3 + + const v0, 0x1 + const v1, 0x3 + if-ne p0, v0, :return + const v1, 0x5 + :return + return v1 + +.end method + +## CHECK-START: int SmaliTests.NotEqualTrueLhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const1:i\d+>> IntConstant 1 +## CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Const1>>,<<Arg>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.NotEqualTrueLhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static NotEqualTrueLhs(Z)I + .registers 3 + + const v0, 0x1 + const v1, 0x3 + if-ne v0, p0, :return + const v1, 0x5 + :return + return v1 + +.end method + +## CHECK-START: int SmaliTests.NotEqualFalseRhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const0:i\d+>> IntConstant 0 +## CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Arg>>,<<Const0>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.NotEqualFalseRhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static NotEqualFalseRhs(Z)I + .registers 3 + + const v0, 0x0 + const v1, 0x5 + if-ne p0, v0, :return + const v1, 0x3 + :return + return v1 + +.end method + +## CHECK-START: int SmaliTests.NotEqualFalseLhs(boolean) instruction_simplifier (before) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: <<Const0:i\d+>> IntConstant 0 +## CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Const0>>,<<Arg>>] +## CHECK-DAG: If [<<Cond>>] + +## CHECK-START: int SmaliTests.NotEqualFalseLhs(boolean) instruction_simplifier (after) +## CHECK-DAG: <<Arg:z\d+>> ParameterValue +## CHECK-DAG: If [<<Arg>>] + +.method public static NotEqualFalseLhs(Z)I + .registers 3 + + const v0, 0x0 + const v1, 0x5 + if-ne v0, p0, :return + const v1, 0x3 + :return + return v1 + +.end method + diff --git a/test/458-checker-instruction-simplification/src/Main.java b/test/458-checker-instruction-simplification/src/Main.java index 8d6bb653f4..8640148795 100644 --- a/test/458-checker-instruction-simplification/src/Main.java +++ b/test/458-checker-instruction-simplification/src/Main.java @@ -14,6 +14,8 @@ * limitations under the License. */ +import java.lang.reflect.Method; + public class Main { public static void assertBooleanEquals(boolean expected, boolean result) { @@ -826,17 +828,16 @@ public class Main { /// CHECK-START: long Main.NotNot1(long) instruction_simplifier (before) /// CHECK-DAG: <<Arg:j\d+>> ParameterValue - /// CHECK-DAG: <<ConstF1:j\d+>> LongConstant -1 - /// CHECK-DAG: <<Xor1:j\d+>> Xor [<<Arg>>,<<ConstF1>>] - /// CHECK-DAG: <<Xor2:j\d+>> Xor [<<Xor1>>,<<ConstF1>>] - /// CHECK-DAG: Return [<<Xor2>>] + /// CHECK-DAG: <<Not1:j\d+>> Not [<<Arg>>] + /// CHECK-DAG: <<Not2:j\d+>> Not [<<Not1>>] + /// CHECK-DAG: Return [<<Not2>>] /// CHECK-START: long Main.NotNot1(long) instruction_simplifier (after) /// CHECK-DAG: <<Arg:j\d+>> ParameterValue /// CHECK-DAG: Return [<<Arg>>] /// CHECK-START: long Main.NotNot1(long) instruction_simplifier (after) - /// CHECK-NOT: Xor + /// CHECK-NOT: Not public static long NotNot1(long arg) { return ~~arg; @@ -844,10 +845,9 @@ public class Main { /// CHECK-START: int Main.NotNot2(int) instruction_simplifier (before) /// CHECK-DAG: <<Arg:i\d+>> ParameterValue - /// CHECK-DAG: <<ConstF1:i\d+>> IntConstant -1 - /// CHECK-DAG: <<Xor1:i\d+>> Xor [<<Arg>>,<<ConstF1>>] - /// CHECK-DAG: <<Xor2:i\d+>> Xor [<<Xor1>>,<<ConstF1>>] - /// CHECK-DAG: <<Add:i\d+>> Add [<<Xor2>>,<<Xor1>>] + /// CHECK-DAG: <<Not1:i\d+>> Not [<<Arg>>] + /// CHECK-DAG: <<Not2:i\d+>> Not [<<Not1>>] + /// CHECK-DAG: <<Add:i\d+>> Add [<<Not2>>,<<Not1>>] /// CHECK-DAG: Return [<<Add>>] /// CHECK-START: int Main.NotNot2(int) instruction_simplifier (after) @@ -857,7 +857,8 @@ public class Main { /// CHECK-DAG: Return [<<Add>>] /// CHECK-START: int Main.NotNot2(int) instruction_simplifier (after) - /// CHECK-NOT: Xor + /// CHECK: Not + /// CHECK-NOT: Not public static int NotNot2(int arg) { int temp = ~arg; @@ -965,174 +966,6 @@ public class Main { return res; } - /// CHECK-START: int Main.EqualTrueRhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<Cond:z\d+>> Equal [<<Arg>>,<<Const1>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.EqualTrueRhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.EqualTrueRhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const3>>,<<Const5>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int EqualTrueRhs(boolean arg) { - return (arg != true) ? 3 : 5; - } - - /// CHECK-START: int Main.EqualTrueLhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<Cond:z\d+>> Equal [<<Const1>>,<<Arg>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.EqualTrueLhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.EqualTrueLhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const3>>,<<Const5>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int EqualTrueLhs(boolean arg) { - return (true != arg) ? 3 : 5; - } - - /// CHECK-START: int Main.EqualFalseRhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cond:z\d+>> Equal [<<Arg>>,<<Const0>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.EqualFalseRhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.EqualFalseRhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const5>>,<<Const3>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int EqualFalseRhs(boolean arg) { - return (arg != false) ? 3 : 5; - } - - /// CHECK-START: int Main.EqualFalseLhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cond:z\d+>> Equal [<<Arg>>,<<Const0>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.EqualFalseLhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.EqualFalseLhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const5>>,<<Const3>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int EqualFalseLhs(boolean arg) { - return (false != arg) ? 3 : 5; - } - - /// CHECK-START: int Main.NotEqualTrueRhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Arg>>,<<Const1>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.NotEqualTrueRhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.NotEqualTrueRhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const5>>,<<Const3>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int NotEqualTrueRhs(boolean arg) { - return (arg == true) ? 3 : 5; - } - - /// CHECK-START: int Main.NotEqualTrueLhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Const1>>,<<Arg>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.NotEqualTrueLhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.NotEqualTrueLhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const5>>,<<Const3>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int NotEqualTrueLhs(boolean arg) { - return (true == arg) ? 3 : 5; - } - - /// CHECK-START: int Main.NotEqualFalseRhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Arg>>,<<Const0>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.NotEqualFalseRhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.NotEqualFalseRhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const3>>,<<Const5>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int NotEqualFalseRhs(boolean arg) { - return (arg == false) ? 3 : 5; - } - - /// CHECK-START: int Main.NotEqualFalseLhs(boolean) instruction_simplifier (before) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 - /// CHECK-DAG: <<Cond:z\d+>> NotEqual [<<Arg>>,<<Const0>>] - /// CHECK-DAG: If [<<Cond>>] - - /// CHECK-START: int Main.NotEqualFalseLhs(boolean) instruction_simplifier (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: If [<<Arg>>] - - /// CHECK-START: int Main.NotEqualFalseLhs(boolean) instruction_simplifier_before_codegen (after) - /// CHECK-DAG: <<Arg:z\d+>> ParameterValue - /// CHECK-DAG: <<Const3:i\d+>> IntConstant 3 - /// CHECK-DAG: <<Const5:i\d+>> IntConstant 5 - /// CHECK-DAG: <<Select:i\d+>> Select [<<Const3>>,<<Const5>>,<<Arg>>] - /// CHECK-DAG: Return [<<Select>>] - - public static int NotEqualFalseLhs(boolean arg) { - return (false == arg) ? 3 : 5; - } - /// CHECK-START: boolean Main.EqualBoolVsIntConst(boolean) instruction_simplifier_after_bce (before) /// CHECK-DAG: <<Arg:z\d+>> ParameterValue /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 @@ -1307,17 +1140,16 @@ public class Main { return arg * 31; } - /// CHECK-START: int Main.booleanFieldNotEqualOne() instruction_simplifier (before) + /// CHECK-START: int Main.booleanFieldNotEqualOne() instruction_simplifier_after_bce (before) /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 + /// CHECK-DAG: <<Const13:i\d+>> IntConstant 13 + /// CHECK-DAG: <<Const54:i\d+>> IntConstant 54 /// CHECK-DAG: <<Field:z\d+>> StaticFieldGet /// CHECK-DAG: <<NE:z\d+>> NotEqual [<<Field>>,<<Const1>>] - /// CHECK-DAG: If [<<NE>>] - - /// CHECK-START: int Main.booleanFieldNotEqualOne() instruction_simplifier (after) - /// CHECK-DAG: <<Field:z\d+>> StaticFieldGet - /// CHECK-DAG: If [<<Field>>] + /// CHECK-DAG: <<Select:i\d+>> Select [<<Const13>>,<<Const54>>,<<NE>>] + /// CHECK-DAG: Return [<<Select>>] - /// CHECK-START: int Main.booleanFieldNotEqualOne() instruction_simplifier_before_codegen (after) + /// CHECK-START: int Main.booleanFieldNotEqualOne() instruction_simplifier_after_bce (after) /// CHECK-DAG: <<Field:z\d+>> StaticFieldGet /// CHECK-DAG: <<Const13:i\d+>> IntConstant 13 /// CHECK-DAG: <<Const54:i\d+>> IntConstant 54 @@ -1325,20 +1157,19 @@ public class Main { /// CHECK-DAG: Return [<<Select>>] public static int booleanFieldNotEqualOne() { - return (booleanField == true) ? 13 : 54; + return (booleanField == $inline$true()) ? 13 : 54; } - /// CHECK-START: int Main.booleanFieldEqualZero() instruction_simplifier (before) + /// CHECK-START: int Main.booleanFieldEqualZero() instruction_simplifier_after_bce (before) /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 + /// CHECK-DAG: <<Const13:i\d+>> IntConstant 13 + /// CHECK-DAG: <<Const54:i\d+>> IntConstant 54 /// CHECK-DAG: <<Field:z\d+>> StaticFieldGet - /// CHECK-DAG: <<EQ:z\d+>> Equal [<<Field>>,<<Const0>>] - /// CHECK-DAG: If [<<EQ>>] - - /// CHECK-START: int Main.booleanFieldEqualZero() instruction_simplifier (after) - /// CHECK-DAG: <<Field:z\d+>> StaticFieldGet - /// CHECK-DAG: If [<<Field>>] + /// CHECK-DAG: <<NE:z\d+>> Equal [<<Field>>,<<Const0>>] + /// CHECK-DAG: <<Select:i\d+>> Select [<<Const13>>,<<Const54>>,<<NE>>] + /// CHECK-DAG: Return [<<Select>>] - /// CHECK-START: int Main.booleanFieldEqualZero() instruction_simplifier_before_codegen (after) + /// CHECK-START: int Main.booleanFieldEqualZero() instruction_simplifier_after_bce (after) /// CHECK-DAG: <<Field:z\d+>> StaticFieldGet /// CHECK-DAG: <<Const13:i\d+>> IntConstant 13 /// CHECK-DAG: <<Const54:i\d+>> IntConstant 54 @@ -1346,7 +1177,7 @@ public class Main { /// CHECK-DAG: Return [<<Select>>] public static int booleanFieldEqualZero() { - return (booleanField != false) ? 13 : 54; + return (booleanField != $inline$false()) ? 13 : 54; } /// CHECK-START: int Main.intConditionNotEqualOne(int) instruction_simplifier_after_bce (before) @@ -1374,7 +1205,7 @@ public class Main { // LessThanOrEqual instructions. public static int intConditionNotEqualOne(int i) { - return ((i > 42) == true) ? 13 : 54; + return ((i > 42) == $inline$true()) ? 13 : 54; } /// CHECK-START: int Main.intConditionEqualZero(int) instruction_simplifier_after_bce (before) @@ -1402,7 +1233,7 @@ public class Main { // LessThanOrEqual instructions. public static int intConditionEqualZero(int i) { - return ((i > 42) != false) ? 13 : 54; + return ((i > 42) != $inline$false()) ? 13 : 54; } // Test that conditions on float/double are not flipped. @@ -1770,6 +1601,16 @@ public class Main { return (short) (value & 0x17fff); } + public static int runSmaliTest(String name, boolean input) { + try { + Class<?> c = Class.forName("SmaliTests"); + Method m = c.getMethod(name, new Class[] { boolean.class }); + return (Integer) m.invoke(null, input); + } catch (Exception ex) { + throw new Error(ex); + } + } + public static void main(String[] args) { int arg = 123456; @@ -1804,14 +1645,6 @@ public class Main { assertIntEquals(SubNeg1(arg, arg + 1), -(arg + arg + 1)); assertIntEquals(SubNeg2(arg, arg + 1), -(arg + arg + 1)); assertLongEquals(SubNeg3(arg, arg + 1), -(2 * arg + 1)); - assertIntEquals(EqualTrueRhs(true), 5); - assertIntEquals(EqualTrueLhs(true), 5); - assertIntEquals(EqualFalseRhs(true), 3); - assertIntEquals(EqualFalseLhs(true), 3); - assertIntEquals(NotEqualTrueRhs(true), 3); - assertIntEquals(NotEqualTrueLhs(true), 3); - assertIntEquals(NotEqualFalseRhs(true), 5); - assertIntEquals(NotEqualFalseLhs(true), 5); assertBooleanEquals(EqualBoolVsIntConst(true), true); assertBooleanEquals(EqualBoolVsIntConst(true), true); assertBooleanEquals(NotEqualBoolVsIntConst(false), false); @@ -1906,7 +1739,20 @@ public class Main { assertIntEquals(intAnd0x17fffToShort(0x88888888), 0x0888); assertIntEquals(intAnd0x17fffToShort(Integer.MIN_VALUE), 0); assertIntEquals(intAnd0x17fffToShort(Integer.MAX_VALUE), Short.MAX_VALUE); + + for (String condition : new String[] { "Equal", "NotEqual" }) { + for (String constant : new String[] { "True", "False" }) { + for (String side : new String[] { "Rhs", "Lhs" }) { + String name = condition + constant + side; + assertIntEquals(runSmaliTest(name, true), 5); + assertIntEquals(runSmaliTest(name, false), 3); + } + } + } } + private static boolean $inline$true() { return true; } + private static boolean $inline$false() { return false; } + public static boolean booleanField; } diff --git a/test/463-checker-boolean-simplifier/src/Main.java b/test/463-checker-boolean-simplifier/src/Main.java index 682f12641f..f0fe1b172f 100644 --- a/test/463-checker-boolean-simplifier/src/Main.java +++ b/test/463-checker-boolean-simplifier/src/Main.java @@ -42,7 +42,7 @@ public class Main { /// 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: <<Phi:i\d+>> Phi [<<Const0>>,<<Const1>>] /// CHECK-DAG: Return [<<Phi>>] /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (before) @@ -185,11 +185,7 @@ public class Main { /// CHECK-NOT: BooleanNot public static int NegatedCondition(boolean x) { - if (x != false) { - return 42; - } else { - return 43; - } + return (x != false) ? 42 : 43; } /// CHECK-START: int Main.SimpleTrueBlock(boolean, int) select_generator (after) @@ -253,13 +249,7 @@ public class Main { /// CHECK-DAG: Return [<<Select123>>] public static int ThreeBlocks(boolean x, boolean y) { - if (x) { - return 1; - } else if (y) { - return 2; - } else { - return 3; - } + return x ? 1 : (y ? 2 : 3); } /// CHECK-START: int Main.MultiplePhis() select_generator (before) @@ -292,8 +282,10 @@ public class Main { while (y++ < 10) { if (y > 1) { x = 13; + continue; } else { x = 42; + continue; } } return x; diff --git a/test/537-checker-inline-and-unverified/src/Main.java b/test/537-checker-inline-and-unverified/src/Main.java index bdc14b027c..b9d5fc98cc 100644 --- a/test/537-checker-inline-and-unverified/src/Main.java +++ b/test/537-checker-inline-and-unverified/src/Main.java @@ -45,12 +45,14 @@ public class Main { } public static boolean $opt$noinline$testNoInline() { + boolean result = true; try { - return null instanceof InaccessibleClass; + result = (null instanceof InaccessibleClass); + throw new Error("Unreachable"); } catch (IllegalAccessError e) { // expected } - return false; + return result; } public static boolean $opt$inline$testInline() { diff --git a/test/555-checker-regression-x86const/build b/test/555-checker-regression-x86const/build index 09dcc363dd..92ddfc9a58 100644 --- a/test/555-checker-regression-x86const/build +++ b/test/555-checker-regression-x86const/build @@ -27,14 +27,12 @@ mkdir classes-ex mv classes/UnresolvedClass.class classes-ex if [ ${USE_JACK} = "true" ]; then - # Create .jack files from classes generated with javac. - ${JILL} classes --output classes.jack - ${JILL} classes-ex --output classes-ex.jack + jar cf classes.jill.jar -C classes . + jar cf classes-ex.jill.jar -C classes-ex . - # Create DEX files from .jack files. - ${JACK} --import classes.jack --output-dex . + ${JACK} --import classes.jill.jar --output-dex . zip $TEST_NAME.jar classes.dex - ${JACK} --import classes-ex.jack --output-dex . + ${JACK} --import classes-ex.jill.jar --output-dex . zip ${TEST_NAME}-ex.jar classes.dex else if [ ${NEED_DEX} = "true" ]; then diff --git a/test/565-checker-doublenegbitwise/src/Main.java b/test/565-checker-doublenegbitwise/src/Main.java index 2d70e111aa..e426b75bf0 100644 --- a/test/565-checker-doublenegbitwise/src/Main.java +++ b/test/565-checker-doublenegbitwise/src/Main.java @@ -35,14 +35,11 @@ public class Main { * Test transformation of Not/Not/And into Or/Not. */ - // Note: before the instruction_simplifier pass, Xor's are used instead of - // Not's (the simplification happens during the same pass). /// CHECK-START: int Main.$opt$noinline$andToOr(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue - /// CHECK: <<CstM1:i\d+>> IntConstant -1 - /// CHECK: <<Not1:i\d+>> Xor [<<P1>>,<<CstM1>>] - /// CHECK: <<Not2:i\d+>> Xor [<<P2>>,<<CstM1>>] + /// CHECK: <<Not1:i\d+>> Not [<<P1>>] + /// CHECK: <<Not2:i\d+>> Not [<<P2>>] /// CHECK: <<And:i\d+>> And [<<Not1>>,<<Not2>>] /// CHECK: Return [<<And>>] @@ -106,14 +103,11 @@ public class Main { * Test transformation of Not/Not/Or into And/Not. */ - // See note above. - // The second Xor has its arguments reversed for no obvious reason. /// CHECK-START: long Main.$opt$noinline$orToAnd(long, long) instruction_simplifier (before) /// CHECK: <<P1:j\d+>> ParameterValue /// CHECK: <<P2:j\d+>> ParameterValue - /// CHECK: <<CstM1:j\d+>> LongConstant -1 - /// CHECK: <<Not1:j\d+>> Xor [<<P1>>,<<CstM1>>] - /// CHECK: <<Not2:j\d+>> Xor [<<CstM1>>,<<P2>>] + /// CHECK: <<Not1:j\d+>> Not [<<P1>>] + /// CHECK: <<Not2:j\d+>> Not [<<P2>>] /// CHECK: <<Or:j\d+>> Or [<<Not1>>,<<Not2>>] /// CHECK: Return [<<Or>>] @@ -183,12 +177,11 @@ public class Main { /// CHECK-START: int Main.$opt$noinline$regressInputsAway(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue - /// CHECK-DAG: <<Cst1:i\d+>> IntConstant 1 - /// CHECK-DAG: <<CstM1:i\d+>> IntConstant -1 + /// CHECK: <<Cst1:i\d+>> IntConstant 1 /// CHECK: <<AddP1:i\d+>> Add [<<P1>>,<<Cst1>>] - /// CHECK: <<Not1:i\d+>> Xor [<<AddP1>>,<<CstM1>>] + /// CHECK: <<Not1:i\d+>> Not [<<AddP1>>] /// CHECK: <<AddP2:i\d+>> Add [<<P2>>,<<Cst1>>] - /// CHECK: <<Not2:i\d+>> Xor [<<AddP2>>,<<CstM1>>] + /// CHECK: <<Not2:i\d+>> Not [<<AddP2>>] /// CHECK: <<Or:i\d+>> Or [<<Not1>>,<<Not2>>] /// CHECK: Return [<<Or>>] @@ -226,9 +219,8 @@ public class Main { /// CHECK-START: int Main.$opt$noinline$notXorToXor(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue - /// CHECK: <<CstM1:i\d+>> IntConstant -1 - /// CHECK: <<Not1:i\d+>> Xor [<<P1>>,<<CstM1>>] - /// CHECK: <<Not2:i\d+>> Xor [<<P2>>,<<CstM1>>] + /// CHECK: <<Not1:i\d+>> Not [<<P1>>] + /// CHECK: <<Not2:i\d+>> Not [<<P2>>] /// CHECK: <<Xor:i\d+>> Xor [<<Not1>>,<<Not2>>] /// CHECK: Return [<<Xor>>] @@ -285,11 +277,10 @@ public class Main { /// CHECK-START: int Main.$opt$noinline$notMultipleUses(int, int) instruction_simplifier (before) /// CHECK: <<P1:i\d+>> ParameterValue /// CHECK: <<P2:i\d+>> ParameterValue - /// CHECK: <<CstM1:i\d+>> IntConstant -1 /// CHECK: <<One:i\d+>> IntConstant 1 - /// CHECK: <<Not2:i\d+>> Xor [<<P2>>,<<CstM1>>] + /// CHECK: <<Not2:i\d+>> Not [<<P2>>] /// CHECK: <<And2:i\d+>> And [<<Not2>>,<<One>>] - /// CHECK: <<Not1:i\d+>> Xor [<<P1>>,<<CstM1>>] + /// CHECK: <<Not1:i\d+>> Not [<<P1>>] /// CHECK: <<And1:i\d+>> And [<<Not1>>,<<Not2>>] /// CHECK: <<Add:i\d+>> Add [<<And2>>,<<And1>>] /// CHECK: Return [<<Add>>] diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk index 7406aa33ed..19b535858f 100644 --- a/test/Android.run-test.mk +++ b/test/Android.run-test.mk @@ -223,9 +223,12 @@ ART_TEST_KNOWN_BROKEN += $(call all-run-test-names,$(TARGET_TYPES),$(RUN_TYPES), # Disable 097-duplicate-method while investigation (broken by latest Jack release, b/27358065) # Disable 137-cfi (b/27391690). +# Disable 536-checker-needs-access-check and 537-checker-inline-and-unverified (b/27425061) TEST_ART_BROKEN_ALL_TARGET_TESTS := \ 097-duplicate-method \ - 137-cfi + 137-cfi \ + 536-checker-needs-access-check \ + 537-checker-inline-and-unverified \ ART_TEST_KNOWN_BROKEN += $(call all-run-test-names,$(TARGET_TYPES),$(RUN_TYPES),$(PREBUILD_TYPES), \ $(COMPILER_TYPES), $(RELOCATE_TYPES),$(TRACE_TYPES),$(GC_TYPES),$(JNI_TYPES), \ diff --git a/test/run-test b/test/run-test index f1875d71a5..d0f93b9231 100755 --- a/test/run-test +++ b/test/run-test @@ -677,11 +677,7 @@ function arch_supports_read_barrier() { # Tests named '<number>-checker-*' will also have their CFGs verified with # Checker when compiled with Optimizing on host. if [[ "$TEST_NAME" =~ ^[0-9]+-checker- ]]; then - # Jack does not necessarily generate the same DEX output than dx. Because these tests depend - # on a particular DEX output, keep building them with dx for now (b/19467889). - USE_JACK="false" - - if [ "$runtime" = "art" -a "$image_suffix" = "-optimizing" ]; then + if [ "$runtime" = "art" -a "$image_suffix" = "-optimizing" -a "$USE_JACK" = "true" ]; then # Optimizing has read barrier support for certain architectures # only. On other architectures, compiling is disabled when read # barriers are enabled, meaning that we do not produce a CFG file |