From 56e1accf3966ae92e151567abf4561ef3f6466f4 Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Tue, 30 Jun 2015 15:41:36 +0100 Subject: 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 --- compiler/optimizing/builder.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'compiler/optimizing/builder.h') 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; -- cgit v1.2.3-59-g8ed1b