diff options
author | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-01-20 09:45:45 -0800 |
---|---|---|
committer | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-01-21 16:53:58 -0800 |
commit | ef4170ea03a80b21b2d8a65ce432efaa370fe2fa (patch) | |
tree | e382b1b38b729cd8155b56b441c3a563914854a3 /deps/v8/src/compiler/register-allocator-verifier.cc | |
parent | 5f6dfab832979999d2f806fc1a2f1c11a25b0f35 (diff) | |
download | node-new-ef4170ea03a80b21b2d8a65ce432efaa370fe2fa.tar.gz |
deps: upgrade to V8 4.8.271.17
Pick up V8 4.8 branch-head. This branch brings in @@isConcatSpreadable,
@@toPrimitive and ToLength ES6 changes. For full details see:
http://v8project.blogspot.de/2015/11/v8-release-48.html
https://github.com/v8/v8/commit/fa163e2
Ref: https://github.com/nodejs/node/pull/4399
PR-URL: https://github.com/nodejs/node/pull/4785
Reviewed-By: bnoordhuis - Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'deps/v8/src/compiler/register-allocator-verifier.cc')
-rw-r--r-- | deps/v8/src/compiler/register-allocator-verifier.cc | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/deps/v8/src/compiler/register-allocator-verifier.cc b/deps/v8/src/compiler/register-allocator-verifier.cc index 0b775d29e1..68862add46 100644 --- a/deps/v8/src/compiler/register-allocator-verifier.cc +++ b/deps/v8/src/compiler/register-allocator-verifier.cc @@ -48,7 +48,7 @@ void VerifyAllocatedGaps(const Instruction* instr) { void RegisterAllocatorVerifier::VerifyInput( const OperandConstraint& constraint) { CHECK_NE(kSameAsFirst, constraint.type_); - if (constraint.type_ != kImmediate) { + if (constraint.type_ != kImmediate && constraint.type_ != kExplicit) { CHECK_NE(InstructionOperand::kInvalidVirtualRegister, constraint.virtual_register_); } @@ -59,6 +59,7 @@ void RegisterAllocatorVerifier::VerifyTemp( const OperandConstraint& constraint) { CHECK_NE(kSameAsFirst, constraint.type_); CHECK_NE(kImmediate, constraint.type_); + CHECK_NE(kExplicit, constraint.type_); CHECK_NE(kConstant, constraint.type_); } @@ -66,6 +67,7 @@ void RegisterAllocatorVerifier::VerifyTemp( void RegisterAllocatorVerifier::VerifyOutput( const OperandConstraint& constraint) { CHECK_NE(kImmediate, constraint.type_); + CHECK_NE(kExplicit, constraint.type_); CHECK_NE(InstructionOperand::kInvalidVirtualRegister, constraint.virtual_register_); } @@ -143,6 +145,8 @@ void RegisterAllocatorVerifier::BuildConstraint(const InstructionOperand* op, constraint->type_ = kConstant; constraint->value_ = ConstantOperand::cast(op)->virtual_register(); constraint->virtual_register_ = constraint->value_; + } else if (op->IsExplicit()) { + constraint->type_ = kExplicit; } else if (op->IsImmediate()) { auto imm = ImmediateOperand::cast(op); int value = imm->type() == ImmediateOperand::INLINE ? imm->inline_value() @@ -160,8 +164,6 @@ void RegisterAllocatorVerifier::BuildConstraint(const InstructionOperand* op, } else { switch (unallocated->extended_policy()) { case UnallocatedOperand::ANY: - CHECK(false); - break; case UnallocatedOperand::NONE: if (sequence()->IsFloat(vreg)) { constraint->type_ = kNoneDouble; @@ -216,20 +218,25 @@ void RegisterAllocatorVerifier::CheckConstraint( case kRegister: CHECK(op->IsRegister()); return; - case kFixedRegister: - CHECK(op->IsRegister()); - CHECK_EQ(RegisterOperand::cast(op)->index(), constraint->value_); - return; case kDoubleRegister: CHECK(op->IsDoubleRegister()); return; + case kExplicit: + CHECK(op->IsExplicit()); + return; + case kFixedRegister: + CHECK(op->IsRegister()); + CHECK_EQ(LocationOperand::cast(op)->GetRegister().code(), + constraint->value_); + return; case kFixedDoubleRegister: CHECK(op->IsDoubleRegister()); - CHECK_EQ(DoubleRegisterOperand::cast(op)->index(), constraint->value_); + CHECK_EQ(LocationOperand::cast(op)->GetDoubleRegister().code(), + constraint->value_); return; case kFixedSlot: CHECK(op->IsStackSlot()); - CHECK_EQ(StackSlotOperand::cast(op)->index(), constraint->value_); + CHECK_EQ(LocationOperand::cast(op)->index(), constraint->value_); return; case kSlot: CHECK(op->IsStackSlot()); @@ -282,7 +289,7 @@ class PhiMap : public ZoneMap<int, PhiData*>, public ZoneObject { struct OperandLess { bool operator()(const InstructionOperand* a, const InstructionOperand* b) const { - return a->CompareModuloType(*b); + return a->CompareCanonicalized(*b); } }; @@ -316,7 +323,7 @@ class OperandMap : public ZoneObject { this->erase(it++); if (it == this->end()) return; } - if (it->first->EqualsModuloType(*o.first)) { + if (it->first->EqualsCanonicalized(*o.first)) { ++it; if (it == this->end()) return; } else { @@ -676,7 +683,10 @@ void RegisterAllocatorVerifier::VerifyGapMoves(BlockMaps* block_maps, const auto op_constraints = instr_constraint.operand_constraints_; size_t count = 0; for (size_t i = 0; i < instr->InputCount(); ++i, ++count) { - if (op_constraints[count].type_ == kImmediate) continue; + if (op_constraints[count].type_ == kImmediate || + op_constraints[count].type_ == kExplicit) { + continue; + } int virtual_register = op_constraints[count].virtual_register_; auto op = instr->InputAt(i); if (!block_maps->IsPhi(virtual_register)) { |