summaryrefslogtreecommitdiff
path: root/compiler/optimizing/dead_code_elimination.cc
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2023-11-02 13:01:39 +0000
committer Santiago Aboy Solanes <solanes@google.com> 2023-11-06 13:13:13 +0000
commit666cbfbb2091a6c12552ebaccc07c087ec756aff (patch)
tree7ef2d86f97bd524e2f3e66d5799ae0b5fbf83800 /compiler/optimizing/dead_code_elimination.cc
parent3796e88d5d9a6ecc095d32e5ebde11b9f27fef6b (diff)
Remove dead phis alongside dead instructions in DCE
A dead phi doesn't generate any code, but it may keep other instructions alive. Locally speed compiling, it improves generated code 0.01-0.1%. Test: art/test/testrunner/testrunner.py --host --64 -b --optimizing Change-Id: Ida024200baa7afeee8c5a729c95b573ed0c6e4e7
Diffstat (limited to 'compiler/optimizing/dead_code_elimination.cc')
-rw-r--r--compiler/optimizing/dead_code_elimination.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/optimizing/dead_code_elimination.cc b/compiler/optimizing/dead_code_elimination.cc
index 5784b93670..5b420db5be 100644
--- a/compiler/optimizing/dead_code_elimination.cc
+++ b/compiler/optimizing/dead_code_elimination.cc
@@ -919,6 +919,16 @@ void HDeadCodeElimination::RemoveDeadInstructions() {
MaybeRecordStat(stats_, MethodCompilationStat::kRemovedDeadInstruction);
}
}
+
+ // Same for Phis.
+ for (HBackwardInstructionIterator phi_it(block->GetPhis()); !phi_it.Done(); phi_it.Advance()) {
+ DCHECK(phi_it.Current()->IsPhi());
+ HPhi* phi = phi_it.Current()->AsPhi();
+ if (phi->IsDeadAndRemovable()) {
+ block->RemovePhi(phi);
+ MaybeRecordStat(stats_, MethodCompilationStat::kRemovedDeadPhi);
+ }
+ }
}
}