diff options
author | 2021-09-13 14:40:53 +0100 | |
---|---|---|
committer | 2021-09-14 12:21:30 +0000 | |
commit | e8a822d2209a644f30fc1b6db3c70ec5faf2b79a (patch) | |
tree | 6adac4604b30164f328e5fececc816e263e2cd0e /compiler/optimizing/code_generator.cc | |
parent | 76a943abedf97ebfc36a826edd447ee411345aa2 (diff) |
Remove entry SuspendCheck for methods which only call on the slow path
We can skip SuspendCheck if the method is e.g. a leaf method with a read barrier call in the slow path.
Bug: 135477345
Test: ART tests
Change-Id: I6e04f10544ec61b46bb5763a88c28248e88193bf
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r-- | compiler/optimizing/code_generator.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc index a353d0758e..cabf94991d 100644 --- a/compiler/optimizing/code_generator.cc +++ b/compiler/optimizing/code_generator.cc @@ -982,6 +982,9 @@ void CodeGenerator::AllocateLocations(HInstruction* instruction) { if (locations != nullptr) { if (locations->CanCall()) { MarkNotLeaf(); + if (locations->NeedsSuspendCheckEntry()) { + MarkNeedsSuspendCheckEntry(); + } } else if (locations->Intrinsified() && instruction->IsInvokeStaticOrDirect() && !instruction->AsInvokeStaticOrDirect()->HasCurrentMethodInput()) { @@ -1061,6 +1064,7 @@ CodeGenerator::CodeGenerator(HGraph* graph, current_slow_path_(nullptr), current_block_index_(0), is_leaf_(true), + needs_suspend_check_entry_(false), requires_current_method_(false), code_generation_data_() { if (GetGraph()->IsCompilingOsr()) { |