diff options
Diffstat (limited to 'chromium/v8/src/compiler/simplified-operator.h')
-rw-r--r-- | chromium/v8/src/compiler/simplified-operator.h | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/chromium/v8/src/compiler/simplified-operator.h b/chromium/v8/src/compiler/simplified-operator.h index cd66b89ea44..03ca88bc9af 100644 --- a/chromium/v8/src/compiler/simplified-operator.h +++ b/chromium/v8/src/compiler/simplified-operator.h @@ -127,6 +127,13 @@ struct FieldAccess { #endif { DCHECK_GE(offset, 0); + DCHECK_IMPLIES( + machine_type.IsMapWord(), + offset == HeapObject::kMapOffset && base_is_tagged != kUntaggedBase); + DCHECK_IMPLIES(machine_type.IsMapWord(), + (write_barrier_kind == kMapWriteBarrier || + write_barrier_kind == kNoWriteBarrier || + write_barrier_kind == kAssertNoWriteBarrier)); } int tag() const { return base_is_tagged == kTaggedBase ? kHeapObjectTag : 0; } @@ -599,6 +606,30 @@ bool operator==(NumberOperationParameters const&, const NumberOperationParameters& NumberOperationParametersOf(const Operator* op) V8_WARN_UNUSED_RESULT; +class SpeculativeBigIntAsUintNParameters { + public: + SpeculativeBigIntAsUintNParameters(int bits, const FeedbackSource& feedback) + : bits_(bits), feedback_(feedback) { + DCHECK_GE(bits_, 0); + DCHECK_LE(bits_, 64); + } + + int bits() const { return bits_; } + const FeedbackSource& feedback() const { return feedback_; } + + private: + int bits_; + FeedbackSource feedback_; +}; + +size_t hash_value(SpeculativeBigIntAsUintNParameters const&); +V8_EXPORT_PRIVATE std::ostream& operator<<( + std::ostream&, const SpeculativeBigIntAsUintNParameters&); +bool operator==(SpeculativeBigIntAsUintNParameters const&, + SpeculativeBigIntAsUintNParameters const&); +const SpeculativeBigIntAsUintNParameters& SpeculativeBigIntAsUintNParametersOf( + const Operator* op) V8_WARN_UNUSED_RESULT; + int FormalParameterCountOf(const Operator* op) V8_WARN_UNUSED_RESULT; class AllocateParameters { @@ -806,7 +837,8 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final const Operator* SpeculativeBigIntAdd(BigIntOperationHint hint); const Operator* SpeculativeBigIntSubtract(BigIntOperationHint hint); const Operator* SpeculativeBigIntNegate(BigIntOperationHint hint); - const Operator* BigIntAsUintN(int bits); + const Operator* SpeculativeBigIntAsUintN(int bits, + const FeedbackSource& feedback); const Operator* ReferenceEqual(); const Operator* SameValue(); @@ -1054,6 +1086,10 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final // Abort if the value input does not inhabit the given type const Operator* AssertType(Type type); + // Abort if the value does not match the node's computed type after + // SimplifiedLowering. + const Operator* VerifyType(); + const Operator* DateNow(); // Represents the inputs necessary to construct a fast and a slow API call. @@ -1112,7 +1148,7 @@ class FastApiCallNode final : public SimplifiedNodeWrapperBase { public: explicit constexpr FastApiCallNode(Node* node) : SimplifiedNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kFastApiCall); + DCHECK_EQ(IrOpcode::kFastApiCall, node->opcode()); } const FastApiCallParameters& Parameters() const { @@ -1184,7 +1220,7 @@ class TierUpCheckNode final : public SimplifiedNodeWrapperBase { public: explicit constexpr TierUpCheckNode(Node* node) : SimplifiedNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kTierUpCheck); + DCHECK_EQ(IrOpcode::kTierUpCheck, node->opcode()); } #define INPUTS(V) \ @@ -1201,7 +1237,7 @@ class UpdateInterruptBudgetNode final : public SimplifiedNodeWrapperBase { public: explicit constexpr UpdateInterruptBudgetNode(Node* node) : SimplifiedNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kUpdateInterruptBudget); + DCHECK_EQ(IrOpcode::kUpdateInterruptBudget, node->opcode()); } int delta() const { return OpParameter<int>(node()->op()); } |