diff options
author | 2022-07-21 23:37:18 +0100 | |
---|---|---|
committer | 2022-11-23 12:38:39 +0000 | |
commit | 5fa73a95fcfc638c155511305382ecbe4b75fe43 (patch) | |
tree | 53b2ba341671e53d0b32d75bb61da16056283538 /compiler/optimizing/optimizing_compiler.cc | |
parent | 009ed7b44b535107facd4a59705e7db7aeeff357 (diff) |
ART: Add two extra DCE passes
Add two DCE passes to eliminate dead instructions left by:
- Loop optimization unrolling. After loop optimization, dead
instructions are often left that, when removed can simplify the
structure of the loop and remove basic blocks. This extra DCE pass
creates an opportunity for the load store elimination pass to
remove some loads/stores.
- The last instruction simplification pass.
Authors: Hari Limaye, Chris Jones
Test: 458-checker-instruct-simplification
Test: 530-checker-lse, 530-checker-lse-simd, 706-checker-scheduler
Test: test-art-target, test-art-host
Change-Id: I6e14cbfc3c320af5f507135a067bb7b5bc4df8f4
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index f394635ede..7cb4b29c87 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -670,17 +670,25 @@ void OptimizingCompiler::RunOptimizations(HGraph* graph, "constant_folding$after_bce"), OptDef(OptimizationPass::kAggressiveInstructionSimplifier, "instruction_simplifier$after_bce"), + OptDef(OptimizationPass::kDeadCodeElimination, + "dead_code_elimination$after_bce"), // Other high-level optimizations. OptDef(OptimizationPass::kLoadStoreElimination), - OptDef(OptimizationPass::kCHAGuardOptimization), OptDef(OptimizationPass::kDeadCodeElimination, - "dead_code_elimination$after_bce"), + "dead_code_elimination$after_lse", + OptimizationPass::kLoadStoreElimination), + OptDef(OptimizationPass::kCHAGuardOptimization), OptDef(OptimizationPass::kCodeSinking), // 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. OptDef(OptimizationPass::kAggressiveInstructionSimplifier, "instruction_simplifier$before_codegen"), + // Simplification may result in dead code that should be removed prior to + // code generation. + OptDef(OptimizationPass::kDeadCodeElimination, + "dead_code_elimination$before_codegen", + OptimizationPass::kAggressiveInstructionSimplifier), // Eliminate constructor fences after code sinking to avoid // complicated sinking logic to split a fence with many inputs. OptDef(OptimizationPass::kConstructorFenceRedundancyElimination) |