summaryrefslogtreecommitdiff
path: root/chromium/v8/src/compiler/simplified-operator.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/compiler/simplified-operator.h')
-rw-r--r--chromium/v8/src/compiler/simplified-operator.h44
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()); }