diff options
-rw-r--r-- | compiler/optimizing/constant_folding.h | 4 | ||||
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 2 | ||||
-rw-r--r-- | test/458-checker-instruction-simplification/src/Main.java | 15 |
3 files changed, 18 insertions, 3 deletions
diff --git a/compiler/optimizing/constant_folding.h b/compiler/optimizing/constant_folding.h index ac00824e33..66ff57855e 100644 --- a/compiler/optimizing/constant_folding.h +++ b/compiler/optimizing/constant_folding.h @@ -32,8 +32,8 @@ namespace art { */ class HConstantFolding : public HOptimization { public: - explicit HConstantFolding(HGraph* graph) - : HOptimization(graph, true, kConstantFoldingPassName) {} + explicit HConstantFolding(HGraph* graph, const char* name = kConstantFoldingPassName) + : HOptimization(graph, true, name) {} void Run() OVERRIDE; diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index a17d6e1822..a95696a468 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -317,7 +317,7 @@ static void RunOptimizations(HGraph* graph, HInliner inliner(graph, dex_compilation_unit, dex_compilation_unit, driver, stats); - HConstantFolding fold2(graph); + HConstantFolding fold2(graph, "constant_folding_after_inlining"); SideEffectsAnalysis side_effects(graph); GVNOptimization gvn(graph, side_effects); LICM licm(graph, side_effects); diff --git a/test/458-checker-instruction-simplification/src/Main.java b/test/458-checker-instruction-simplification/src/Main.java index 3cbcebbcb6..56ceadfa6c 100644 --- a/test/458-checker-instruction-simplification/src/Main.java +++ b/test/458-checker-instruction-simplification/src/Main.java @@ -368,6 +368,15 @@ public class Main { // CHECK-DAG: [[Or:i\d+]] Or [ [[Add1]] [[Add2]] ] // CHECK-DAG: Return [ [[Or]] ] + // CHECK-START: int Main.AddNegs2(int, int) GVN (after) + // CHECK-DAG: [[Arg1:i\d+]] ParameterValue + // CHECK-DAG: [[Arg2:i\d+]] ParameterValue + // CHECK-DAG: [[Neg1:i\d+]] Neg [ [[Arg1]] ] + // CHECK-DAG: [[Neg2:i\d+]] Neg [ [[Arg2]] ] + // CHECK-DAG: [[Add:i\d+]] Add [ [[Neg1]] [[Neg2]] ] + // CHECK-DAG: [[Or:i\d+]] Or [ [[Add]] [[Add]] ] + // CHECK-DAG: Return [ [[Or]] ] + public static int AddNegs2(int arg1, int arg2) { int temp1 = -arg1; int temp2 = -arg2; @@ -524,6 +533,12 @@ public class Main { // CHECK-NOT: Neg // CHECK-NOT: Add + // CHECK-START: int Main.NegNeg2(int) constant_folding_after_inlining (after) + // CHECK: [[Const0:i\d+]] IntConstant 0 + // CHECK-NOT: Neg + // CHECK-NOT: Add + // CHECK: Return [ [[Const0]] ] + public static int NegNeg2(int arg) { int temp = -arg; return temp + -temp; |