Merge "test: Fix 4 checker tests to pass with javac/dx"
diff --git a/test/442-checker-constant-folding/build b/test/442-checker-constant-folding/build
new file mode 100755
index 0000000..49292c9
--- /dev/null
+++ b/test/442-checker-constant-folding/build
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright 2017 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.
+
+# This checker test is incompatible with jack bytecode output,
+# so force it to use javac/dx.
+export USE_JACK=false
+# Also disable desugar because it is missing in jack platform builds.
+export DESUGAR=false
+
+./default-build "$@"
diff --git a/test/442-checker-constant-folding/src/Main.java b/test/442-checker-constant-folding/src/Main.java
index 64180d5..eba5137 100644
--- a/test/442-checker-constant-folding/src/Main.java
+++ b/test/442-checker-constant-folding/src/Main.java
@@ -27,12 +27,6 @@
}
}
- public static void assertTrue(boolean condition) {
- if (!condition) {
- throw new Error();
- }
- }
-
public static void assertIntEquals(int expected, int result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
@@ -57,21 +51,6 @@
}
}
- 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.
@@ -215,119 +194,121 @@
return y;
}
+
/**
* Exercise constant folding on addition.
*/
- /// CHECK-START: int Main.IntAddition1() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.IntAddition1() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.IntAddition1() constant_folding (after)
/// CHECK-DAG: <<Const3:i\d+>> IntConstant 3
/// CHECK-DAG: Return [<<Const3>>]
- /// CHECK-START: int Main.IntAddition1() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.IntAddition1() constant_folding (after)
/// CHECK-NOT: Add
public static int IntAddition1() {
int a, b, c;
- a = $inline$int(1);
- b = $inline$int(2);
+ a = 1;
+ b = 2;
c = a + b;
return c;
}
- /// CHECK-START: int Main.IntAddition2() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.IntAddition2() constant_folding (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: <<Add2:i\d+>> Add [<<Const5>>,<<Const6>>]
- /// CHECK-DAG: <<Add3:i\d+>> Add [<<Add1>>,<<Add2>>]
+ /// CHECK-DAG: Add [<<Const5>>,<<Const6>>]
+ /// CHECK-DAG: <<Add3:i\d+>> Add [<<Add1>>,<<Const11>>]
/// CHECK-DAG: Return [<<Add3>>]
- /// CHECK-START: int Main.IntAddition2() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.IntAddition2() constant_folding (after)
/// CHECK-DAG: <<Const14:i\d+>> IntConstant 14
/// CHECK-DAG: Return [<<Const14>>]
- /// CHECK-START: int Main.IntAddition2() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.IntAddition2() constant_folding (after)
/// CHECK-NOT: Add
public static int IntAddition2() {
int a, b, c;
- a = $inline$int(1);
- b = $inline$int(2);
+ a = 1;
+ b = 2;
a += b;
- b = $inline$int(5);
- c = $inline$int(6);
+ b = 5;
+ c = 6;
b += c;
c = a + b;
return c;
}
- /// CHECK-START: long Main.LongAddition() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.LongAddition() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.LongAddition() constant_folding (after)
/// CHECK-DAG: <<Const3:j\d+>> LongConstant 3
/// CHECK-DAG: Return [<<Const3>>]
- /// CHECK-START: long Main.LongAddition() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.LongAddition() constant_folding (after)
/// CHECK-NOT: Add
public static long LongAddition() {
long a, b, c;
- a = $inline$long(1L);
- b = $inline$long(2L);
+ a = 1L;
+ b = 2L;
c = a + b;
return c;
}
- /// CHECK-START: float Main.FloatAddition() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.FloatAddition() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.FloatAddition() constant_folding (after)
/// CHECK-DAG: <<Const3:f\d+>> FloatConstant 3
/// CHECK-DAG: Return [<<Const3>>]
- /// CHECK-START: float Main.FloatAddition() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.FloatAddition() constant_folding (after)
/// CHECK-NOT: Add
public static float FloatAddition() {
float a, b, c;
- a = $inline$float(1F);
- b = $inline$float(2F);
+ a = 1F;
+ b = 2F;
c = a + b;
return c;
}
- /// CHECK-START: double Main.DoubleAddition() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.DoubleAddition() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.DoubleAddition() constant_folding (after)
/// CHECK-DAG: <<Const3:d\d+>> DoubleConstant 3
/// CHECK-DAG: Return [<<Const3>>]
- /// CHECK-START: double Main.DoubleAddition() constant_folding$after_inlining (after)
+ /// CHECK-START: double Main.DoubleAddition() constant_folding (after)
/// CHECK-NOT: Add
public static double DoubleAddition() {
double a, b, c;
- a = $inline$double(1D);
- b = $inline$double(2D);
+ a = 1D;
+ b = 2D;
c = a + b;
return c;
}
@@ -337,86 +318,86 @@
* Exercise constant folding on subtraction.
*/
- /// CHECK-START: int Main.IntSubtraction() constant_folding$after_inlining (before)
+ /// 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_inlining (after)
+ /// 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_inlining (after)
+ /// CHECK-START: int Main.IntSubtraction() constant_folding (after)
/// CHECK-NOT: Sub
public static int IntSubtraction() {
int a, b, c;
- a = $inline$int(6);
- b = $inline$int(2);
+ a = 6;
+ b = 2;
c = a - b;
return c;
}
- /// CHECK-START: long Main.LongSubtraction() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.LongSubtraction() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.LongSubtraction() constant_folding (after)
/// CHECK-DAG: <<Const4:j\d+>> LongConstant 4
/// CHECK-DAG: Return [<<Const4>>]
- /// CHECK-START: long Main.LongSubtraction() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.LongSubtraction() constant_folding (after)
/// CHECK-NOT: Sub
public static long LongSubtraction() {
long a, b, c;
- a = $inline$long(6L);
- b = $inline$long(2L);
+ a = 6L;
+ b = 2L;
c = a - b;
return c;
}
- /// CHECK-START: float Main.FloatSubtraction() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.FloatSubtraction() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.FloatSubtraction() constant_folding (after)
/// CHECK-DAG: <<Const4:f\d+>> FloatConstant 4
/// CHECK-DAG: Return [<<Const4>>]
- /// CHECK-START: float Main.FloatSubtraction() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.FloatSubtraction() constant_folding (after)
/// CHECK-NOT: Sub
public static float FloatSubtraction() {
float a, b, c;
- a = $inline$float(6F);
- b = $inline$float(2F);
+ a = 6F;
+ b = 2F;
c = a - b;
return c;
}
- /// CHECK-START: double Main.DoubleSubtraction() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.DoubleSubtraction() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.DoubleSubtraction() constant_folding (after)
/// CHECK-DAG: <<Const4:d\d+>> DoubleConstant 4
/// CHECK-DAG: Return [<<Const4>>]
- /// CHECK-START: double Main.DoubleSubtraction() constant_folding$after_inlining (after)
+ /// CHECK-START: double Main.DoubleSubtraction() constant_folding (after)
/// CHECK-NOT: Sub
public static double DoubleSubtraction() {
double a, b, c;
- a = $inline$double(6D);
- b = $inline$double(2D);
+ a = 6D;
+ b = 2D;
c = a - b;
return c;
}
@@ -426,86 +407,86 @@
* Exercise constant folding on multiplication.
*/
- /// CHECK-START: int Main.IntMultiplication() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.IntMultiplication() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.IntMultiplication() constant_folding (after)
/// CHECK-DAG: <<Const21:i\d+>> IntConstant 21
/// CHECK-DAG: Return [<<Const21>>]
- /// CHECK-START: int Main.IntMultiplication() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.IntMultiplication() constant_folding (after)
/// CHECK-NOT: Mul
public static int IntMultiplication() {
int a, b, c;
- a = $inline$int(7);
- b = $inline$int(3);
+ a = 7;
+ b = 3;
c = a * b;
return c;
}
- /// CHECK-START: long Main.LongMultiplication() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.LongMultiplication() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.LongMultiplication() constant_folding (after)
/// CHECK-DAG: <<Const21:j\d+>> LongConstant 21
/// CHECK-DAG: Return [<<Const21>>]
- /// CHECK-START: long Main.LongMultiplication() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.LongMultiplication() constant_folding (after)
/// CHECK-NOT: Mul
public static long LongMultiplication() {
long a, b, c;
- a = $inline$long(7L);
- b = $inline$long(3L);
+ a = 7L;
+ b = 3L;
c = a * b;
return c;
}
- /// CHECK-START: float Main.FloatMultiplication() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.FloatMultiplication() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.FloatMultiplication() constant_folding (after)
/// CHECK-DAG: <<Const21:f\d+>> FloatConstant 21
/// CHECK-DAG: Return [<<Const21>>]
- /// CHECK-START: float Main.FloatMultiplication() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.FloatMultiplication() constant_folding (after)
/// CHECK-NOT: Mul
public static float FloatMultiplication() {
float a, b, c;
- a = $inline$float(7F);
- b = $inline$float(3F);
+ a = 7F;
+ b = 3F;
c = a * b;
return c;
}
- /// CHECK-START: double Main.DoubleMultiplication() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.DoubleMultiplication() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.DoubleMultiplication() constant_folding (after)
/// CHECK-DAG: <<Const21:d\d+>> DoubleConstant 21
/// CHECK-DAG: Return [<<Const21>>]
- /// CHECK-START: double Main.DoubleMultiplication() constant_folding$after_inlining (after)
+ /// CHECK-START: double Main.DoubleMultiplication() constant_folding (after)
/// CHECK-NOT: Mul
public static double DoubleMultiplication() {
double a, b, c;
- a = $inline$double(7D);
- b = $inline$double(3D);
+ a = 7D;
+ b = 3D;
c = a * b;
return c;
}
@@ -515,90 +496,90 @@
* Exercise constant folding on division.
*/
- /// CHECK-START: int Main.IntDivision() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.IntDivision() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.IntDivision() constant_folding (after)
/// CHECK-DAG: <<Const2:i\d+>> IntConstant 2
/// CHECK-DAG: Return [<<Const2>>]
- /// CHECK-START: int Main.IntDivision() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.IntDivision() constant_folding (after)
/// CHECK-NOT: DivZeroCheck
/// CHECK-NOT: Div
public static int IntDivision() {
int a, b, c;
- a = $inline$int(8);
- b = $inline$int(3);
+ a = 8;
+ b = 3;
c = a / b;
return c;
}
- /// CHECK-START: long Main.LongDivision() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.LongDivision() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.LongDivision() constant_folding (after)
/// CHECK-DAG: <<Const2:j\d+>> LongConstant 2
/// CHECK-DAG: Return [<<Const2>>]
- /// CHECK-START: long Main.LongDivision() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.LongDivision() constant_folding (after)
/// CHECK-NOT: DivZeroCheck
/// CHECK-NOT: Div
public static long LongDivision() {
long a, b, c;
- a = $inline$long(8L);
- b = $inline$long(3L);
+ a = 8L;
+ b = 3L;
c = a / b;
return c;
}
- /// CHECK-START: float Main.FloatDivision() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.FloatDivision() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.FloatDivision() constant_folding (after)
/// CHECK-DAG: <<Const3P2:f\d+>> FloatConstant 3.2
/// CHECK-DAG: Return [<<Const3P2>>]
- /// CHECK-START: float Main.FloatDivision() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.FloatDivision() constant_folding (after)
/// CHECK-NOT: Div
public static float FloatDivision() {
float a, b, c;
- a = $inline$float(8F);
- b = $inline$float(2.5F);
+ a = 8F;
+ b = 2.5F;
c = a / b;
return c;
}
- /// CHECK-START: double Main.DoubleDivision() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.DoubleDivision() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.DoubleDivision() constant_folding (after)
/// CHECK-DAG: <<Const3P2:d\d+>> DoubleConstant 3.2
/// CHECK-DAG: Return [<<Const3P2>>]
- /// CHECK-START: double Main.DoubleDivision() constant_folding$after_inlining (after)
+ /// CHECK-START: double Main.DoubleDivision() constant_folding (after)
/// CHECK-NOT: Div
public static double DoubleDivision() {
double a, b, c;
- a = $inline$double(8D);
- b = $inline$double(2.5D);
+ a = 8D;
+ b = 2.5D;
c = a / b;
return c;
}
@@ -608,90 +589,90 @@
* Exercise constant folding on remainder.
*/
- /// CHECK-START: int Main.IntRemainder() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.IntRemainder() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.IntRemainder() constant_folding (after)
/// CHECK-DAG: <<Const2:i\d+>> IntConstant 2
/// CHECK-DAG: Return [<<Const2>>]
- /// CHECK-START: int Main.IntRemainder() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.IntRemainder() constant_folding (after)
/// CHECK-NOT: DivZeroCheck
/// CHECK-NOT: Rem
public static int IntRemainder() {
int a, b, c;
- a = $inline$int(8);
- b = $inline$int(3);
+ a = 8;
+ b = 3;
c = a % b;
return c;
}
- /// CHECK-START: long Main.LongRemainder() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.LongRemainder() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.LongRemainder() constant_folding (after)
/// CHECK-DAG: <<Const2:j\d+>> LongConstant 2
/// CHECK-DAG: Return [<<Const2>>]
- /// CHECK-START: long Main.LongRemainder() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.LongRemainder() constant_folding (after)
/// CHECK-NOT: DivZeroCheck
/// CHECK-NOT: Rem
public static long LongRemainder() {
long a, b, c;
- a = $inline$long(8L);
- b = $inline$long(3L);
+ a = 8L;
+ b = 3L;
c = a % b;
return c;
}
- /// CHECK-START: float Main.FloatRemainder() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.FloatRemainder() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.FloatRemainder() constant_folding (after)
/// CHECK-DAG: <<Const0P5:f\d+>> FloatConstant 0.5
/// CHECK-DAG: Return [<<Const0P5>>]
- /// CHECK-START: float Main.FloatRemainder() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.FloatRemainder() constant_folding (after)
/// CHECK-NOT: Rem
public static float FloatRemainder() {
float a, b, c;
- a = $inline$float(8F);
- b = $inline$float(2.5F);
+ a = 8F;
+ b = 2.5F;
c = a % b;
return c;
}
- /// CHECK-START: double Main.DoubleRemainder() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.DoubleRemainder() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.DoubleRemainder() constant_folding (after)
/// CHECK-DAG: <<Const0P5:d\d+>> DoubleConstant 0.5
/// CHECK-DAG: Return [<<Const0P5>>]
- /// CHECK-START: double Main.DoubleRemainder() constant_folding$after_inlining (after)
+ /// CHECK-START: double Main.DoubleRemainder() constant_folding (after)
/// CHECK-NOT: Rem
public static double DoubleRemainder() {
double a, b, c;
- a = $inline$double(8D);
- b = $inline$double(2.5D);
+ a = 8D;
+ b = 2.5D;
c = a % b;
return c;
}
@@ -701,42 +682,42 @@
* Exercise constant folding on left shift.
*/
- /// CHECK-START: int Main.ShlIntLong() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.ShlIntLong() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.ShlIntLong() constant_folding (after)
/// CHECK-DAG: <<Const4:i\d+>> IntConstant 4
/// CHECK-DAG: Return [<<Const4>>]
- /// CHECK-START: int Main.ShlIntLong() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.ShlIntLong() constant_folding (after)
/// CHECK-NOT: Shl
public static int ShlIntLong() {
- int lhs = $inline$int(1);
- long rhs = $inline$long(2L);
+ int lhs = 1;
+ long rhs = 2;
return lhs << rhs;
}
- /// CHECK-START: long Main.ShlLongInt() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.ShlLongInt() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.ShlLongInt() constant_folding (after)
/// CHECK-DAG: <<Const12L:j\d+>> LongConstant 12
/// CHECK-DAG: Return [<<Const12L>>]
- /// CHECK-START: long Main.ShlLongInt() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.ShlLongInt() constant_folding (after)
/// CHECK-NOT: Shl
public static long ShlLongInt() {
- long lhs = $inline$long(3L);
- int rhs = $inline$int(2);
+ long lhs = 3;
+ int rhs = 2;
return lhs << rhs;
}
@@ -745,42 +726,42 @@
* Exercise constant folding on right shift.
*/
- /// CHECK-START: int Main.ShrIntLong() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.ShrIntLong() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.ShrIntLong() constant_folding (after)
/// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
/// CHECK-DAG: Return [<<Const1>>]
- /// CHECK-START: int Main.ShrIntLong() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.ShrIntLong() constant_folding (after)
/// CHECK-NOT: Shr
public static int ShrIntLong() {
- int lhs = $inline$int(7);
- long rhs = $inline$long(2L);
+ int lhs = 7;
+ long rhs = 2;
return lhs >> rhs;
}
- /// CHECK-START: long Main.ShrLongInt() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.ShrLongInt() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.ShrLongInt() constant_folding (after)
/// CHECK-DAG: <<Const2L:j\d+>> LongConstant 2
/// CHECK-DAG: Return [<<Const2L>>]
- /// CHECK-START: long Main.ShrLongInt() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.ShrLongInt() constant_folding (after)
/// CHECK-NOT: Shr
public static long ShrLongInt() {
- long lhs = $inline$long(9);
- int rhs = $inline$int(2);
+ long lhs = 9;
+ int rhs = 2;
return lhs >> rhs;
}
@@ -789,42 +770,42 @@
* Exercise constant folding on unsigned right shift.
*/
- /// CHECK-START: int Main.UShrIntLong() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.UShrIntLong() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.UShrIntLong() constant_folding (after)
/// CHECK-DAG: <<ConstRes:i\d+>> IntConstant 1073741822
/// CHECK-DAG: Return [<<ConstRes>>]
- /// CHECK-START: int Main.UShrIntLong() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.UShrIntLong() constant_folding (after)
/// CHECK-NOT: UShr
public static int UShrIntLong() {
- int lhs = $inline$int(-7);
- long rhs = $inline$long(2L);
+ int lhs = -7;
+ long rhs = 2;
return lhs >>> rhs;
}
- /// CHECK-START: long Main.UShrLongInt() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.UShrLongInt() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.UShrLongInt() constant_folding (after)
/// CHECK-DAG: <<ConstRes:j\d+>> LongConstant 4611686018427387901
/// CHECK-DAG: Return [<<ConstRes>>]
- /// CHECK-START: long Main.UShrLongInt() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.UShrLongInt() constant_folding (after)
/// CHECK-NOT: UShr
public static long UShrLongInt() {
- long lhs = $inline$long(-9);
- int rhs = $inline$int(2);
+ long lhs = -9;
+ int rhs = 2;
return lhs >>> rhs;
}
@@ -833,43 +814,43 @@
* Exercise constant folding on logical and.
*/
- /// CHECK-START: long Main.AndIntLong() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.AndIntLong() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.AndIntLong() constant_folding (after)
/// CHECK-DAG: <<Const2:j\d+>> LongConstant 2
/// CHECK-DAG: Return [<<Const2>>]
- /// CHECK-START: long Main.AndIntLong() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.AndIntLong() constant_folding (after)
/// CHECK-NOT: And
public static long AndIntLong() {
- int lhs = $inline$int(10);
- long rhs = $inline$long(3L);
+ int lhs = 10;
+ long rhs = 3;
return lhs & rhs;
}
- /// CHECK-START: long Main.AndLongInt() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.AndLongInt() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.AndLongInt() constant_folding (after)
/// CHECK-DAG: <<Const2:j\d+>> LongConstant 2
/// CHECK-DAG: Return [<<Const2>>]
- /// CHECK-START: long Main.AndLongInt() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.AndLongInt() constant_folding (after)
/// CHECK-NOT: And
public static long AndLongInt() {
- long lhs = $inline$long(10L);
- int rhs = $inline$int(3);
+ long lhs = 10;
+ int rhs = 3;
return lhs & rhs;
}
@@ -878,43 +859,43 @@
* Exercise constant folding on logical or.
*/
- /// CHECK-START: long Main.OrIntLong() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.OrIntLong() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.OrIntLong() constant_folding (after)
/// CHECK-DAG: <<Const11:j\d+>> LongConstant 11
/// CHECK-DAG: Return [<<Const11>>]
- /// CHECK-START: long Main.OrIntLong() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.OrIntLong() constant_folding (after)
/// CHECK-NOT: Or
public static long OrIntLong() {
- int lhs = $inline$int(10);
- long rhs = $inline$long(3L);
+ int lhs = 10;
+ long rhs = 3;
return lhs | rhs;
}
- /// CHECK-START: long Main.OrLongInt() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.OrLongInt() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.OrLongInt() constant_folding (after)
/// CHECK-DAG: <<Const11:j\d+>> LongConstant 11
/// CHECK-DAG: Return [<<Const11>>]
- /// CHECK-START: long Main.OrLongInt() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.OrLongInt() constant_folding (after)
/// CHECK-NOT: Or
public static long OrLongInt() {
- long lhs = $inline$long(10L);
- int rhs = $inline$int(3);
+ long lhs = 10;
+ int rhs = 3;
return lhs | rhs;
}
@@ -923,43 +904,43 @@
* Exercise constant folding on logical exclusive or.
*/
- /// CHECK-START: long Main.XorIntLong() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.XorIntLong() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.XorIntLong() constant_folding (after)
/// CHECK-DAG: <<Const9:j\d+>> LongConstant 9
/// CHECK-DAG: Return [<<Const9>>]
- /// CHECK-START: long Main.XorIntLong() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.XorIntLong() constant_folding (after)
/// CHECK-NOT: Xor
public static long XorIntLong() {
- int lhs = $inline$int(10);
- long rhs = $inline$long(3L);
+ int lhs = 10;
+ long rhs = 3;
return lhs ^ rhs;
}
- /// CHECK-START: long Main.XorLongInt() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.XorLongInt() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.XorLongInt() constant_folding (after)
/// CHECK-DAG: <<Const9:j\d+>> LongConstant 9
/// CHECK-DAG: Return [<<Const9>>]
- /// CHECK-START: long Main.XorLongInt() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.XorLongInt() constant_folding (after)
/// CHECK-NOT: Xor
public static long XorLongInt() {
- long lhs = $inline$long(10L);
- int rhs = $inline$int(3);
+ long lhs = 10;
+ int rhs = 3;
return lhs ^ rhs;
}
@@ -968,23 +949,23 @@
* Exercise constant folding on constant (static) condition.
*/
- /// CHECK-START: int Main.StaticCondition() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.StaticCondition() constant_folding (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: Select [{{i\d+}},{{i\d+}},<<Cond>>]
+ /// CHECK-DAG: If [<<Cond>>]
- /// CHECK-START: int Main.StaticCondition() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.StaticCondition() constant_folding (after)
/// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
- /// CHECK-DAG: Select [{{i\d+}},{{i\d+}},<<Const1>>]
+ /// CHECK-DAG: If [<<Const1>>]
- /// CHECK-START: int Main.StaticCondition() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.StaticCondition() constant_folding (after)
/// CHECK-NOT: GreaterThanOrEqual
public static int StaticCondition() {
int a, b, c;
- a = $inline$int(7);
- b = $inline$int(2);
+ a = 7;
+ b = 2;
if (a < b)
c = a + b;
else
@@ -1029,30 +1010,28 @@
* (forward) post-order traversal of the the dominator tree.
*/
- /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding$after_inlining (before)
- /// CHECK-DAG: <<Cond:z\d+>> ParameterValue
+ /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (before)
/// 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+>> Select [<<Sub>>,<<Add>>,<<Cond>>]
+ /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>]
/// CHECK-DAG: Return [<<Phi>>]
- /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding$after_inlining (after)
- /// CHECK-DAG: <<Cond:z\d+>> ParameterValue
+ /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding (after)
/// CHECK-DAG: <<Const3:i\d+>> IntConstant 3
/// CHECK-DAG: <<Const7:i\d+>> IntConstant 7
- /// CHECK-DAG: <<Phi:i\d+>> Select [<<Const3>>,<<Const7>>,<<Cond>>]
+ /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Const7>>,<<Const3>>]
/// CHECK-DAG: Return [<<Phi>>]
- /// CHECK-START: int Main.JumpsAndConditionals(boolean) constant_folding$after_inlining (after)
+ /// 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 = $inline$int(5);
- b = $inline$int(2);
+ a = 5;
+ b = 2;
if (cond)
c = a + b;
else
@@ -1328,259 +1307,207 @@
/**
- * Test optimizations of comparisons with null yielding a constant result.
- */
-
- /// CHECK-START: boolean Main.ConstStringEqualsNull() constant_folding$after_inlining (before)
- /// CHECK-DAG: <<ConstStr:l\d+>> LoadString
- /// CHECK-DAG: <<Null:l\d+>> NullConstant
- /// CHECK-DAG: <<Eq:z\d+>> Equal [<<ConstStr>>,<<Null>>]
- /// CHECK-DAG: If [<<Eq>>]
-
- /// CHECK-START: boolean Main.ConstStringEqualsNull() constant_folding$after_inlining (after)
- /// CHECK-DAG: <<False:i\d+>> IntConstant 0
- /// CHECK-DAG: If [<<False>>]
-
- /// CHECK-START: boolean Main.ConstStringEqualsNull() constant_folding$after_inlining (after)
- /// CHECK-NOT: Equal
-
- public static boolean ConstStringEqualsNull() {
- // Due to Jack emitting code using the opposite condition, use != to generate Equal.
- if ($inline$ConstString() != null) {
- return false;
- } else {
- return true;
- }
- }
-
- /// CHECK-START: boolean Main.ConstStringNotEqualsNull() constant_folding$after_inlining (before)
- /// CHECK-DAG: <<ConstStr:l\d+>> LoadString
- /// CHECK-DAG: <<Null:l\d+>> NullConstant
- /// CHECK-DAG: <<Ne:z\d+>> NotEqual [<<ConstStr>>,<<Null>>]
- /// CHECK-DAG: If [<<Ne>>]
-
- /// CHECK-START: boolean Main.ConstStringNotEqualsNull() constant_folding$after_inlining (after)
- /// CHECK-DAG: <<True:i\d+>> IntConstant 1
- /// CHECK-DAG: If [<<True>>]
-
- /// CHECK-START: boolean Main.ConstStringNotEqualsNull() constant_folding$after_inlining (after)
- /// CHECK-NOT: NotEqual
-
- public static boolean ConstStringNotEqualsNull() {
- // Due to Jack emitting code using the opposite condition, use == to generate NotEqual.
- if ($inline$ConstString() == null) {
- return false;
- } else {
- return true;
- }
- }
-
- public static String $inline$ConstString() {
- return "";
- }
-
- /**
* Exercise constant folding on type conversions.
*/
- /// CHECK-START: int Main.ReturnInt33() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.ReturnInt33() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.ReturnInt33() constant_folding (after)
/// CHECK-DAG: <<Const33:i\d+>> IntConstant 33
/// CHECK-DAG: Return [<<Const33>>]
- /// CHECK-START: int Main.ReturnInt33() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.ReturnInt33() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static int ReturnInt33() {
- long imm = $inline$long(33L);
+ long imm = 33L;
return (int) imm;
}
- /// CHECK-START: int Main.ReturnIntMax() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.ReturnIntMax() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.ReturnIntMax() constant_folding (after)
/// CHECK-DAG: <<ConstMax:i\d+>> IntConstant 2147483647
/// CHECK-DAG: Return [<<ConstMax>>]
- /// CHECK-START: int Main.ReturnIntMax() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.ReturnIntMax() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static int ReturnIntMax() {
- float imm = $inline$float(1.0e34f);
+ float imm = 1.0e34f;
return (int) imm;
}
- /// CHECK-START: int Main.ReturnInt0() constant_folding$after_inlining (before)
+ /// CHECK-START: int Main.ReturnInt0() constant_folding (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_inlining (after)
+ /// CHECK-START: int Main.ReturnInt0() constant_folding (after)
/// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
/// CHECK-DAG: Return [<<Const0>>]
- /// CHECK-START: int Main.ReturnInt0() constant_folding$after_inlining (after)
+ /// CHECK-START: int Main.ReturnInt0() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static int ReturnInt0() {
- double imm = $inline$double(Double.NaN);
+ double imm = Double.NaN;
return (int) imm;
}
- /// CHECK-START: long Main.ReturnLong33() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.ReturnLong33() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.ReturnLong33() constant_folding (after)
/// CHECK-DAG: <<Const33:j\d+>> LongConstant 33
/// CHECK-DAG: Return [<<Const33>>]
- /// CHECK-START: long Main.ReturnLong33() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.ReturnLong33() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static long ReturnLong33() {
- int imm = $inline$int(33);
+ int imm = 33;
return (long) imm;
}
- /// CHECK-START: long Main.ReturnLong34() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.ReturnLong34() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.ReturnLong34() constant_folding (after)
/// CHECK-DAG: <<Const34:j\d+>> LongConstant 34
/// CHECK-DAG: Return [<<Const34>>]
- /// CHECK-START: long Main.ReturnLong34() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.ReturnLong34() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static long ReturnLong34() {
- float imm = $inline$float(34.0f);
+ float imm = 34.0f;
return (long) imm;
}
- /// CHECK-START: long Main.ReturnLong0() constant_folding$after_inlining (before)
+ /// CHECK-START: long Main.ReturnLong0() constant_folding (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_inlining (after)
+ /// CHECK-START: long Main.ReturnLong0() constant_folding (after)
/// CHECK-DAG: <<Const0:j\d+>> LongConstant 0
/// CHECK-DAG: Return [<<Const0>>]
- /// CHECK-START: long Main.ReturnLong0() constant_folding$after_inlining (after)
+ /// CHECK-START: long Main.ReturnLong0() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static long ReturnLong0() {
- double imm = $inline$double(-Double.NaN);
+ double imm = -Double.NaN;
return (long) imm;
}
- /// CHECK-START: float Main.ReturnFloat33() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.ReturnFloat33() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.ReturnFloat33() constant_folding (after)
/// CHECK-DAG: <<Const33:f\d+>> FloatConstant 33
/// CHECK-DAG: Return [<<Const33>>]
- /// CHECK-START: float Main.ReturnFloat33() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.ReturnFloat33() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static float ReturnFloat33() {
- int imm = $inline$int(33);
+ int imm = 33;
return (float) imm;
}
- /// CHECK-START: float Main.ReturnFloat34() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.ReturnFloat34() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.ReturnFloat34() constant_folding (after)
/// CHECK-DAG: <<Const34:f\d+>> FloatConstant 34
/// CHECK-DAG: Return [<<Const34>>]
- /// CHECK-START: float Main.ReturnFloat34() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.ReturnFloat34() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static float ReturnFloat34() {
- long imm = $inline$long(34L);
+ long imm = 34L;
return (float) imm;
}
- /// CHECK-START: float Main.ReturnFloat99P25() constant_folding$after_inlining (before)
+ /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (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_inlining (after)
+ /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after)
/// CHECK-DAG: <<Const:f\d+>> FloatConstant 99.25
/// CHECK-DAG: Return [<<Const>>]
- /// CHECK-START: float Main.ReturnFloat99P25() constant_folding$after_inlining (after)
+ /// CHECK-START: float Main.ReturnFloat99P25() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static float ReturnFloat99P25() {
- double imm = $inline$double(99.25);
+ double imm = 99.25;
return (float) imm;
}
- /// CHECK-START: double Main.ReturnDouble33() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.ReturnDouble33() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.ReturnDouble33() constant_folding (after)
/// CHECK-DAG: <<Const33:d\d+>> DoubleConstant 33
/// CHECK-DAG: Return [<<Const33>>]
public static double ReturnDouble33() {
- int imm = $inline$int(33);
+ int imm = 33;
return (double) imm;
}
- /// CHECK-START: double Main.ReturnDouble34() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.ReturnDouble34() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.ReturnDouble34() constant_folding (after)
/// CHECK-DAG: <<Const34:d\d+>> DoubleConstant 34
/// CHECK-DAG: Return [<<Const34>>]
- /// CHECK-START: double Main.ReturnDouble34() constant_folding$after_inlining (after)
+ /// CHECK-START: double Main.ReturnDouble34() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static double ReturnDouble34() {
- long imm = $inline$long(34L);
+ long imm = 34L;
return (double) imm;
}
- /// CHECK-START: double Main.ReturnDouble99P25() constant_folding$after_inlining (before)
+ /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (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_inlining (after)
+ /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after)
/// CHECK-DAG: <<Const:d\d+>> DoubleConstant 99.25
/// CHECK-DAG: Return [<<Const>>]
- /// CHECK-START: double Main.ReturnDouble99P25() constant_folding$after_inlining (after)
+ /// CHECK-START: double Main.ReturnDouble99P25() constant_folding (after)
/// CHECK-NOT: TypeConversion
public static double ReturnDouble99P25() {
- float imm = $inline$float(99.25f);
+ float imm = 99.25f;
return (double) imm;
}
@@ -1659,9 +1586,6 @@
assertFalse(CmpFloatGreaterThanNaN(arbitrary));
assertFalse(CmpDoubleLessThanNaN(arbitrary));
- assertFalse(ConstStringEqualsNull());
- assertTrue(ConstStringNotEqualsNull());
-
Main main = new Main();
assertIntEquals(1, main.smaliCmpLongConstants());
assertIntEquals(-1, main.smaliCmpGtFloatConstants());
diff --git a/test/450-checker-types/build b/test/450-checker-types/build
new file mode 100755
index 0000000..49292c9
--- /dev/null
+++ b/test/450-checker-types/build
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright 2017 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.
+
+# This checker test is incompatible with jack bytecode output,
+# so force it to use javac/dx.
+export USE_JACK=false
+# Also disable desugar because it is missing in jack platform builds.
+export DESUGAR=false
+
+./default-build "$@"
diff --git a/test/450-checker-types/smali/SmaliTests.smali b/test/450-checker-types/smali/SmaliTests.smali
deleted file mode 100644
index 6a3122e..0000000
--- a/test/450-checker-types/smali/SmaliTests.smali
+++ /dev/null
@@ -1,120 +0,0 @@
-# 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 ea8609e..ae0fdbe 100644
--- a/test/450-checker-types/src/Main.java
+++ b/test/450-checker-types/src/Main.java
@@ -210,6 +210,58 @@
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>>]
@@ -634,7 +686,7 @@
/// CHECK-DAG: <<Null:l\d+>> NullConstant
/// CHECK-DAG: <<Phi:l\d+>> Phi [<<Arg>>,<<Null>>] klass:SubclassA
/// CHECK-DAG: <<NCPhi:l\d+>> NullCheck [<<Phi>>]
- /// CHECK-DAG: InvokeVirtual [<<NCPhi>>] method_name:Super.hashCode
+ /// CHECK-DAG: InvokeVirtual [<<NCPhi>>] method_name:java.lang.Object.hashCode
public void testThisArgumentMoreSpecific(boolean cond) {
// Inlining method from Super will build it with `this` typed as Super.
@@ -655,7 +707,7 @@
/// CHECK-START: void Main.testExplicitArgumentMoreSpecific(SubclassA) inliner (after)
/// CHECK-DAG: <<Arg:l\d+>> ParameterValue klass:SubclassA
/// CHECK-DAG: <<NCArg:l\d+>> NullCheck [<<Arg>>] klass:SubclassA
- /// CHECK-DAG: InvokeVirtual [<<NCArg>>] method_name:Super.hashCode
+ /// CHECK-DAG: InvokeVirtual [<<NCArg>>] method_name:java.lang.Object.hashCode
public void testExplicitArgumentMoreSpecific(SubclassA obj) {
// Inlining a method will build it with reference types from its signature,
diff --git a/test/463-checker-boolean-simplifier/build b/test/463-checker-boolean-simplifier/build
new file mode 100755
index 0000000..49292c9
--- /dev/null
+++ b/test/463-checker-boolean-simplifier/build
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright 2017 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.
+
+# This checker test is incompatible with jack bytecode output,
+# so force it to use javac/dx.
+export USE_JACK=false
+# Also disable desugar because it is missing in jack platform builds.
+export DESUGAR=false
+
+./default-build "$@"
diff --git a/test/463-checker-boolean-simplifier/smali/BooleanNotDx.smali b/test/463-checker-boolean-simplifier/smali/BooleanNotDx.smali
deleted file mode 100644
index 765d0eb..0000000
--- a/test/463-checker-boolean-simplifier/smali/BooleanNotDx.smali
+++ /dev/null
@@ -1,65 +0,0 @@
-# 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 LBooleanNotSmali;
-.super Ljava/lang/Object;
-
-#
-# Elementary test negating a boolean. Verifies that blocks are merged and
-# empty branches removed.
-#
-
-## CHECK-START: boolean BooleanNotSmali.BooleanNot(boolean) select_generator (before)
-## CHECK-DAG: <<Param:z\d+>> ParameterValue
-## CHECK-DAG: <<Const0:i\d+>> IntConstant 0
-## CHECK-DAG: <<Const1:i\d+>> IntConstant 1
-## CHECK-DAG: If [<<Param>>]
-## CHECK-DAG: <<Phi:i\d+>> Phi [<<Const0>>,<<Const1>>]
-## CHECK-DAG: Return [<<Phi>>]
-
-## CHECK-START: boolean BooleanNotSmali.BooleanNot(boolean) select_generator (before)
-## CHECK: Goto
-## CHECK: Goto
-## CHECK: Goto
-## CHECK-NOT: Goto
-
-## CHECK-START: boolean BooleanNotSmali.BooleanNot(boolean) select_generator (after)
-## CHECK-DAG: <<Param:z\d+>> ParameterValue
-## CHECK-DAG: <<Const0:i\d+>> IntConstant 0
-## CHECK-DAG: <<Const1:i\d+>> IntConstant 1
-## CHECK-DAG: <<NotParam:i\d+>> Select [<<Const1>>,<<Const0>>,<<Param>>]
-## CHECK-DAG: Return [<<NotParam>>]
-
-## CHECK-START: boolean BooleanNotSmali.BooleanNot(boolean) select_generator (after)
-## CHECK-NOT: If
-## CHECK-NOT: Phi
-
-## CHECK-START: boolean BooleanNotSmali.BooleanNot(boolean) select_generator (after)
-## CHECK: Goto
-## CHECK-NOT: Goto
-
-.method public static BooleanNot(Z)Z
- .registers 2
-
- if-eqz v1, :true_start
- const/4 v0, 0x0
-
-:return_start
- return v0
-
-:true_start
- const/4 v0, 0x1
- goto :return_start
-
-.end method
diff --git a/test/463-checker-boolean-simplifier/src/Main.java b/test/463-checker-boolean-simplifier/src/Main.java
index 9368488..d1d02cd 100644
--- a/test/463-checker-boolean-simplifier/src/Main.java
+++ b/test/463-checker-boolean-simplifier/src/Main.java
@@ -32,14 +32,42 @@
}
}
- // Invoke a method written in smali that implements the boolean ! operator. This method
- // uses the if/else pattern generated by dx (while Jack generates a different pattern).
- // Since this method is in a smali-generated class, we invoke it through reflection.
- public static boolean SmaliBooleanNot(boolean x) throws Exception {
- Class<?> c = Class.forName("BooleanNotSmali");
- java.lang.reflect.Method method = c.getMethod("BooleanNot", boolean.class);
- Object retValue = method.invoke(null, new Object[] { Boolean.valueOf(x) });
- return ((Boolean) retValue).booleanValue();
+ /*
+ * Elementary test negating a boolean. Verifies that blocks are merged and
+ * empty branches removed.
+ */
+
+ /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (before)
+ /// CHECK-DAG: <<Param:z\d+>> ParameterValue
+ /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
+ /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
+ /// CHECK-DAG: If [<<Param>>]
+ /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Const1>>,<<Const0>>]
+ /// CHECK-DAG: Return [<<Phi>>]
+
+ /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (before)
+ /// CHECK: Goto
+ /// CHECK: Goto
+ /// CHECK: Goto
+ /// CHECK-NOT: Goto
+
+ /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (after)
+ /// CHECK-DAG: <<Param:z\d+>> ParameterValue
+ /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0
+ /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1
+ /// CHECK-DAG: <<NotParam:i\d+>> Select [<<Const1>>,<<Const0>>,<<Param>>]
+ /// CHECK-DAG: Return [<<NotParam>>]
+
+ /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (after)
+ /// CHECK-NOT: If
+ /// CHECK-NOT: Phi
+
+ /// CHECK-START: boolean Main.BooleanNot(boolean) select_generator (after)
+ /// CHECK: Goto
+ /// CHECK-NOT: Goto
+
+ public static boolean BooleanNot(boolean x) {
+ return !x;
}
/*
@@ -157,7 +185,11 @@
/// CHECK-NOT: BooleanNot
public static int NegatedCondition(boolean x) {
- return (x != false) ? 42 : 43;
+ if (x != false) {
+ return 42;
+ } else {
+ return 43;
+ }
}
/// CHECK-START: int Main.SimpleTrueBlock(boolean, int) select_generator (after)
@@ -221,7 +253,13 @@
/// CHECK-DAG: Return [<<Select123>>]
public static int ThreeBlocks(boolean x, boolean y) {
- return x ? 1 : (y ? 2 : 3);
+ if (x) {
+ return 1;
+ } else if (y) {
+ return 2;
+ } else {
+ return 3;
+ }
}
/// CHECK-START: int Main.MultiplePhis() select_generator (before)
@@ -254,10 +292,8 @@
while (y++ < 10) {
if (y > 1) {
x = 13;
- continue;
} else {
x = 42;
- continue;
}
}
return x;
@@ -330,8 +366,8 @@
}
public static void main(String[] args) throws Exception {
- assertBoolEquals(false, SmaliBooleanNot(true));
- assertBoolEquals(true, SmaliBooleanNot(false));
+ assertBoolEquals(false, BooleanNot(true));
+ assertBoolEquals(true, BooleanNot(false));
assertBoolEquals(true, GreaterThan(10, 5));
assertBoolEquals(false, GreaterThan(10, 10));
assertBoolEquals(false, GreaterThan(5, 10));
diff --git a/test/537-checker-inline-and-unverified/build b/test/537-checker-inline-and-unverified/build
new file mode 100755
index 0000000..49292c9
--- /dev/null
+++ b/test/537-checker-inline-and-unverified/build
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+# Copyright 2017 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.
+
+# This checker test is incompatible with jack bytecode output,
+# so force it to use javac/dx.
+export USE_JACK=false
+# Also disable desugar because it is missing in jack platform builds.
+export DESUGAR=false
+
+./default-build "$@"
diff --git a/test/537-checker-inline-and-unverified/src/Main.java b/test/537-checker-inline-and-unverified/src/Main.java
index b9d5fc9..bdc14b0 100644
--- a/test/537-checker-inline-and-unverified/src/Main.java
+++ b/test/537-checker-inline-and-unverified/src/Main.java
@@ -45,14 +45,12 @@
}
public static boolean $opt$noinline$testNoInline() {
- boolean result = true;
try {
- result = (null instanceof InaccessibleClass);
- throw new Error("Unreachable");
+ return null instanceof InaccessibleClass;
} catch (IllegalAccessError e) {
// expected
}
- return result;
+ return false;
}
public static boolean $opt$inline$testInline() {