ART: Run BooleanSimplifier after inlining

Inlined methods are currently not simplified.

Change-Id: I075130c9df55e2f55032a2c81b08d42cb2cc01f6
diff --git a/compiler/optimizing/boolean_simplifier.cc b/compiler/optimizing/boolean_simplifier.cc
index 06328f2..6ebfb45 100644
--- a/compiler/optimizing/boolean_simplifier.cc
+++ b/compiler/optimizing/boolean_simplifier.cc
@@ -72,8 +72,8 @@
       return graph->GetIntConstant(0);
     }
   } else {
-    // General case when 'cond' is another instruction of type boolean.
-    DCHECK_EQ(cond->GetType(), Primitive::Type::kPrimBoolean);
+    // General case when 'cond' is another instruction of type boolean,
+    // as verified by SSAChecker.
     return new (allocator) HBooleanNot(cond);
   }
 }
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc
index 218894f..d99d359 100644
--- a/compiler/optimizing/optimizing_compiler.cc
+++ b/compiler/optimizing/optimizing_compiler.cc
@@ -324,7 +324,7 @@
   HDeadCodeElimination dce2(graph, stats, "dead_code_elimination_final");
   HConstantFolding fold1(graph);
   InstructionSimplifier simplify1(graph, stats);
-  HBooleanSimplifier boolean_not(graph);
+  HBooleanSimplifier boolean_simplify(graph);
 
   HInliner inliner(graph, dex_compilation_unit, dex_compilation_unit, driver, stats);
 
@@ -343,10 +343,10 @@
     &dce1,
     &fold1,
     &simplify1,
+    &inliner,
     // BooleanSimplifier depends on the InstructionSimplifier removing redundant
     // suspend checks to recognize empty blocks.
-    &boolean_not,
-    &inliner,
+    &boolean_simplify,
     &fold2,
     &side_effects,
     &gvn,
diff --git a/test/474-checker-boolean-input/src/Main.java b/test/474-checker-boolean-input/src/Main.java
index 1ebe14e..9151986 100644
--- a/test/474-checker-boolean-input/src/Main.java
+++ b/test/474-checker-boolean-input/src/Main.java
@@ -23,35 +23,11 @@
   }
 
   /*
-   * Test that zero/one constants are accepted as Boolean inputs.
-   */
-
-  // CHECK-START: boolean Main.TestConstAsBoolean() inliner (before)
-  // CHECK-DAG:     [[Invoke:z\d+]]  InvokeStaticOrDirect
-  // CHECK-DAG:                      BooleanNot [ [[Invoke]] ]
-
-  // CHECK-START: boolean Main.TestConstAsBoolean() inliner (after)
-  // CHECK-DAG:     [[Const:i\d+]]   IntConstant 1
-  // CHECK-DAG:                      BooleanNot [ [[Const]] ]
-
-  public static boolean InlineConst() {
-    return true;
-  }
-
-  public static boolean TestConstAsBoolean() {
-    return InlineConst() != true ? true : false;
-  }
-
-  /*
    * Test that integer Phis are accepted as Boolean inputs until
    * we implement a suitable type analysis.
    */
 
-  // CHECK-START: boolean Main.TestPhiAsBoolean(int) inliner (before)
-  // CHECK-DAG:     [[Invoke:z\d+]]  InvokeStaticOrDirect
-  // CHECK-DAG:                      BooleanNot [ [[Invoke]] ]
-
-  // CHECK-START: boolean Main.TestPhiAsBoolean(int) inliner (after)
+  // CHECK-START: boolean Main.TestPhiAsBoolean(int) boolean_simplifier (after)
   // CHECK-DAG:     [[Phi:i\d+]]     Phi
   // CHECK-DAG:                      BooleanNot [ [[Phi]] ]
 
@@ -71,11 +47,7 @@
    * we implement a suitable type analysis.
    */
 
-  // CHECK-START: boolean Main.TestAndAsBoolean(boolean, boolean) inliner (before)
-  // CHECK-DAG:     [[Invoke:z\d+]]  InvokeStaticOrDirect
-  // CHECK-DAG:                      BooleanNot [ [[Invoke]] ]
-
-  // CHECK-START: boolean Main.TestAndAsBoolean(boolean, boolean) inliner (after)
+  // CHECK-START: boolean Main.TestAndAsBoolean(boolean, boolean) boolean_simplifier (after)
   // CHECK-DAG:     [[And:i\d+]]     And
   // CHECK-DAG:                      BooleanNot [ [[And]] ]
 
@@ -92,11 +64,7 @@
    * we implement a suitable type analysis.
    */
 
-  // CHECK-START: boolean Main.TestOrAsBoolean(boolean, boolean) inliner (before)
-  // CHECK-DAG:     [[Invoke:z\d+]]  InvokeStaticOrDirect
-  // CHECK-DAG:                      BooleanNot [ [[Invoke]] ]
-
-  // CHECK-START: boolean Main.TestOrAsBoolean(boolean, boolean) inliner (after)
+  // CHECK-START: boolean Main.TestOrAsBoolean(boolean, boolean) boolean_simplifier (after)
   // CHECK-DAG:     [[Or:i\d+]]      Or
   // CHECK-DAG:                      BooleanNot [ [[Or]] ]
 
@@ -113,11 +81,7 @@
    * we implement a suitable type analysis.
    */
 
-  // CHECK-START: boolean Main.TestXorAsBoolean(boolean, boolean) inliner (before)
-  // CHECK-DAG:     [[Invoke:z\d+]]  InvokeStaticOrDirect
-  // CHECK-DAG:                      BooleanNot [ [[Invoke]] ]
-
-  // CHECK-START: boolean Main.TestXorAsBoolean(boolean, boolean) inliner (after)
+  // CHECK-START: boolean Main.TestXorAsBoolean(boolean, boolean) boolean_simplifier (after)
   // CHECK-DAG:     [[Xor:i\d+]]     Xor
   // CHECK-DAG:                      BooleanNot [ [[Xor]] ]
 
@@ -132,7 +96,6 @@
   public static void main(String[] args) {
     f1 = true;
     f2 = false;
-    assertBoolEquals(false, TestConstAsBoolean());
     assertBoolEquals(true, TestPhiAsBoolean(0));
     assertBoolEquals(false, TestPhiAsBoolean(42));
     assertBoolEquals(true, TestAndAsBoolean(true, false));