diff options
author | 2015-06-30 15:41:36 +0100 | |
---|---|---|
committer | 2015-07-01 14:51:21 +0100 | |
commit | 56e1accf3966ae92e151567abf4561ef3f6466f4 (patch) | |
tree | 7dc23852fe89290f1e01626342dc2a2d5a7de492 /compiler/optimizing/builder.h | |
parent | 3b0667c1d68ba88c71b031757b757dca659afd69 (diff) |
ART: Changes to try-catch in GraphBuilder
This patch adds an additional case into the insertion algorithm for
HTryBoundary inside HGraphBuilder in order to better handle catch
blocks covered by a TryItem.
Building SSA form also required to stop combining HTryBoundaries for
neighbouring TryItems because it was not clear which exception
handlers belong to which try block.
Change-Id: Ic68bd6ef98fee784609fa593cb08dca1f00a15e0
Diffstat (limited to 'compiler/optimizing/builder.h')
-rw-r--r-- | compiler/optimizing/builder.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/optimizing/builder.h b/compiler/optimizing/builder.h index 58d85e9ef1..9744a55687 100644 --- a/compiler/optimizing/builder.h +++ b/compiler/optimizing/builder.h @@ -97,9 +97,15 @@ class HGraphBuilder : public ValueObject { void MaybeUpdateCurrentBlock(size_t dex_pc); HBasicBlock* FindBlockStartingAt(int32_t dex_pc) const; HBasicBlock* FindOrCreateBlockStartingAt(int32_t dex_pc); + bool IsBlockInPcRange(HBasicBlock* block, uint32_t dex_pc_start, uint32_t dex_pc_end); void CreateBlocksForTryCatch(const DexFile::CodeItem& code_item); void InsertTryBoundaryBlocks(const DexFile::CodeItem& code_item); + void SplitTryBoundaryEdge(HBasicBlock* predecessor, + HBasicBlock* successor, + HTryBoundary::BoundaryKind kind, + const DexFile::CodeItem& code_item, + const DexFile::TryItem& try_item); void InitializeLocals(uint16_t count); HLocal* GetLocalAt(int register_index) const; |