From 8efb1a62b67fd1e6866a4b7e465afc11770bb082 Mon Sep 17 00:00:00 2001 From: Santiago Aboy Solanes Date: Fri, 24 Jun 2022 11:16:35 +0100 Subject: Compiler implementation of try catch inlining Notable changes: 1) Wiring of the graph now allows for inlinees graph ending in TryBoundary, or Goto in some special cases. 2) Building a graph with try catch for inlining may add an extra Goto block. 3) Oat version bump. 4) Reduced kMaximumNumberOfCumulatedDexRegisters from 32 to 20. Bug: 227283224 Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b Change-Id: Ic2fd956de24b72d1de29b4cd3d0b2a1ddab231d8 --- compiler/optimizing/builder.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'compiler/optimizing/builder.h') diff --git a/compiler/optimizing/builder.h b/compiler/optimizing/builder.h index 580769e0f9..a59e78285f 100644 --- a/compiler/optimizing/builder.h +++ b/compiler/optimizing/builder.h @@ -46,7 +46,7 @@ class HGraphBuilder : public ValueObject { const CodeItemDebugInfoAccessor& accessor, DataType::Type return_type = DataType::Type::kInt32); - GraphAnalysisResult BuildGraph(); + GraphAnalysisResult BuildGraph(bool build_for_inline = false); void BuildIntrinsicGraph(ArtMethod* method); static constexpr const char* kBuilderPassName = "builder"; @@ -54,6 +54,10 @@ class HGraphBuilder : public ValueObject { private: bool SkipCompilation(size_t number_of_branches); + // When inlining, we sometimes want to add an extra Goto block before the Exit block. This is done + // in the building phase as we do not allow the inlining phase to add new instructions. + void MaybeAddExtraGotoBlocks(); + HGraph* const graph_; const DexFile* const dex_file_; const CodeItemDebugInfoAccessor code_item_accessor_; // null for intrinsic graph. -- cgit v1.2.3-59-g8ed1b