| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/bit-vector.h" | 5 #include "src/bit-vector.h" |
| 6 #include "src/compiler/instruction.h" | 6 #include "src/compiler/instruction.h" |
| 7 #include "src/compiler/register-allocator-verifier.h" | 7 #include "src/compiler/register-allocator-verifier.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 static_cast<GapInstruction::InnerPosition>(i); | 22 static_cast<GapInstruction::InnerPosition>(i); |
| 23 CHECK(!gap->GetParallelMove(inner_pos)); | 23 CHECK(!gap->GetParallelMove(inner_pos)); |
| 24 } | 24 } |
| 25 } | 25 } |
| 26 | 26 |
| 27 | 27 |
| 28 void RegisterAllocatorVerifier::VerifyInput( | 28 void RegisterAllocatorVerifier::VerifyInput( |
| 29 const OperandConstraint& constraint) { | 29 const OperandConstraint& constraint) { |
| 30 CHECK_NE(kSameAsFirst, constraint.type_); | 30 CHECK_NE(kSameAsFirst, constraint.type_); |
| 31 if (constraint.type_ != kImmediate) { | 31 if (constraint.type_ != kImmediate) { |
| 32 CHECK_NE(UnallocatedOperand::kInvalidVirtualRegister, | 32 CHECK_NE(InstructionOperand::kInvalidVirtualRegister, |
| 33 constraint.virtual_register_); | 33 constraint.virtual_register_); |
| 34 } | 34 } |
| 35 } | 35 } |
| 36 | 36 |
| 37 | 37 |
| 38 void RegisterAllocatorVerifier::VerifyTemp( | 38 void RegisterAllocatorVerifier::VerifyTemp( |
| 39 const OperandConstraint& constraint) { | 39 const OperandConstraint& constraint) { |
| 40 CHECK_NE(kSameAsFirst, constraint.type_); | 40 CHECK_NE(kSameAsFirst, constraint.type_); |
| 41 CHECK_NE(kImmediate, constraint.type_); | 41 CHECK_NE(kImmediate, constraint.type_); |
| 42 CHECK_NE(kConstant, constraint.type_); | 42 CHECK_NE(kConstant, constraint.type_); |
| 43 } | 43 } |
| 44 | 44 |
| 45 | 45 |
| 46 void RegisterAllocatorVerifier::VerifyOutput( | 46 void RegisterAllocatorVerifier::VerifyOutput( |
| 47 const OperandConstraint& constraint) { | 47 const OperandConstraint& constraint) { |
| 48 CHECK_NE(kImmediate, constraint.type_); | 48 CHECK_NE(kImmediate, constraint.type_); |
| 49 CHECK_NE(UnallocatedOperand::kInvalidVirtualRegister, | 49 CHECK_NE(InstructionOperand::kInvalidVirtualRegister, |
| 50 constraint.virtual_register_); | 50 constraint.virtual_register_); |
| 51 } | 51 } |
| 52 | 52 |
| 53 | 53 |
| 54 RegisterAllocatorVerifier::RegisterAllocatorVerifier( | 54 RegisterAllocatorVerifier::RegisterAllocatorVerifier( |
| 55 Zone* zone, const RegisterConfiguration* config, | 55 Zone* zone, const RegisterConfiguration* config, |
| 56 const InstructionSequence* sequence) | 56 const InstructionSequence* sequence) |
| 57 : zone_(zone), config_(config), sequence_(sequence), constraints_(zone) { | 57 : zone_(zone), config_(config), sequence_(sequence), constraints_(zone) { |
| 58 constraints_.reserve(sequence->instructions().size()); | 58 constraints_.reserve(sequence->instructions().size()); |
| 59 // TODO(dcarney): model unique constraints. | 59 // TODO(dcarney): model unique constraints. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 CheckConstraint(instr->OutputAt(i), &op_constraints[count]); | 113 CheckConstraint(instr->OutputAt(i), &op_constraints[count]); |
| 114 } | 114 } |
| 115 ++instr_it; | 115 ++instr_it; |
| 116 } | 116 } |
| 117 } | 117 } |
| 118 | 118 |
| 119 | 119 |
| 120 void RegisterAllocatorVerifier::BuildConstraint(const InstructionOperand* op, | 120 void RegisterAllocatorVerifier::BuildConstraint(const InstructionOperand* op, |
| 121 OperandConstraint* constraint) { | 121 OperandConstraint* constraint) { |
| 122 constraint->value_ = kMinInt; | 122 constraint->value_ = kMinInt; |
| 123 constraint->virtual_register_ = UnallocatedOperand::kInvalidVirtualRegister; | 123 constraint->virtual_register_ = InstructionOperand::kInvalidVirtualRegister; |
| 124 if (op->IsConstant()) { | 124 if (op->IsConstant()) { |
| 125 constraint->type_ = kConstant; | 125 constraint->type_ = kConstant; |
| 126 constraint->value_ = ConstantOperand::cast(op)->index(); | 126 constraint->value_ = ConstantOperand::cast(op)->index(); |
| 127 constraint->virtual_register_ = constraint->value_; | 127 constraint->virtual_register_ = constraint->value_; |
| 128 } else if (op->IsImmediate()) { | 128 } else if (op->IsImmediate()) { |
| 129 constraint->type_ = kImmediate; | 129 constraint->type_ = kImmediate; |
| 130 constraint->value_ = ImmediateOperand::cast(op)->index(); | 130 constraint->value_ = ImmediateOperand::cast(op)->index(); |
| 131 } else { | 131 } else { |
| 132 CHECK(op->IsUnallocated()); | 132 CHECK(op->IsUnallocated()); |
| 133 const auto* unallocated = UnallocatedOperand::cast(op); | 133 const auto* unallocated = UnallocatedOperand::cast(op); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 case kSameAsFirst: | 210 case kSameAsFirst: |
| 211 CHECK(false); | 211 CHECK(false); |
| 212 return; | 212 return; |
| 213 } | 213 } |
| 214 } | 214 } |
| 215 | 215 |
| 216 namespace { | 216 namespace { |
| 217 | 217 |
| 218 typedef BasicBlock::RpoNumber Rpo; | 218 typedef BasicBlock::RpoNumber Rpo; |
| 219 | 219 |
| 220 static const int kInvalidVreg = UnallocatedOperand::kInvalidVirtualRegister; | 220 static const int kInvalidVreg = InstructionOperand::kInvalidVirtualRegister; |
| 221 | 221 |
| 222 struct PhiData : public ZoneObject { | 222 struct PhiData : public ZoneObject { |
| 223 PhiData(Rpo definition_rpo, const PhiInstruction* phi, int first_pred_vreg, | 223 PhiData(Rpo definition_rpo, const PhiInstruction* phi, int first_pred_vreg, |
| 224 const PhiData* first_pred_phi, Zone* zone) | 224 const PhiData* first_pred_phi, Zone* zone) |
| 225 : definition_rpo(definition_rpo), | 225 : definition_rpo(definition_rpo), |
| 226 virtual_register(phi->virtual_register()), | 226 virtual_register(phi->virtual_register()), |
| 227 first_pred_vreg(first_pred_vreg), | 227 first_pred_vreg(first_pred_vreg), |
| 228 first_pred_phi(first_pred_phi), | 228 first_pred_phi(first_pred_phi), |
| 229 operands(zone) { | 229 operands(zone) { |
| 230 operands.reserve(phi->operands().size()); | 230 operands.reserve(phi->operands().size()); |
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 int virtual_register = op_constraints[count].virtual_register_; | 662 int virtual_register = op_constraints[count].virtual_register_; |
| 663 current->Define(zone(), instr->OutputAt(i), virtual_register); | 663 current->Define(zone(), instr->OutputAt(i), virtual_register); |
| 664 } | 664 } |
| 665 } | 665 } |
| 666 } | 666 } |
| 667 } | 667 } |
| 668 | 668 |
| 669 } // namespace compiler | 669 } // namespace compiler |
| 670 } // namespace internal | 670 } // namespace internal |
| 671 } // namespace v8 | 671 } // namespace v8 |
| OLD | NEW |