diff options
author | David Brazdil <dbrazdil@google.com> | 2015-04-21 15:13:31 +0100 |
---|---|---|
committer | David Brazdil <dbrazdil@google.com> | 2015-04-23 17:46:36 +0100 |
commit | 917f9ab1eaaafdab25b4fd24ca1f49a76182a794 (patch) | |
tree | 63f9ba9a84c1a94251346e4602626da9433daebb | |
parent | 4ceed922d44b68c3fa7cbe670014c9e2e003b92b (diff) | |
download | art-917f9ab1eaaafdab25b4fd24ca1f49a76182a794.zip art-917f9ab1eaaafdab25b4fd24ca1f49a76182a794.tar.gz art-917f9ab1eaaafdab25b4fd24ca1f49a76182a794.tar.bz2 |
ART: Run BooleanSimplifier after inlining
Inlined methods are currently not simplified.
Change-Id: I075130c9df55e2f55032a2c81b08d42cb2cc01f6
-rw-r--r-- | compiler/optimizing/boolean_simplifier.cc | 4 | ||||
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 6 | ||||
-rw-r--r-- | test/474-checker-boolean-input/src/Main.java | 45 |
3 files changed, 9 insertions, 46 deletions
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 @@ static HInstruction* GetOppositeCondition(HInstruction* cond) { 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 @@ static void RunOptimizations(HGraph* graph, 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 @@ static void RunOptimizations(HGraph* graph, &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 @@ public class Main { } /* - * 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 @@ public class Main { * 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 @@ public class Main { * 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 @@ public class Main { * 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 class Main { 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)); |