summaryrefslogtreecommitdiff
path: root/compiler/optimizing
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2021-10-26 20:03:35 +0000
committer David Srbecky <dsrbecky@google.com> 2021-10-26 22:56:55 +0000
commitce131feb7c60ffdf28c315c5d67f9cac33a077ce (patch)
treec0d95161dc6ba2ed5cad0fc5cc4c131c3eed15d0 /compiler/optimizing
parent9c924e89e5f52da9faadd1e4e60c73eaed6bc9d1 (diff)
Revert "Change hotness counting."
This reverts commit c86869ab894c05e3181e7d15eb1893fa8a3fcd47. Reason for revert: App startup performance regression. Bug: 203810169 Change-Id: Ie816969fffd7740fcdfa330aeb645399f5351865
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/code_generator_arm64.cc8
-rw-r--r--compiler/optimizing/code_generator_arm_vixl.cc8
-rw-r--r--compiler/optimizing/code_generator_x86.cc5
-rw-r--r--compiler/optimizing/code_generator_x86_64.cc4
4 files changed, 11 insertions, 14 deletions
diff --git a/compiler/optimizing/code_generator_arm64.cc b/compiler/optimizing/code_generator_arm64.cc
index f6d38fbaca..74efc9ea8d 100644
--- a/compiler/optimizing/code_generator_arm64.cc
+++ b/compiler/optimizing/code_generator_arm64.cc
@@ -1123,12 +1123,10 @@ void CodeGeneratorARM64::MaybeIncrementHotness(bool is_frame_entry) {
__ Ldr(method, MemOperand(sp, 0));
}
__ Ldrh(counter, MemOperand(method, ArtMethod::HotnessCountOffset().Int32Value()));
- vixl::aarch64::Label done;
- DCHECK_EQ(0u, interpreter::kNterpHotnessValue);
- __ Cbz(counter, &done);
- __ Add(counter, counter, -1);
+ __ Add(counter, counter, 1);
+ // Subtract one if the counter would overflow.
+ __ Sub(counter, counter, Operand(counter, LSR, 16));
__ Strh(counter, MemOperand(method, ArtMethod::HotnessCountOffset().Int32Value()));
- __ Bind(&done);
}
if (GetGraph()->IsCompilingBaseline() && !Runtime::Current()->IsAotCompiler()) {
diff --git a/compiler/optimizing/code_generator_arm_vixl.cc b/compiler/optimizing/code_generator_arm_vixl.cc
index 29c72d8d07..700202ba20 100644
--- a/compiler/optimizing/code_generator_arm_vixl.cc
+++ b/compiler/optimizing/code_generator_arm_vixl.cc
@@ -2123,12 +2123,10 @@ void CodeGeneratorARMVIXL::MaybeIncrementHotness(bool is_frame_entry) {
}
// Load with zero extend to clear the high bits for integer overflow check.
__ Ldrh(temp, MemOperand(kMethodRegister, ArtMethod::HotnessCountOffset().Int32Value()));
- vixl::aarch32::Label done;
- DCHECK_EQ(0u, interpreter::kNterpHotnessValue);
- __ CompareAndBranchIfZero(temp, &done, /* is_far_target= */ false);
- __ Add(temp, temp, -1);
+ __ Add(temp, temp, 1);
+ // Subtract one if the counter would overflow.
+ __ Sub(temp, temp, Operand(temp, ShiftType::LSR, 16));
__ Strh(temp, MemOperand(kMethodRegister, ArtMethod::HotnessCountOffset().Int32Value()));
- __ Bind(&done);
if (!is_frame_entry) {
__ Pop(vixl32::Register(kMethodRegister));
GetAssembler()->cfi().AdjustCFAOffset(-static_cast<int>(kArmWordSize));
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc
index e6e22d3c4a..c49b08ba69 100644
--- a/compiler/optimizing/code_generator_x86.cc
+++ b/compiler/optimizing/code_generator_x86.cc
@@ -1109,9 +1109,10 @@ void CodeGeneratorX86::MaybeIncrementHotness(bool is_frame_entry) {
}
NearLabel overflow;
__ cmpw(Address(reg, ArtMethod::HotnessCountOffset().Int32Value()),
- Immediate(interpreter::kNterpHotnessValue));
+ Immediate(ArtMethod::MaxCounter()));
__ j(kEqual, &overflow);
- __ addw(Address(reg, ArtMethod::HotnessCountOffset().Int32Value()), Immediate(-1));
+ __ addw(Address(reg, ArtMethod::HotnessCountOffset().Int32Value()),
+ Immediate(1));
__ Bind(&overflow);
if (!is_frame_entry) {
__ popl(EAX);
diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc
index de78bf27ff..0584dc1365 100644
--- a/compiler/optimizing/code_generator_x86_64.cc
+++ b/compiler/optimizing/code_generator_x86_64.cc
@@ -1491,10 +1491,10 @@ void CodeGeneratorX86_64::MaybeIncrementHotness(bool is_frame_entry) {
__ movq(CpuRegister(method), Address(CpuRegister(RSP), kCurrentMethodStackOffset));
}
__ cmpw(Address(CpuRegister(method), ArtMethod::HotnessCountOffset().Int32Value()),
- Immediate(interpreter::kNterpHotnessValue));
+ Immediate(ArtMethod::MaxCounter()));
__ j(kEqual, &overflow);
__ addw(Address(CpuRegister(method), ArtMethod::HotnessCountOffset().Int32Value()),
- Immediate(-1));
+ Immediate(1));
__ Bind(&overflow);
}