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 001fb11d1381e24fa005aa9f3de6818ff4de16ff..e151bdbd687ec69711aa12182898e5a0b9640c32 100644 |
--- a/test/unittests/compiler/instruction-sequence-unittest.cc |
+++ b/test/unittests/compiler/instruction-sequence-unittest.cc |
@@ -40,7 +40,6 @@ InstructionSequenceTest::InstructionSequenceTest() |
num_general_registers_(kDefaultNRegs), |
num_double_registers_(kDefaultNRegs), |
instruction_blocks_(zone()), |
- current_instruction_index_(-1), |
current_block_(nullptr), |
block_returns_(false) { |
InitializeRegisterNames(); |
@@ -100,8 +99,8 @@ void InstructionSequenceTest::StartBlock() { |
} |
-int InstructionSequenceTest::EndBlock(BlockCompletion completion) { |
- int instruction_index = kMinInt; |
+Instruction* InstructionSequenceTest::EndBlock(BlockCompletion completion) { |
+ Instruction* result = nullptr; |
if (block_returns_) { |
CHECK(completion.type_ == kBlockEnd || completion.type_ == kFallThrough); |
completion.type_ = kBlockEnd; |
@@ -110,22 +109,22 @@ int InstructionSequenceTest::EndBlock(BlockCompletion completion) { |
case kBlockEnd: |
break; |
case kFallThrough: |
- instruction_index = EmitFallThrough(); |
+ result = EmitFallThrough(); |
break; |
case kJump: |
CHECK(!block_returns_); |
- instruction_index = EmitJump(); |
+ result = EmitJump(); |
break; |
case kBranch: |
CHECK(!block_returns_); |
- instruction_index = EmitBranch(completion.op_); |
+ result = EmitBranch(completion.op_); |
break; |
} |
completions_.push_back(completion); |
CHECK(current_block_ != nullptr); |
sequence()->EndBlock(current_block_->rpo_number()); |
current_block_ = nullptr; |
- return instruction_index; |
+ return result; |
} |
@@ -139,15 +138,15 @@ InstructionSequenceTest::VReg InstructionSequenceTest::Define( |
TestOperand output_op) { |
VReg vreg = NewReg(); |
InstructionOperand outputs[1]{ConvertOutputOp(vreg, output_op)}; |
- Emit(vreg.value_, kArchNop, 1, outputs); |
+ Emit(kArchNop, 1, outputs); |
return vreg; |
} |
-int InstructionSequenceTest::Return(TestOperand input_op_0) { |
+Instruction* InstructionSequenceTest::Return(TestOperand input_op_0) { |
block_returns_ = true; |
InstructionOperand inputs[1]{ConvertInputOp(input_op_0)}; |
- return Emit(NewIndex(), kArchRet, 0, nullptr, 1, inputs); |
+ return Emit(kArchRet, 0, nullptr, 1, inputs); |
} |
@@ -192,12 +191,12 @@ InstructionSequenceTest::VReg InstructionSequenceTest::DefineConstant( |
VReg vreg = NewReg(); |
sequence()->AddConstant(vreg.value_, Constant(imm)); |
InstructionOperand outputs[1]{ConstantOperand(vreg.value_)}; |
- Emit(vreg.value_, kArchNop, 1, outputs); |
+ Emit(kArchNop, 1, outputs); |
return vreg; |
} |
-int InstructionSequenceTest::EmitNop() { return Emit(NewIndex(), kArchNop); } |
+Instruction* InstructionSequenceTest::EmitNop() { return Emit(kArchNop); } |
static size_t CountInputs(size_t size, |
@@ -210,16 +209,17 @@ static size_t CountInputs(size_t size, |
} |
-int InstructionSequenceTest::EmitI(size_t input_size, TestOperand* inputs) { |
+Instruction* 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); |
+ return Emit(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) { |
+Instruction* 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); |
} |
@@ -230,7 +230,7 @@ InstructionSequenceTest::VReg InstructionSequenceTest::EmitOI( |
VReg output_vreg = NewReg(); |
InstructionOperand outputs[1]{ConvertOutputOp(output_vreg, output_op)}; |
InstructionOperand* mapped_inputs = ConvertInputs(input_size, inputs); |
- Emit(output_vreg.value_, kArchNop, 1, outputs, input_size, mapped_inputs); |
+ Emit(kArchNop, 1, outputs, input_size, mapped_inputs); |
return output_vreg; |
} |
@@ -243,14 +243,36 @@ 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()); |
+ InstructionOperand outputs[2]{ |
+ ConvertOutputOp(output_vregs.first, output_op_0), |
+ ConvertOutputOp(output_vregs.second, output_op_1)}; |
+ InstructionOperand* mapped_inputs = ConvertInputs(input_size, inputs); |
+ Emit(kArchNop, 2, outputs, input_size, mapped_inputs); |
+ return output_vregs; |
+} |
+ |
+ |
+InstructionSequenceTest::VRegPair InstructionSequenceTest::EmitOOI( |
+ TestOperand output_op_0, TestOperand output_op_1, 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 EmitOOI(output_op_0, output_op_1, |
+ CountInputs(arraysize(inputs), inputs), inputs); |
+} |
+ |
+ |
InstructionSequenceTest::VReg InstructionSequenceTest::EmitCall( |
TestOperand output_op, size_t input_size, TestOperand* inputs) { |
VReg output_vreg = NewReg(); |
InstructionOperand outputs[1]{ConvertOutputOp(output_vreg, output_op)}; |
CHECK(UnallocatedOperand::cast(outputs[0]).HasFixedPolicy()); |
InstructionOperand* mapped_inputs = ConvertInputs(input_size, inputs); |
- Emit(output_vreg.value_, kArchCallCodeObject, 1, outputs, input_size, |
- mapped_inputs, 0, nullptr, true); |
+ Emit(kArchCallCodeObject, 1, outputs, input_size, mapped_inputs, 0, nullptr, |
+ true); |
return output_vreg; |
} |
@@ -263,36 +285,28 @@ InstructionSequenceTest::VReg InstructionSequenceTest::EmitCall( |
} |
-const Instruction* InstructionSequenceTest::GetInstruction( |
- int instruction_index) { |
- auto it = instructions_.find(instruction_index); |
- CHECK(it != instructions_.end()); |
- return it->second; |
-} |
- |
- |
-int InstructionSequenceTest::EmitBranch(TestOperand input_op) { |
+Instruction* InstructionSequenceTest::EmitBranch(TestOperand input_op) { |
InstructionOperand inputs[4]{ConvertInputOp(input_op), ConvertInputOp(Imm()), |
ConvertInputOp(Imm()), ConvertInputOp(Imm())}; |
InstructionCode opcode = kArchJmp | FlagsModeField::encode(kFlags_branch) | |
FlagsConditionField::encode(kEqual); |
auto instruction = |
NewInstruction(opcode, 0, nullptr, 4, inputs)->MarkAsControl(); |
- return AddInstruction(NewIndex(), instruction); |
+ return AddInstruction(instruction); |
} |
-int InstructionSequenceTest::EmitFallThrough() { |
+Instruction* InstructionSequenceTest::EmitFallThrough() { |
auto instruction = NewInstruction(kArchNop, 0, nullptr)->MarkAsControl(); |
- return AddInstruction(NewIndex(), instruction); |
+ return AddInstruction(instruction); |
} |
-int InstructionSequenceTest::EmitJump() { |
+Instruction* InstructionSequenceTest::EmitJump() { |
InstructionOperand inputs[1]{ConvertInputOp(Imm())}; |
auto instruction = |
NewInstruction(kArchJmp, 0, nullptr, 1, inputs)->MarkAsControl(); |
- return AddInstruction(NewIndex(), instruction); |
+ return AddInstruction(instruction); |
} |
@@ -458,23 +472,20 @@ void InstructionSequenceTest::WireBlock(size_t block_offset, int jump_offset) { |
} |
-int InstructionSequenceTest::Emit(int instruction_index, InstructionCode code, |
- size_t outputs_size, |
- InstructionOperand* outputs, |
- size_t inputs_size, |
- InstructionOperand* inputs, size_t temps_size, |
- InstructionOperand* temps, bool is_call) { |
+Instruction* InstructionSequenceTest::Emit( |
+ InstructionCode code, size_t outputs_size, InstructionOperand* outputs, |
+ size_t inputs_size, InstructionOperand* inputs, size_t temps_size, |
+ InstructionOperand* temps, bool is_call) { |
auto instruction = NewInstruction(code, outputs_size, outputs, inputs_size, |
inputs, temps_size, temps); |
if (is_call) instruction->MarkAsCall(); |
- return AddInstruction(instruction_index, instruction); |
+ return AddInstruction(instruction); |
} |
-int InstructionSequenceTest::AddInstruction(int instruction_index, |
- Instruction* instruction) { |
+Instruction* InstructionSequenceTest::AddInstruction(Instruction* instruction) { |
sequence()->AddInstruction(instruction); |
- return instruction_index; |
+ return instruction; |
} |
} // namespace compiler |