| Index: src/compiler/bytecode-analysis.cc
|
| diff --git a/src/compiler/bytecode-analysis.cc b/src/compiler/bytecode-analysis.cc
|
| index e531e75b8c37986b7a746ed1a0b65eaddb29b202..13185db208b141c145c0888e789f8aebff16f470 100644
|
| --- a/src/compiler/bytecode-analysis.cc
|
| +++ b/src/compiler/bytecode-analysis.cc
|
| @@ -28,31 +28,17 @@ void BytecodeLoopAssignments::Add(interpreter::Register r) {
|
| }
|
| }
|
|
|
| -void BytecodeLoopAssignments::AddPair(interpreter::Register r) {
|
| +void BytecodeLoopAssignments::AddList(interpreter::Register r, uint32_t count) {
|
| if (r.is_parameter()) {
|
| - DCHECK(interpreter::Register(r.index() + 1).is_parameter());
|
| - bit_vector_->Add(r.ToParameterIndex(parameter_count_));
|
| - bit_vector_->Add(r.ToParameterIndex(parameter_count_) + 1);
|
| - } else {
|
| - DCHECK(!interpreter::Register(r.index() + 1).is_parameter());
|
| - bit_vector_->Add(parameter_count_ + r.index());
|
| - bit_vector_->Add(parameter_count_ + r.index() + 1);
|
| - }
|
| -}
|
| -
|
| -void BytecodeLoopAssignments::AddTriple(interpreter::Register r) {
|
| - if (r.is_parameter()) {
|
| - DCHECK(interpreter::Register(r.index() + 1).is_parameter());
|
| - DCHECK(interpreter::Register(r.index() + 2).is_parameter());
|
| - bit_vector_->Add(r.ToParameterIndex(parameter_count_));
|
| - bit_vector_->Add(r.ToParameterIndex(parameter_count_) + 1);
|
| - bit_vector_->Add(r.ToParameterIndex(parameter_count_) + 2);
|
| + for (uint32_t i = 0; i < count; i++) {
|
| + DCHECK(interpreter::Register(r.index() + i).is_parameter());
|
| + bit_vector_->Add(r.ToParameterIndex(parameter_count_) + i);
|
| + }
|
| } else {
|
| - DCHECK(!interpreter::Register(r.index() + 1).is_parameter());
|
| - DCHECK(!interpreter::Register(r.index() + 2).is_parameter());
|
| - bit_vector_->Add(parameter_count_ + r.index());
|
| - bit_vector_->Add(parameter_count_ + r.index() + 1);
|
| - bit_vector_->Add(parameter_count_ + r.index() + 2);
|
| + for (uint32_t i = 0; i < count; i++) {
|
| + DCHECK(!interpreter::Register(r.index() + i).is_parameter());
|
| + bit_vector_->Add(parameter_count_ + r.index() + i);
|
| + }
|
| }
|
| }
|
|
|
| @@ -112,6 +98,17 @@ void UpdateInLiveness(Bytecode bytecode, BytecodeLivenessState& in_liveness,
|
| }
|
| break;
|
| }
|
| + case OperandType::kRegOutList: {
|
| + interpreter::Register r = accessor.GetRegisterOperand(i++);
|
| + uint32_t reg_count = accessor.GetRegisterCountOperand(i);
|
| + if (!r.is_parameter()) {
|
| + for (uint32_t j = 0; j < reg_count; ++j) {
|
| + DCHECK(!interpreter::Register(r.index() + j).is_parameter());
|
| + in_liveness.MarkRegisterDead(r.index() + j);
|
| + }
|
| + }
|
| + break;
|
| + }
|
| case OperandType::kRegOutPair: {
|
| interpreter::Register r = accessor.GetRegisterOperand(i);
|
| if (!r.is_parameter()) {
|
| @@ -227,12 +224,18 @@ void UpdateAssignments(Bytecode bytecode, BytecodeLoopAssignments& assignments,
|
| assignments.Add(accessor.GetRegisterOperand(i));
|
| break;
|
| }
|
| + case OperandType::kRegOutList: {
|
| + interpreter::Register r = accessor.GetRegisterOperand(i++);
|
| + uint32_t reg_count = accessor.GetRegisterCountOperand(i);
|
| + assignments.AddList(r, reg_count);
|
| + break;
|
| + }
|
| case OperandType::kRegOutPair: {
|
| - assignments.AddPair(accessor.GetRegisterOperand(i));
|
| + assignments.AddList(accessor.GetRegisterOperand(i), 2);
|
| break;
|
| }
|
| case OperandType::kRegOutTriple: {
|
| - assignments.AddTriple(accessor.GetRegisterOperand(i));
|
| + assignments.AddList(accessor.GetRegisterOperand(i), 3);
|
| break;
|
| }
|
| default:
|
|
|