Port two methods in checker-dead-blocks to Smali
Bug: 65168732
Test: art/test/run-test ... 480-checker-dead-blocks
Change-Id: I65feb5608b88e7a34c894a346356bf2dc5359ce1
diff --git a/test/480-checker-dead-blocks/smali/Smali.smali b/test/480-checker-dead-blocks/smali/Smali.smali
new file mode 100644
index 0000000..b93d5ac
--- /dev/null
+++ b/test/480-checker-dead-blocks/smali/Smali.smali
@@ -0,0 +1,122 @@
+# Copyright (C) 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.
+
+.class public LSmali;
+.super Ljava/lang/Object;
+
+## CHECK-START: int Smali.testTrueBranch(int, int) dead_code_elimination$after_inlining (before)
+## CHECK-DAG: <<ArgX:i\d+>> ParameterValue
+## CHECK-DAG: <<ArgY:i\d+>> ParameterValue
+## CHECK-DAG: If
+## CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>]
+## CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>]
+## CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>]
+## CHECK-DAG: Return [<<Phi>>]
+
+## CHECK-START: int Smali.testTrueBranch(int, int) dead_code_elimination$after_inlining (after)
+## CHECK-DAG: <<ArgX:i\d+>> ParameterValue
+## CHECK-DAG: <<ArgY:i\d+>> ParameterValue
+## CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>]
+## CHECK-DAG: Return [<<Add>>]
+
+## CHECK-START: int Smali.testTrueBranch(int, int) dead_code_elimination$after_inlining (after)
+## CHECK-NOT: If
+## CHECK-NOT: Sub
+## CHECK-NOT: Phi
+.method public static testTrueBranch(II)I
+ # int z;
+ # if (inlineTrue()) {
+ # z = x + y;
+ # } else {
+ # z = x - y;
+ # // Prevent HSelect simplification by having a branch with multiple instructions.
+ # System.nanoTime();
+ # }
+ #return z;
+
+ .registers 4
+ .param p0, "x" # I
+ .param p1, "y" # I
+
+ invoke-static {}, LMain;->inlineTrue()Z
+
+ move-result v1
+
+ if-eqz v1, :cond_9
+
+ add-int v0, p0, p1
+
+ :goto_8
+ return v0
+
+ :cond_9
+ sub-int v0, p0, p1
+
+ invoke-static {}, Ljava/lang/System;->nanoTime()J
+
+ goto :goto_8
+.end method
+
+## CHECK-START: int Smali.testFalseBranch(int, int) dead_code_elimination$after_inlining (before)
+## CHECK-DAG: <<ArgX:i\d+>> ParameterValue
+## CHECK-DAG: <<ArgY:i\d+>> ParameterValue
+## CHECK-DAG: If
+## CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>]
+## CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>]
+## CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>]
+## CHECK-DAG: Return [<<Phi>>]
+
+## CHECK-START: int Smali.testFalseBranch(int, int) dead_code_elimination$after_inlining (after)
+## CHECK-DAG: <<ArgX:i\d+>> ParameterValue
+## CHECK-DAG: <<ArgY:i\d+>> ParameterValue
+## CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>]
+## CHECK-DAG: Return [<<Sub>>]
+
+## CHECK-START: int Smali.testFalseBranch(int, int) dead_code_elimination$after_inlining (after)
+## CHECK-NOT: If
+## CHECK-NOT: Add
+## CHECK-NOT: Phi
+.method public static testFalseBranch(II)I
+ # int z;
+ # if (inlineFalse()) {
+ # z = x + y;
+ # } else {
+ # z = x - y;
+ # // Prevent HSelect simplification by having a branch with multiple instructions.
+ # System.nanoTime();
+ # }
+ # return z;
+
+ .registers 4
+ .param p0, "x" # I
+ .param p1, "y" # I
+
+ invoke-static {}, LMain;->inlineFalse()Z
+
+ move-result v1
+
+ if-eqz v1, :cond_9
+
+ add-int v0, p0, p1
+
+ :goto_8
+ return v0
+
+ :cond_9
+ sub-int v0, p0, p1
+
+ invoke-static {}, Ljava/lang/System;->nanoTime()J
+
+ goto :goto_8
+.end method
diff --git a/test/480-checker-dead-blocks/src/Main.java b/test/480-checker-dead-blocks/src/Main.java
index 0ca822f..485efd9 100644
--- a/test/480-checker-dead-blocks/src/Main.java
+++ b/test/480-checker-dead-blocks/src/Main.java
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import java.lang.reflect.Method;
public class Main {
@@ -30,68 +31,24 @@
return false;
}
- /// CHECK-START: int Main.testTrueBranch(int, int) dead_code_elimination$after_inlining (before)
- /// CHECK-DAG: <<ArgX:i\d+>> ParameterValue
- /// CHECK-DAG: <<ArgY:i\d+>> ParameterValue
- /// CHECK-DAG: If
- /// CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>]
- /// CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>]
- /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>]
- /// CHECK-DAG: Return [<<Phi>>]
-
- /// CHECK-START: int Main.testTrueBranch(int, int) dead_code_elimination$after_inlining (after)
- /// CHECK-DAG: <<ArgX:i\d+>> ParameterValue
- /// CHECK-DAG: <<ArgY:i\d+>> ParameterValue
- /// CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>]
- /// CHECK-DAG: Return [<<Add>>]
-
- /// CHECK-START: int Main.testTrueBranch(int, int) dead_code_elimination$after_inlining (after)
- /// CHECK-NOT: If
- /// CHECK-NOT: Sub
- /// CHECK-NOT: Phi
-
public static int testTrueBranch(int x, int y) {
- int z;
- if (inlineTrue()) {
- z = x + y;
- } else {
- z = x - y;
- // Prevent HSelect simplification by having a branch with multiple instructions.
- System.nanoTime();
+ try {
+ Class<?> c = Class.forName("Smali");
+ Method m = c.getMethod("testTrueBranch", int.class, int.class);
+ return (Integer) m.invoke(null, x, y);
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
}
- return z;
}
- /// CHECK-START: int Main.testFalseBranch(int, int) dead_code_elimination$after_inlining (before)
- /// CHECK-DAG: <<ArgX:i\d+>> ParameterValue
- /// CHECK-DAG: <<ArgY:i\d+>> ParameterValue
- /// CHECK-DAG: If
- /// CHECK-DAG: <<Add:i\d+>> Add [<<ArgX>>,<<ArgY>>]
- /// CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>]
- /// CHECK-DAG: <<Phi:i\d+>> Phi [<<Add>>,<<Sub>>]
- /// CHECK-DAG: Return [<<Phi>>]
-
- /// CHECK-START: int Main.testFalseBranch(int, int) dead_code_elimination$after_inlining (after)
- /// CHECK-DAG: <<ArgX:i\d+>> ParameterValue
- /// CHECK-DAG: <<ArgY:i\d+>> ParameterValue
- /// CHECK-DAG: <<Sub:i\d+>> Sub [<<ArgX>>,<<ArgY>>]
- /// CHECK-DAG: Return [<<Sub>>]
-
- /// CHECK-START: int Main.testFalseBranch(int, int) dead_code_elimination$after_inlining (after)
- /// CHECK-NOT: If
- /// CHECK-NOT: Add
- /// CHECK-NOT: Phi
-
public static int testFalseBranch(int x, int y) {
- int z;
- if (inlineFalse()) {
- z = x + y;
- } else {
- z = x - y;
- // Prevent HSelect simplification by having a branch with multiple instructions.
- System.nanoTime();
+ try {
+ Class<?> c = Class.forName("Smali");
+ Method m = c.getMethod("testFalseBranch", int.class, int.class);
+ return (Integer) m.invoke(null, x, y);
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
}
- return z;
}
/// CHECK-START: int Main.testRemoveLoop(int) dead_code_elimination$after_inlining (before)