summaryrefslogtreecommitdiff
path: root/compiler/optimizing/builder.h
diff options
context:
space:
mode:
author David Brazdil <dbrazdil@google.com> 2015-09-22 13:04:14 +0100
committer David Brazdil <dbrazdil@google.com> 2015-09-25 10:40:08 +0100
commitd7558daaa86decf5a38f4f9bcd82267ab6e3e17f (patch)
treeabfbc97a44e301f850b775eaa1d63aaa5efd1a0e /compiler/optimizing/builder.h
parentc7e0da5292e841f6a864dd010bd6e0b06e0ece73 (diff)
ART: Preserve loop headers with try/catch
Algorithm for inserting HTryBoundary instructions would generate a non-natural loop when a loop header block was covered by a TryItem. This patch changes the approach to fix the issue. Bug: 23895756 Change-Id: I0e1ee6cf135cea326a96c97954907d202c9793cc
Diffstat (limited to 'compiler/optimizing/builder.h')
-rw-r--r--compiler/optimizing/builder.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/compiler/optimizing/builder.h b/compiler/optimizing/builder.h
index 7f87df6df2..1691800ee1 100644
--- a/compiler/optimizing/builder.h
+++ b/compiler/optimizing/builder.h
@@ -121,13 +121,13 @@ class HGraphBuilder : public ValueObject {
// instructions and links them to the corresponding catch blocks.
void InsertTryBoundaryBlocks(const DexFile::CodeItem& code_item);
- // Splits a single edge, inserting a TryBoundary of given `kind` and linking
- // it to exception handlers of `try_item`.
- void SplitTryBoundaryEdge(HBasicBlock* predecessor,
- HBasicBlock* successor,
- HTryBoundary::BoundaryKind kind,
- const DexFile::CodeItem& code_item,
- const DexFile::TryItem& try_item);
+ // Iterates over the exception handlers of `try_item`, finds the corresponding
+ // catch blocks and makes them successors of `try_boundary`. The order of
+ // successors matches the order in which runtime exception delivery searches
+ // for a handler.
+ void LinkToCatchBlocks(HTryBoundary* try_boundary,
+ const DexFile::CodeItem& code_item,
+ const DexFile::TryItem* try_item);
bool CanDecodeQuickenedInfo() const;
uint16_t LookupQuickenedInfo(uint32_t dex_pc);