diff options
| author | 2021-10-26 20:03:35 +0000 | |
|---|---|---|
| committer | 2021-10-26 22:56:55 +0000 | |
| commit | ce131feb7c60ffdf28c315c5d67f9cac33a077ce (patch) | |
| tree | c0d95161dc6ba2ed5cad0fc5cc4c131c3eed15d0 /compiler/optimizing | |
| parent | 9c924e89e5f52da9faadd1e4e60c73eaed6bc9d1 (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.cc | 8 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_arm_vixl.cc | 8 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_x86.cc | 5 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_x86_64.cc | 4 |
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); } |