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)