diff options
author | 2024-08-23 15:43:40 +0100 | |
---|---|---|
committer | 2024-08-28 13:57:28 +0000 | |
commit | c005493d5638a26ed1dcf4dfb70527906be748e8 (patch) | |
tree | ddd541d6e1c4bc9f97297e198637fefbf9cf8809 | |
parent | 93163edd92664c79da56ffcf5de32b7b872136ce (diff) |
cleanup: Use AddRegisterTemps where appropriate
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Change-Id: I2fc3cd539ee1f64d1757c3b2a0a532ff6e7366f7
-rw-r--r-- | compiler/optimizing/code_generator_arm_vixl.cc | 16 | ||||
-rw-r--r-- | compiler/optimizing/code_generator_x86.cc | 3 | ||||
-rw-r--r-- | compiler/optimizing/code_generator_x86_64.cc | 8 | ||||
-rw-r--r-- | compiler/optimizing/intrinsics_arm64.cc | 15 | ||||
-rw-r--r-- | compiler/optimizing/intrinsics_arm_vixl.cc | 8 | ||||
-rw-r--r-- | compiler/optimizing/intrinsics_riscv64.cc | 12 | ||||
-rw-r--r-- | compiler/optimizing/intrinsics_x86.cc | 9 | ||||
-rw-r--r-- | compiler/optimizing/intrinsics_x86_64.cc | 12 |
8 files changed, 25 insertions, 58 deletions
diff --git a/compiler/optimizing/code_generator_arm_vixl.cc b/compiler/optimizing/code_generator_arm_vixl.cc index 92081ff1ac..1afca6b8d6 100644 --- a/compiler/optimizing/code_generator_arm_vixl.cc +++ b/compiler/optimizing/code_generator_arm_vixl.cc @@ -5391,8 +5391,7 @@ void LocationsBuilderARMVIXL::VisitRor(HRor* ror) { locations->SetInAt(1, Location::ConstantLocation(shift)); } else { locations->SetInAt(1, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } locations->SetOut(Location::RequiresRegister(), Location::kOutputOverlap); break; @@ -5958,8 +5957,7 @@ void LocationsBuilderARMVIXL::HandleFieldSet(HInstruction* instruction, // Temporary registers for the write barrier. // TODO: consider renaming StoreNeedsWriteBarrier to StoreNeedsGCMark. if (needs_write_barrier || check_gc_card) { - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } else if (generate_volatile) { // ARM encoding have some additional constraints for ldrexd/strexd: // - registers need to be consecutive @@ -5967,9 +5965,7 @@ void LocationsBuilderARMVIXL::HandleFieldSet(HInstruction* instruction, // We don't test for ARM yet, and the assertion makes sure that we // revisit this if we ever enable ARM encoding. DCHECK_EQ(InstructionSet::kThumb2, codegen_->GetInstructionSet()); - - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); if (field_type == DataType::Type::kFloat64) { // For doubles we need two more registers to copy the value. locations->AddTemp(LocationFrom(r2)); @@ -6150,8 +6146,7 @@ void LocationsBuilderARMVIXL::HandleFieldGet(HInstruction* instruction, // We don't test for ARM yet, and the assertion makes sure that we // revisit this if we ever enable ARM encoding. DCHECK_EQ(InstructionSet::kThumb2, codegen_->GetInstructionSet()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } else if (object_field_get_with_read_barrier && kUseBakerReadBarrier) { // We need a temporary register for the read barrier load in // CodeGeneratorARMVIXL::GenerateFieldLoadWithBakerReadBarrier() @@ -6875,8 +6870,7 @@ void LocationsBuilderARMVIXL::VisitArraySet(HArraySet* instruction) { if (needs_write_barrier || check_gc_card || instruction->NeedsTypeCheck()) { // Temporary registers for type checking, write barrier, checking the dirty bit, or register // poisoning. - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } else if (kPoisonHeapReferences && value_type == DataType::Type::kReference) { locations->AddTemp(Location::RequiresRegister()); } diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc index 52c4b321f9..5b2d0d4535 100644 --- a/compiler/optimizing/code_generator_x86.cc +++ b/compiler/optimizing/code_generator_x86.cc @@ -2237,8 +2237,7 @@ void LocationsBuilderX86::VisitIf(HIf* if_instr) { codegen_->GetCompilerOptions().ProfileBranches() && !Runtime::Current()->IsAotCompiler()) { locations->SetInAt(0, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } else { locations->SetInAt(0, Location::Any()); } diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc index 2d26fb86ad..e1c3c9f426 100644 --- a/compiler/optimizing/code_generator_x86_64.cc +++ b/compiler/optimizing/code_generator_x86_64.cc @@ -5378,9 +5378,8 @@ void LocationsBuilderX86_64::HandleFieldSet(HInstruction* instruction, if (needs_write_barrier || check_gc_card || (kPoisonHeapReferences && field_type == DataType::Type::kReference)) { - // Temporary registers for the write barrier. - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); // Possibly used for reference poisoning too. + // Temporary registers for the write barrier / reference poisoning. + locations->AddRegisterTemps(2); } } @@ -8189,8 +8188,7 @@ void LocationsBuilderX86_64::VisitPackedSwitch(HPackedSwitch* switch_instr) { LocationSummary* locations = new (GetGraph()->GetAllocator()) LocationSummary(switch_instr, LocationSummary::kNoCall); locations->SetInAt(0, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } void InstructionCodeGeneratorX86_64::VisitPackedSwitch(HPackedSwitch* switch_instr) { diff --git a/compiler/optimizing/intrinsics_arm64.cc b/compiler/optimizing/intrinsics_arm64.cc index 67d888c864..903713eadc 100644 --- a/compiler/optimizing/intrinsics_arm64.cc +++ b/compiler/optimizing/intrinsics_arm64.cc @@ -1554,8 +1554,7 @@ void IntrinsicLocationsBuilderARM64::VisitJdkUnsafeCompareAndSetReference(HInvok // We need two non-scratch temporary registers for read barrier. LocationSummary* locations = invoke->GetLocations(); if (kUseBakerReadBarrier) { - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } else { // To preserve the old value across the non-Baker read barrier // slow path, use a fixed callee-save register. @@ -1836,9 +1835,7 @@ void IntrinsicLocationsBuilderARM64::VisitStringCompareTo(HInvoke* invoke) { kIntrinsified); locations->SetInAt(0, Location::RequiresRegister()); locations->SetInAt(1, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); // Need temporary registers for String compression's feature. if (mirror::kUseStringCompression) { locations->AddTemp(Location::RequiresRegister()); @@ -2602,9 +2599,7 @@ void IntrinsicLocationsBuilderARM64::VisitStringGetCharsNoCheck(HInvoke* invoke) locations->SetInAt(3, Location::RequiresRegister()); locations->SetInAt(4, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); } void IntrinsicCodeGeneratorARM64::VisitStringGetCharsNoCheck(HInvoke* invoke) { @@ -2777,9 +2772,7 @@ void IntrinsicLocationsBuilderARM64::VisitSystemArrayCopyChar(HInvoke* invoke) { locations->SetInAt(3, LocationForSystemArrayCopyInput(invoke->InputAt(3))); locations->SetInAt(4, LocationForSystemArrayCopyInput(invoke->InputAt(4))); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); } static void CheckSystemArrayCopyPosition(MacroAssembler* masm, diff --git a/compiler/optimizing/intrinsics_arm_vixl.cc b/compiler/optimizing/intrinsics_arm_vixl.cc index ecc9732816..1b1711b9de 100644 --- a/compiler/optimizing/intrinsics_arm_vixl.cc +++ b/compiler/optimizing/intrinsics_arm_vixl.cc @@ -535,9 +535,7 @@ void IntrinsicLocationsBuilderARMVIXL::VisitStringCompareTo(HInvoke* invoke) { kIntrinsified); locations->SetInAt(0, Location::RequiresRegister()); locations->SetInAt(1, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); // Need temporary registers for String compression's feature. if (mirror::kUseStringCompression) { locations->AddTemp(Location::RequiresRegister()); @@ -2120,9 +2118,7 @@ void IntrinsicLocationsBuilderARMVIXL::VisitStringGetCharsNoCheck(HInvoke* invok locations->SetInAt(4, Location::RequiresRegister()); // Temporary registers to store lengths of strings and for calculations. - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); } void IntrinsicCodeGeneratorARMVIXL::VisitStringGetCharsNoCheck(HInvoke* invoke) { diff --git a/compiler/optimizing/intrinsics_riscv64.cc b/compiler/optimizing/intrinsics_riscv64.cc index eec73ea052..2bc8cad71a 100644 --- a/compiler/optimizing/intrinsics_riscv64.cc +++ b/compiler/optimizing/intrinsics_riscv64.cc @@ -1963,9 +1963,7 @@ static void CreateSystemArrayCopyLocations(HInvoke* invoke, DataType::Type type) locations->SetInAt(3, LocationForSystemArrayCopyInput(invoke->InputAt(3))); locations->SetInAt(4, LocationForSystemArrayCopyInput(invoke->InputAt(4))); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); } void IntrinsicLocationsBuilderRISCV64::VisitSystemArrayCopyByte(HInvoke* invoke) { @@ -3110,9 +3108,7 @@ void IntrinsicLocationsBuilderRISCV64::VisitStringCompareTo(HInvoke* invoke) { kIntrinsified); locations->SetInAt(0, Location::RequiresRegister()); locations->SetInAt(1, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); // Need temporary registers for String compression's feature. if (mirror::kUseStringCompression) { locations->AddTemp(Location::RequiresRegister()); @@ -5357,9 +5353,7 @@ void IntrinsicLocationsBuilderRISCV64::VisitStringGetCharsNoCheck(HInvoke* invok locations->SetInAt(3, Location::RequiresRegister()); locations->SetInAt(4, Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(3); } void IntrinsicCodeGeneratorRISCV64::VisitStringGetCharsNoCheck(HInvoke* invoke) { diff --git a/compiler/optimizing/intrinsics_x86.cc b/compiler/optimizing/intrinsics_x86.cc index 50ac993ac8..2b83ba8349 100644 --- a/compiler/optimizing/intrinsics_x86.cc +++ b/compiler/optimizing/intrinsics_x86.cc @@ -4252,8 +4252,7 @@ static void CreateVarHandleGetAndSetLocations(HInvoke* invoke, CodeGeneratorX86* ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); LocationSummary* locations = new (allocator) LocationSummary( invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); // We use this temporary for the card, so we need a byte register locations->AddTemp(Location::RegisterLocation(EBX)); locations->SetInAt(0, Location::RequiresRegister()); @@ -4426,8 +4425,7 @@ static void CreateVarHandleCompareAndSetOrExchangeLocations(HInvoke* invoke, ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); LocationSummary* locations = new (allocator) LocationSummary( invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); // We use this temporary for the card, so we need a byte register locations->AddTemp(Location::RegisterLocation(EBX)); locations->SetInAt(0, Location::RequiresRegister()); @@ -4606,8 +4604,7 @@ static void CreateVarHandleGetAndAddLocations(HInvoke* invoke, CodeGeneratorX86* ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); LocationSummary* locations = new (allocator) LocationSummary( invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); locations->SetInAt(0, Location::RequiresRegister()); size_t expected_coordinates_count = GetExpectedVarHandleCoordinatesCount(invoke); if (expected_coordinates_count == 1u) { diff --git a/compiler/optimizing/intrinsics_x86_64.cc b/compiler/optimizing/intrinsics_x86_64.cc index c32595c486..2c9272d403 100644 --- a/compiler/optimizing/intrinsics_x86_64.cc +++ b/compiler/optimizing/intrinsics_x86_64.cc @@ -2840,8 +2840,7 @@ void IntrinsicLocationsBuilderX86_64::VisitLongReverse(HInvoke* invoke) { new (allocator_) LocationSummary(invoke, LocationSummary::kNoCall, kIntrinsified); locations->SetInAt(0, Location::RequiresRegister()); locations->SetOut(Location::SameAsFirstInput()); - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } static void SwapBits64(CpuRegister reg, CpuRegister temp, CpuRegister temp_mask, @@ -4368,8 +4367,7 @@ static void CreateVarHandleCompareAndSetOrExchangeLocations(HInvoke* invoke, locations->SetInAt(new_value_index, Location::RequiresRegister()); if (expected_type == DataType::Type::kReference) { // Need two temporaries for MarkGCCard. - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); if (codegen->EmitReadBarrier()) { // Need three temporaries for GenerateReferenceLoadWithBakerReadBarrier. DCHECK(kUseBakerReadBarrier); @@ -4516,8 +4514,7 @@ static void CreateVarHandleGetAndSetLocations(HInvoke* invoke, CodeGeneratorX86_ locations->SetInAt(new_value_index, Location::RegisterLocation(RAX)); if (type == DataType::Type::kReference) { // Need two temporaries for MarkGCCard. - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); if (codegen->EmitReadBarrier()) { // Need a third temporary for GenerateReferenceLoadWithBakerReadBarrier. DCHECK(kUseBakerReadBarrier); @@ -4810,8 +4807,7 @@ static void CreateVarHandleGetAndAddLocations(HInvoke* invoke, CodeGeneratorX86_ // case we need two temporary registers: one to hold value instead of RAX (which may get // clobbered by repeated CMPXCHG) and one for performing the operation. At compile time we // cannot distinguish this case from arrays or native-endian byte array views. - locations->AddTemp(Location::RequiresRegister()); - locations->AddTemp(Location::RequiresRegister()); + locations->AddRegisterTemps(2); } } } |