diff options
author | Aart Bik <ajcbik@google.com> | 2018-03-07 11:54:57 -0800 |
---|---|---|
committer | Aart Bik <ajcbik@google.com> | 2018-03-07 12:00:42 -0800 |
commit | 351df3e70521ebbe00ed6c7ac4ea25a0c26f4034 (patch) | |
tree | 8a22bf2eb06d2a5e57c6d6272ac070d368467118 /compiler/optimizing/code_generator_mips.cc | |
parent | 72efc159bf4e5cde85cd28e78316681effdceb5b (diff) |
Minor cleanup of MIN/MAX code.
Rationale:
Share the type dispatching code better.
Bug: b/65164101
Test: test-art-host,target
Change-Id: Ib06c915d570fd0a53f7734cdb316d2d16310db74
Diffstat (limited to 'compiler/optimizing/code_generator_mips.cc')
-rw-r--r-- | compiler/optimizing/code_generator_mips.cc | 45 |
1 files changed, 19 insertions, 26 deletions
diff --git a/compiler/optimizing/code_generator_mips.cc b/compiler/optimizing/code_generator_mips.cc index ae42bbcc70..825b2377c8 100644 --- a/compiler/optimizing/code_generator_mips.cc +++ b/compiler/optimizing/code_generator_mips.cc @@ -8799,10 +8799,10 @@ static void CreateMinMaxLocations(ArenaAllocator* allocator, HBinaryOperation* m } } -void InstructionCodeGeneratorMIPS::GenerateMinMax(LocationSummary* locations, - bool is_min, - bool isR6, - DataType::Type type) { +void InstructionCodeGeneratorMIPS::GenerateMinMaxInt(LocationSummary* locations, + bool is_min, + bool isR6, + DataType::Type type) { if (isR6) { // Some architectures, such as ARM and MIPS (prior to r6), have a // conditional move instruction which only changes the target @@ -9130,44 +9130,37 @@ void InstructionCodeGeneratorMIPS::GenerateMinMaxFP(LocationSummary* locations, } } -void LocationsBuilderMIPS::VisitMin(HMin* min) { - CreateMinMaxLocations(GetGraph()->GetAllocator(), min); -} - -void InstructionCodeGeneratorMIPS::VisitMin(HMin* min) { +void InstructionCodeGeneratorMIPS::GenerateMinMax(HBinaryOperation* minmax, bool is_min) { bool isR6 = codegen_->GetInstructionSetFeatures().IsR6(); - switch (min->GetResultType()) { + DataType::Type type = minmax->GetResultType(); + switch (type) { case DataType::Type::kInt32: case DataType::Type::kInt64: - GenerateMinMax(min->GetLocations(), /*is_min*/ true, isR6, min->GetResultType()); + GenerateMinMaxInt(minmax->GetLocations(), is_min, isR6, type); break; case DataType::Type::kFloat32: case DataType::Type::kFloat64: - GenerateMinMaxFP(min->GetLocations(), /*is_min*/ true, isR6, min->GetResultType()); + GenerateMinMaxFP(minmax->GetLocations(), is_min, isR6, type); break; default: - LOG(FATAL) << "Unexpected type for HMin " << min->GetResultType(); + LOG(FATAL) << "Unexpected type for HMinMax " << type; } } +void LocationsBuilderMIPS::VisitMin(HMin* min) { + CreateMinMaxLocations(GetGraph()->GetAllocator(), min); +} + +void InstructionCodeGeneratorMIPS::VisitMin(HMin* min) { + GenerateMinMax(min, /*is_min*/ true); +} + void LocationsBuilderMIPS::VisitMax(HMax* max) { CreateMinMaxLocations(GetGraph()->GetAllocator(), max); } void InstructionCodeGeneratorMIPS::VisitMax(HMax* max) { - bool isR6 = codegen_->GetInstructionSetFeatures().IsR6(); - switch (max->GetResultType()) { - case DataType::Type::kInt32: - case DataType::Type::kInt64: - GenerateMinMax(max->GetLocations(), /*is_min*/ false, isR6, max->GetResultType()); - break; - case DataType::Type::kFloat32: - case DataType::Type::kFloat64: - GenerateMinMaxFP(max->GetLocations(), /*is_min*/ false, isR6, max->GetResultType()); - break; - default: - LOG(FATAL) << "Unexpected type for HMax " << max->GetResultType(); - } + GenerateMinMax(max, /*is_min*/ false); } void LocationsBuilderMIPS::VisitAbs(HAbs* abs) { |