diff options
author | 2023-11-02 13:01:39 +0000 | |
---|---|---|
committer | 2023-11-06 13:13:13 +0000 | |
commit | 666cbfbb2091a6c12552ebaccc07c087ec756aff (patch) | |
tree | 7ef2d86f97bd524e2f3e66d5799ae0b5fbf83800 /compiler/optimizing/dead_code_elimination.cc | |
parent | 3796e88d5d9a6ecc095d32e5ebde11b9f27fef6b (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.cc | 10 |
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); + } + } } } |