diff options
author | 2023-02-03 17:14:59 +0000 | |
---|---|---|
committer | 2023-02-08 13:40:37 +0000 | |
commit | ec45c7711c3a416660c98e96147fc94c2c6b34b8 (patch) | |
tree | b21288000488913536b9fe98b58fb81d6b97abfe /compiler/optimizing | |
parent | 86b5f86d8dbf069084e7534e25f8faf4d879828b (diff) |
Unify simplification passes after high-level optimizations
* Add a constant folding pass after the later high-level optimizations
* Remove dead_code_elimination$after_lse to unify simplification passes (always constant folding, instruction simplifier, dead code elimination)
* Make dead_code_elimination$before_codegen run always.
Locally speed compile Pixel 5:
* system server -64.28KB (-0.13%)
* SystemUIGoogle: -16.31KB (-0.06%)
* AGSA: -140.57 (-0.04%)
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Change-Id: I305877fd83471dff059fe1d4f5b98e5b1063f1a5
Diffstat (limited to 'compiler/optimizing')
-rw-r--r-- | compiler/optimizing/optimization.h | 2 | ||||
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 15 |
2 files changed, 8 insertions, 9 deletions
diff --git a/compiler/optimizing/optimization.h b/compiler/optimizing/optimization.h index c3ba17563e..2ef21b3ccc 100644 --- a/compiler/optimizing/optimization.h +++ b/compiler/optimizing/optimization.h @@ -43,7 +43,7 @@ class HOptimization : public ArenaObject<kArenaAllocOptimization> { // Return the name of the pass. Pass names for a single HOptimization should be of form // <optimization_name> or <optimization_name>$<pass_name> for common <optimization_name> prefix. - // Example: 'instruction_simplifier', 'instruction_simplifier$after_bce', + // Example: 'instruction_simplifier', 'instruction_simplifier$before_codegen', // 'instruction_simplifier$before_codegen'. const char* GetPassName() const { return pass_name_; } diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index db39ff98c3..60d5e6f3bd 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -671,18 +671,18 @@ void OptimizingCompiler::RunOptimizations(HGraph* graph, OptDef(OptimizationPass::kLoopOptimization), // Simplification. OptDef(OptimizationPass::kConstantFolding, - "constant_folding$after_bce"), + "constant_folding$after_loop_opt"), OptDef(OptimizationPass::kAggressiveInstructionSimplifier, - "instruction_simplifier$after_bce"), + "instruction_simplifier$after_loop_opt"), OptDef(OptimizationPass::kDeadCodeElimination, - "dead_code_elimination$after_bce"), + "dead_code_elimination$after_loop_opt"), // Other high-level optimizations. OptDef(OptimizationPass::kLoadStoreElimination), - OptDef(OptimizationPass::kDeadCodeElimination, - "dead_code_elimination$after_lse", - OptimizationPass::kLoadStoreElimination), OptDef(OptimizationPass::kCHAGuardOptimization), OptDef(OptimizationPass::kCodeSinking), + // Simplification. + OptDef(OptimizationPass::kConstantFolding, + "constant_folding$before_codegen"), // The codegen has a few assumptions that only the instruction simplifier // can satisfy. For example, the code generator does not expect to see a // HTypeConversion from a type to the same type. @@ -691,8 +691,7 @@ void OptimizingCompiler::RunOptimizations(HGraph* graph, // Simplification may result in dead code that should be removed prior to // code generation. OptDef(OptimizationPass::kDeadCodeElimination, - "dead_code_elimination$before_codegen", - OptimizationPass::kAggressiveInstructionSimplifier), + "dead_code_elimination$before_codegen"), // Eliminate constructor fences after code sinking to avoid // complicated sinking logic to split a fence with many inputs. OptDef(OptimizationPass::kConstructorFenceRedundancyElimination) |