Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(387)

Unified Diff: test/unittests/compiler/instruction-sequence-unittest.cc

Issue 2400513002: [Turbofan] Allow FP operands and vregs in InstructionSequenceTest. (Closed)
Patch Set: Remove extra tests, will add back later. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/unittests/compiler/instruction-sequence-unittest.cc
diff --git a/test/unittests/compiler/instruction-sequence-unittest.cc b/test/unittests/compiler/instruction-sequence-unittest.cc
index a0a86e043a4e9ef29243953d6ee4b85f191cd799..0a17100f25de0e87c38ee9cae98c0d8fb00e2e61 100644
--- a/test/unittests/compiler/instruction-sequence-unittest.cc
+++ b/test/unittests/compiler/instruction-sequence-unittest.cc
@@ -41,7 +41,6 @@ static void InitializeRegisterNames() {
}
}
-
InstructionSequenceTest::InstructionSequenceTest()
: sequence_(nullptr),
num_general_registers_(kDefaultNRegs),
@@ -62,6 +61,32 @@ void InstructionSequenceTest::SetNumRegs(int num_general_registers,
num_double_registers_ = num_double_registers;
}
+int InstructionSequenceTest::GetNumRegs(MachineRepresentation rep) {
+ switch (rep) {
+ case MachineRepresentation::kFloat32:
+ return config()->num_float_registers();
+ case MachineRepresentation::kFloat64:
+ return config()->num_double_registers();
+ case MachineRepresentation::kSimd128:
+ return config()->num_simd128_registers();
+ default:
+ return config()->num_general_registers();
+ }
+}
+
+int InstructionSequenceTest::GetAllocatableCode(int index,
+ MachineRepresentation rep) {
+ switch (rep) {
+ case MachineRepresentation::kFloat32:
+ return config()->GetAllocatableFloatCode(index);
+ case MachineRepresentation::kFloat64:
+ return config()->GetAllocatableDoubleCode(index);
+ case MachineRepresentation::kSimd128:
+ return config()->GetAllocatableSimd128Code(index);
+ default:
+ return config()->GetAllocatableGeneralCode(index);
+ }
+}
RegisterConfiguration* InstructionSequenceTest::config() {
if (!config_) {
@@ -149,13 +174,12 @@ InstructionSequenceTest::TestOperand InstructionSequenceTest::Imm(int32_t imm) {
InstructionSequenceTest::VReg InstructionSequenceTest::Define(
TestOperand output_op) {
- VReg vreg = NewReg();
+ VReg vreg = NewReg(output_op);
InstructionOperand outputs[1]{ConvertOutputOp(vreg, output_op)};
Emit(kArchNop, 1, outputs);
return vreg;
}
-
Instruction* InstructionSequenceTest::Return(TestOperand input_op_0) {
block_returns_ = true;
InstructionOperand inputs[1]{ConvertInputOp(input_op_0)};
@@ -240,7 +264,7 @@ Instruction* InstructionSequenceTest::EmitI(TestOperand input_op_0,
InstructionSequenceTest::VReg InstructionSequenceTest::EmitOI(
TestOperand output_op, size_t input_size, TestOperand* inputs) {
- VReg output_vreg = NewReg();
+ VReg output_vreg = NewReg(output_op);
InstructionOperand outputs[1]{ConvertOutputOp(output_vreg, output_op)};
InstructionOperand* mapped_inputs = ConvertInputs(input_size, inputs);
Emit(kArchNop, 1, outputs, input_size, mapped_inputs);
@@ -259,7 +283,8 @@ InstructionSequenceTest::VReg InstructionSequenceTest::EmitOI(
InstructionSequenceTest::VRegPair InstructionSequenceTest::EmitOOI(
TestOperand output_op_0, TestOperand output_op_1, size_t input_size,
TestOperand* inputs) {
- VRegPair output_vregs = std::make_pair(NewReg(), NewReg());
+ VRegPair output_vregs =
+ std::make_pair(NewReg(output_op_0), NewReg(output_op_1));
InstructionOperand outputs[2]{
ConvertOutputOp(output_vregs.first, output_op_0),
ConvertOutputOp(output_vregs.second, output_op_1)};
@@ -280,7 +305,7 @@ InstructionSequenceTest::VRegPair InstructionSequenceTest::EmitOOI(
InstructionSequenceTest::VReg InstructionSequenceTest::EmitCall(
TestOperand output_op, size_t input_size, TestOperand* inputs) {
- VReg output_vreg = NewReg();
+ VReg output_vreg = NewReg(output_op);
InstructionOperand outputs[1]{ConvertOutputOp(output_vreg, output_op)};
CHECK(UnallocatedOperand::cast(outputs[0]).HasFixedPolicy());
InstructionOperand* mapped_inputs = ConvertInputs(input_size, inputs);
@@ -387,11 +412,25 @@ InstructionOperand InstructionSequenceTest::ConvertInputOp(TestOperand op) {
case kSlot:
return Unallocated(op, UnallocatedOperand::MUST_HAVE_SLOT,
UnallocatedOperand::USED_AT_START);
- case kFixedRegister:
- CHECK(0 <= op.value_ && op.value_ < num_general_registers_);
- return Unallocated(op, UnallocatedOperand::FIXED_REGISTER, op.value_);
+ case kFixedRegister: {
+ MachineRepresentation rep = GetCanonicalRep(op);
+ CHECK(0 <= op.value_ && op.value_ < GetNumRegs(rep));
+ if (DoesRegisterAllocation()) {
+ auto extended_policy = IsFloatingPoint(rep)
+ ? UnallocatedOperand::FIXED_FP_REGISTER
+ : UnallocatedOperand::FIXED_REGISTER;
+ return Unallocated(op, extended_policy, op.value_);
+ } else {
+ return AllocatedOperand(LocationOperand::REGISTER, rep, op.value_);
+ }
+ }
case kFixedSlot:
- return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_);
+ if (DoesRegisterAllocation()) {
+ return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_);
+ } else {
+ return AllocatedOperand(LocationOperand::STACK_SLOT,
+ GetCanonicalRep(op), op.value_);
+ }
default:
break;
}
@@ -410,10 +449,24 @@ InstructionOperand InstructionSequenceTest::ConvertOutputOp(VReg vreg,
case kRegister:
return Unallocated(op, UnallocatedOperand::MUST_HAVE_REGISTER);
case kFixedSlot:
- return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_);
- case kFixedRegister:
- CHECK(0 <= op.value_ && op.value_ < num_general_registers_);
- return Unallocated(op, UnallocatedOperand::FIXED_REGISTER, op.value_);
+ if (DoesRegisterAllocation()) {
+ return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_);
+ } else {
+ return AllocatedOperand(LocationOperand::STACK_SLOT,
+ GetCanonicalRep(op), op.value_);
+ }
+ case kFixedRegister: {
+ MachineRepresentation rep = GetCanonicalRep(op);
+ CHECK(0 <= op.value_ && op.value_ < GetNumRegs(rep));
+ if (DoesRegisterAllocation()) {
+ auto extended_policy = IsFloatingPoint(rep)
+ ? UnallocatedOperand::FIXED_FP_REGISTER
+ : UnallocatedOperand::FIXED_REGISTER;
+ return Unallocated(op, extended_policy, op.value_);
+ } else {
+ return AllocatedOperand(LocationOperand::REGISTER, rep, op.value_);
+ }
+ }
default:
break;
}
« no previous file with comments | « test/unittests/compiler/instruction-sequence-unittest.h ('k') | test/unittests/compiler/move-optimizer-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698