From 1eece0002b9b135fc6125aa6f3e62c5f74c703bb Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Thu, 7 Mar 2024 11:52:09 +0100 Subject: Inliner: Update instruction count for pattern substitution. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 181943478 Change-Id: I807ebb5b43117fa46fdbc80c605b525606d014cb --- compiler/optimizing/inliner.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'compiler/optimizing/inliner.cc') diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc index f1e2733f3e..5917f8447e 100644 --- a/compiler/optimizing/inliner.cc +++ b/compiler/optimizing/inliner.cc @@ -1695,6 +1695,7 @@ bool HInliner::TryPatternSubstitution(HInvoke* invoke_instruction, return false; } + size_t number_of_instructions = 0u; // Note: We do not count constants. switch (inline_method.opcode) { case kInlineOpNop: DCHECK_EQ(invoke_instruction->GetType(), DataType::Type::kVoid); @@ -1729,6 +1730,7 @@ bool HInliner::TryPatternSubstitution(HInvoke* invoke_instruction, DCHECK_EQ(iget->IsVolatile() ? 1u : 0u, data.is_volatile); invoke_instruction->GetBlock()->InsertInstructionBefore(iget, invoke_instruction); *return_replacement = iget; + number_of_instructions = 1u; break; } case kInlineOpIPut: { @@ -1747,6 +1749,7 @@ bool HInliner::TryPatternSubstitution(HInvoke* invoke_instruction, size_t return_arg = data.return_arg_plus1 - 1u; *return_replacement = GetInvokeInputForArgVRegIndex(invoke_instruction, return_arg); } + number_of_instructions = 1u; break; } case kInlineOpConstructor: { @@ -1801,12 +1804,17 @@ bool HInliner::TryPatternSubstitution(HInvoke* invoke_instruction, invoke_instruction); } *return_replacement = nullptr; + number_of_instructions = number_of_iputs + (needs_constructor_barrier ? 1u : 0u); break; } default: LOG(FATAL) << "UNREACHABLE"; UNREACHABLE(); } + if (number_of_instructions != 0u) { + total_number_of_instructions_ += number_of_instructions; + UpdateInliningBudget(); + } return true; } -- cgit v1.2.3-59-g8ed1b