summaryrefslogtreecommitdiff
path: root/compiler/optimizing/builder.h
diff options
context:
space:
mode:
author David Brazdil <dbrazdil@google.com> 2015-06-30 15:41:36 +0100
committer David Brazdil <dbrazdil@google.com> 2015-07-01 14:51:21 +0100
commit56e1accf3966ae92e151567abf4561ef3f6466f4 (patch)
tree7dc23852fe89290f1e01626342dc2a2d5a7de492 /compiler/optimizing/builder.h
parent3b0667c1d68ba88c71b031757b757dca659afd69 (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.h6
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;