summaryrefslogtreecommitdiff
path: root/compiler/optimizing/optimizing_compiler.cc
diff options
context:
space:
mode:
author Chris Jones <christopher.jones@linaro.org> 2022-07-21 23:37:18 +0100
committer Treehugger Robot <treehugger-gerrit@google.com> 2022-11-23 12:38:39 +0000
commit5fa73a95fcfc638c155511305382ecbe4b75fe43 (patch)
tree53b2ba341671e53d0b32d75bb61da16056283538 /compiler/optimizing/optimizing_compiler.cc
parent009ed7b44b535107facd4a59705e7db7aeeff357 (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.cc12
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)