diff options
Diffstat (limited to 'compiler/optimizing/dead_code_elimination.cc')
-rw-r--r-- | compiler/optimizing/dead_code_elimination.cc | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/compiler/optimizing/dead_code_elimination.cc b/compiler/optimizing/dead_code_elimination.cc index e15e731fcd..0ce8bfafae 100644 --- a/compiler/optimizing/dead_code_elimination.cc +++ b/compiler/optimizing/dead_code_elimination.cc @@ -629,7 +629,6 @@ bool HDeadCodeElimination::RemoveUnneededTries() { } } - const size_t total_tries = tries.size(); size_t removed_tries = 0; bool any_block_in_loop = false; @@ -641,10 +640,6 @@ bool HDeadCodeElimination::RemoveUnneededTries() { } } - if (removed_tries == total_tries) { - graph_->SetHasTryCatch(false); - } - if (removed_tries != 0) { // We want to: // 1) Update the dominance information @@ -741,6 +736,33 @@ void HDeadCodeElimination::RemoveDeadInstructions() { } } +void HDeadCodeElimination::UpdateGraphFlags() { + bool has_monitor_operations = false; + bool has_simd = false; + bool has_bounds_checks = false; + bool has_always_throwing_invokes = false; + + for (HBasicBlock* block : graph_->GetReversePostOrder()) { + for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { + HInstruction* instruction = it.Current(); + if (instruction->IsMonitorOperation()) { + has_monitor_operations = true; + } else if (instruction->IsVecOperation()) { + has_simd = true; + } else if (instruction->IsBoundsCheck()) { + has_bounds_checks = true; + } else if (instruction->IsInvoke() && instruction->AsInvoke()->AlwaysThrows()) { + has_always_throwing_invokes = true; + } + } + } + + graph_->SetHasMonitorOperations(has_monitor_operations); + graph_->SetHasSIMD(has_simd); + graph_->SetHasBoundsChecks(has_bounds_checks); + graph_->SetHasAlwaysThrowingInvokes(has_always_throwing_invokes); +} + bool HDeadCodeElimination::Run() { // Do not eliminate dead blocks if the graph has irreducible loops. We could // support it, but that would require changes in our loop representation to handle @@ -764,6 +786,7 @@ bool HDeadCodeElimination::Run() { } SsaRedundantPhiElimination(graph_).Run(); RemoveDeadInstructions(); + UpdateGraphFlags(); return true; } |