summaryrefslogtreecommitdiff
path: root/compiler/optimizing/inliner.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2024-03-07 11:52:09 +0100
committer Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-03-07 15:52:33 +0000
commit1eece0002b9b135fc6125aa6f3e62c5f74c703bb (patch)
tree82880c4ed1ffa764943c6e9fa796f1c5401768e7 /compiler/optimizing/inliner.cc
parent870ec8bb2e378d65174faba95342eda721739063 (diff)
Inliner: Update instruction count for pattern substitution.
Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 181943478 Change-Id: I807ebb5b43117fa46fdbc80c605b525606d014cb
Diffstat (limited to 'compiler/optimizing/inliner.cc')
-rw-r--r--compiler/optimizing/inliner.cc8
1 files changed, 8 insertions, 0 deletions
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;
}