diff options
Diffstat (limited to 'compiler/optimizing/superblock_cloner.cc')
-rw-r--r-- | compiler/optimizing/superblock_cloner.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/compiler/optimizing/superblock_cloner.cc b/compiler/optimizing/superblock_cloner.cc index b46d193541..a5f919c31c 100644 --- a/compiler/optimizing/superblock_cloner.cc +++ b/compiler/optimizing/superblock_cloner.cc @@ -855,11 +855,20 @@ void SuperblockCloner::SetSuccessorRemappingInfo(const HEdgeSet* remap_orig_inte } bool SuperblockCloner::IsSubgraphClonable() const { - // TODO: Support irreducible graphs and graphs with try-catch. - if (graph_->HasIrreducibleLoops() || graph_->HasTryCatch()) { + // TODO: Support irreducible graphs and subgraphs with try-catch. + if (graph_->HasIrreducibleLoops()) { return false; } + for (HBasicBlock* block : graph_->GetReversePostOrder()) { + if (!IsInOrigBBSet(block)) { + continue; + } + if (block->GetTryCatchInformation() != nullptr) { + return false; + } + } + HInstructionMap live_outs( std::less<HInstruction*>(), graph_->GetAllocator()->Adapter(kArenaAllocSuperblockCloner)); |