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 05d3d0ae14a497f9bcbb3706a8d5b45909488a82..6f1ac94caacb17f4173d8f04e93bdd63d86ae365 100644 |
--- a/test/unittests/compiler/instruction-sequence-unittest.cc |
+++ b/test/unittests/compiler/instruction-sequence-unittest.cc |
@@ -184,30 +184,46 @@ InstructionSequenceTest::VReg InstructionSequenceTest::DefineConstant( |
int InstructionSequenceTest::EmitNop() { return Emit(NewIndex(), kArchNop); } |
-int InstructionSequenceTest::EmitI(TestOperand input_op_0) { |
- InstructionOperand* inputs[1]{ConvertInputOp(input_op_0)}; |
- return Emit(NewIndex(), kArchNop, 0, nullptr, 1, inputs); |
+static size_t CountInputs(size_t size, |
+ InstructionSequenceTest::TestOperand* inputs) { |
+ size_t i = 0; |
+ for (; i < size; ++i) { |
+ if (inputs[i].type_ == InstructionSequenceTest::kInvalid) break; |
+ } |
+ return i; |
+} |
+ |
+ |
+int InstructionSequenceTest::EmitI(size_t input_size, TestOperand* inputs) { |
+ InstructionOperand** mapped_inputs = ConvertInputs(input_size, inputs); |
+ return Emit(NewIndex(), kArchNop, 0, nullptr, input_size, mapped_inputs); |
+} |
+ |
+ |
+int InstructionSequenceTest::EmitI(TestOperand input_op_0, |
+ TestOperand input_op_1, |
+ TestOperand input_op_2, |
+ TestOperand input_op_3) { |
+ TestOperand inputs[] = {input_op_0, input_op_1, input_op_2, input_op_3}; |
+ return EmitI(CountInputs(arraysize(inputs), inputs), inputs); |
} |
InstructionSequenceTest::VReg InstructionSequenceTest::EmitOI( |
- TestOperand output_op, TestOperand input_op_0) { |
+ TestOperand output_op, size_t input_size, TestOperand* inputs) { |
VReg output_vreg = NewReg(); |
InstructionOperand* outputs[1]{ConvertOutputOp(output_vreg, output_op)}; |
- InstructionOperand* inputs[1]{ConvertInputOp(input_op_0)}; |
- Emit(output_vreg.value_, kArchNop, 1, outputs, 1, inputs); |
+ InstructionOperand** mapped_inputs = ConvertInputs(input_size, inputs); |
+ Emit(output_vreg.value_, kArchNop, 1, outputs, input_size, mapped_inputs); |
return output_vreg; |
} |
-InstructionSequenceTest::VReg InstructionSequenceTest::EmitOII( |
- TestOperand output_op, TestOperand input_op_0, TestOperand input_op_1) { |
- VReg output_vreg = NewReg(); |
- InstructionOperand* outputs[1]{ConvertOutputOp(output_vreg, output_op)}; |
- InstructionOperand* inputs[2]{ConvertInputOp(input_op_0), |
- ConvertInputOp(input_op_1)}; |
- Emit(output_vreg.value_, kArchNop, 1, outputs, 2, inputs); |
- return output_vreg; |
+InstructionSequenceTest::VReg InstructionSequenceTest::EmitOI( |
+ TestOperand output_op, TestOperand input_op_0, TestOperand input_op_1, |
+ TestOperand input_op_2, TestOperand input_op_3) { |
+ TestOperand inputs[] = {input_op_0, input_op_1, input_op_2, input_op_3}; |
+ return EmitOI(output_op, CountInputs(arraysize(inputs), inputs), inputs); |
} |
@@ -216,11 +232,7 @@ InstructionSequenceTest::VReg InstructionSequenceTest::EmitCall( |
VReg output_vreg = NewReg(); |
InstructionOperand* outputs[1]{ConvertOutputOp(output_vreg, output_op)}; |
CHECK(UnallocatedOperand::cast(outputs[0])->HasFixedPolicy()); |
- InstructionOperand** mapped_inputs = |
- zone()->NewArray<InstructionOperand*>(static_cast<int>(input_size)); |
- for (size_t i = 0; i < input_size; ++i) { |
- mapped_inputs[i] = ConvertInputOp(inputs[i]); |
- } |
+ InstructionOperand** mapped_inputs = ConvertInputs(input_size, inputs); |
Emit(output_vreg.value_, kArchCallCodeObject, 1, outputs, input_size, |
mapped_inputs, 0, nullptr, true); |
return output_vreg; |
@@ -231,11 +243,7 @@ InstructionSequenceTest::VReg InstructionSequenceTest::EmitCall( |
TestOperand output_op, TestOperand input_op_0, TestOperand input_op_1, |
TestOperand input_op_2, TestOperand input_op_3) { |
TestOperand inputs[] = {input_op_0, input_op_1, input_op_2, input_op_3}; |
- size_t size = 0; |
- for (; size < arraysize(inputs); ++size) { |
- if (inputs[size].type_ == kInvalid) break; |
- } |
- return EmitCall(output_op, size, inputs); |
+ return EmitCall(output_op, CountInputs(arraysize(inputs), inputs), inputs); |
} |
@@ -315,6 +323,17 @@ InstructionOperand* InstructionSequenceTest::Unallocated( |
} |
+InstructionOperand** InstructionSequenceTest::ConvertInputs( |
+ size_t input_size, TestOperand* inputs) { |
+ InstructionOperand** mapped_inputs = |
+ zone()->NewArray<InstructionOperand*>(static_cast<int>(input_size)); |
+ for (size_t i = 0; i < input_size; ++i) { |
+ mapped_inputs[i] = ConvertInputOp(inputs[i]); |
+ } |
+ return mapped_inputs; |
+} |
+ |
+ |
InstructionOperand* InstructionSequenceTest::ConvertInputOp(TestOperand op) { |
if (op.type_ == kImmediate) { |
CHECK_EQ(op.vreg_.value_, kNoValue); |
@@ -325,6 +344,10 @@ InstructionOperand* InstructionSequenceTest::ConvertInputOp(TestOperand op) { |
case kNone: |
return Unallocated(op, UnallocatedOperand::NONE, |
UnallocatedOperand::USED_AT_START); |
+ case kUnique: |
+ return Unallocated(op, UnallocatedOperand::NONE); |
+ case kUniqueRegister: |
+ return Unallocated(op, UnallocatedOperand::MUST_HAVE_REGISTER); |
case kRegister: |
return Unallocated(op, UnallocatedOperand::MUST_HAVE_REGISTER, |
UnallocatedOperand::USED_AT_START); |