diff options
Diffstat (limited to 'deps/v8/src/compiler/simplified-operator.cc')
-rw-r--r-- | deps/v8/src/compiler/simplified-operator.cc | 315 |
1 files changed, 244 insertions, 71 deletions
diff --git a/deps/v8/src/compiler/simplified-operator.cc b/deps/v8/src/compiler/simplified-operator.cc index 04bbc7bba8..9978bae122 100644 --- a/deps/v8/src/compiler/simplified-operator.cc +++ b/deps/v8/src/compiler/simplified-operator.cc @@ -149,9 +149,7 @@ CheckFloat64HoleMode CheckFloat64HoleModeOf(const Operator* op) { CheckForMinusZeroMode CheckMinusZeroModeOf(const Operator* op) { DCHECK(op->opcode() == IrOpcode::kChangeFloat64ToTagged || - op->opcode() == IrOpcode::kCheckedInt32Mul || - op->opcode() == IrOpcode::kCheckedFloat64ToInt32 || - op->opcode() == IrOpcode::kCheckedTaggedToInt32); + op->opcode() == IrOpcode::kCheckedInt32Mul); return OpParameter<CheckForMinusZeroMode>(op); } @@ -215,15 +213,20 @@ size_t hash_value(MapsParameterInfo const& p) { return hash_value(p.maps()); } bool operator==(CheckMapsParameters const& lhs, CheckMapsParameters const& rhs) { - return lhs.flags() == rhs.flags() && lhs.maps() == rhs.maps(); + return lhs.flags() == rhs.flags() && lhs.maps() == rhs.maps() && + lhs.feedback() == rhs.feedback(); } size_t hash_value(CheckMapsParameters const& p) { - return base::hash_combine(p.flags(), p.maps()); + return base::hash_combine(p.flags(), p.maps(), p.feedback()); } std::ostream& operator<<(std::ostream& os, CheckMapsParameters const& p) { - return os << p.flags() << p.maps_info(); + os << p.flags() << p.maps_info(); + if (p.feedback().IsValid()) { + os << "; " << p.feedback(); + } + return os; } CheckMapsParameters const& CheckMapsParametersOf(Operator const* op) { @@ -256,8 +259,7 @@ std::ostream& operator<<(std::ostream& os, CheckTaggedInputMode mode) { } CheckTaggedInputMode CheckTaggedInputModeOf(const Operator* op) { - DCHECK(op->opcode() == IrOpcode::kCheckedTaggedToFloat64 || - op->opcode() == IrOpcode::kCheckedTruncateTaggedToWord32); + DCHECK(op->opcode() == IrOpcode::kCheckedTaggedToFloat64); return OpParameter<CheckTaggedInputMode>(op); } @@ -271,9 +273,28 @@ std::ostream& operator<<(std::ostream& os, GrowFastElementsMode mode) { UNREACHABLE(); } -GrowFastElementsMode GrowFastElementsModeOf(const Operator* op) { +bool operator==(const GrowFastElementsParameters& lhs, + const GrowFastElementsParameters& rhs) { + return lhs.mode() == rhs.mode() && lhs.feedback() == rhs.feedback(); +} + +inline size_t hash_value(const GrowFastElementsParameters& params) { + return base::hash_combine(params.mode(), params.feedback()); +} + +std::ostream& operator<<(std::ostream& os, + const GrowFastElementsParameters& params) { + os << params.mode(); + if (params.feedback().IsValid()) { + os << params.feedback(); + } + return os; +} + +const GrowFastElementsParameters& GrowFastElementsParametersOf( + const Operator* op) { DCHECK_EQ(IrOpcode::kMaybeGrowFastElements, op->opcode()); - return OpParameter<GrowFastElementsMode>(op); + return OpParameter<GrowFastElementsParameters>(op); } bool operator==(ElementsTransition const& lhs, ElementsTransition const& rhs) { @@ -520,9 +541,9 @@ UnicodeEncoding UnicodeEncodingOf(const Operator* op) { return OpParameter<UnicodeEncoding>(op); } -BailoutReason BailoutReasonOf(const Operator* op) { +AbortReason AbortReasonOf(const Operator* op) { DCHECK_EQ(IrOpcode::kRuntimeAbort, op->opcode()); - return OpParameter<BailoutReason>(op); + return static_cast<AbortReason>(OpParameter<int>(op)); } DeoptimizeReason DeoptimizeReasonOf(const Operator* op) { @@ -530,6 +551,54 @@ DeoptimizeReason DeoptimizeReasonOf(const Operator* op) { return OpParameter<DeoptimizeReason>(op); } +const CheckTaggedInputParameters& CheckTaggedInputParametersOf( + const Operator* op) { + DCHECK(op->opcode() == IrOpcode::kCheckedTruncateTaggedToWord32); + return OpParameter<CheckTaggedInputParameters>(op); +} + +std::ostream& operator<<(std::ostream& os, + const CheckTaggedInputParameters& params) { + os << params.mode(); + if (params.feedback().IsValid()) { + os << "; " << params.feedback(); + } + return os; +} + +size_t hash_value(const CheckTaggedInputParameters& params) { + return base::hash_combine(params.mode(), params.feedback()); +} + +bool operator==(CheckTaggedInputParameters const& lhs, + CheckTaggedInputParameters const& rhs) { + return lhs.mode() == rhs.mode() && lhs.feedback() == rhs.feedback(); +} + +const CheckMinusZeroParameters& CheckMinusZeroParametersOf(const Operator* op) { + DCHECK(IrOpcode::kCheckedTaggedToInt32 == op->opcode() || + IrOpcode::kCheckedFloat64ToInt32 == op->opcode()); + return OpParameter<CheckMinusZeroParameters>(op); +} + +std::ostream& operator<<(std::ostream& os, + const CheckMinusZeroParameters& params) { + os << params.mode(); + if (params.feedback().IsValid()) { + os << "; " << params.feedback(); + } + return os; +} + +size_t hash_value(const CheckMinusZeroParameters& params) { + return base::hash_combine(params.mode(), params.feedback()); +} + +bool operator==(CheckMinusZeroParameters const& lhs, + CheckMinusZeroParameters const& rhs) { + return lhs.mode() == rhs.mode() && lhs.feedback() == rhs.feedback(); +} + #define PURE_OP_LIST(V) \ V(BooleanNot, Operator::kNoProperties, 1, 0) \ V(NumberEqual, Operator::kCommutative, 2, 0) \ @@ -581,6 +650,7 @@ DeoptimizeReason DeoptimizeReasonOf(const Operator* op) { V(NumberTrunc, Operator::kNoProperties, 1, 0) \ V(NumberToBoolean, Operator::kNoProperties, 1, 0) \ V(NumberToInt32, Operator::kNoProperties, 1, 0) \ + V(NumberToString, Operator::kNoProperties, 1, 0) \ V(NumberToUint32, Operator::kNoProperties, 1, 0) \ V(NumberToUint8Clamped, Operator::kNoProperties, 1, 0) \ V(NumberSilenceNaN, Operator::kNoProperties, 1, 0) \ @@ -588,8 +658,11 @@ DeoptimizeReason DeoptimizeReasonOf(const Operator* op) { V(StringCharAt, Operator::kNoProperties, 2, 1) \ V(StringCharCodeAt, Operator::kNoProperties, 2, 1) \ V(SeqStringCharCodeAt, Operator::kNoProperties, 2, 1) \ + V(StringCodePointAt, Operator::kNoProperties, 2, 1) \ + V(SeqStringCodePointAt, Operator::kNoProperties, 2, 1) \ V(StringFromCharCode, Operator::kNoProperties, 1, 0) \ V(StringIndexOf, Operator::kNoProperties, 3, 0) \ + V(StringLength, Operator::kNoProperties, 1, 0) \ V(StringToLowerCaseIntl, Operator::kNoProperties, 1, 0) \ V(StringToUpperCaseIntl, Operator::kNoProperties, 1, 0) \ V(TypeOf, Operator::kNoProperties, 1, 1) \ @@ -626,6 +699,7 @@ DeoptimizeReason DeoptimizeReasonOf(const Operator* op) { V(ObjectIsString, Operator::kNoProperties, 1, 0) \ V(ObjectIsSymbol, Operator::kNoProperties, 1, 0) \ V(ObjectIsUndetectable, Operator::kNoProperties, 1, 0) \ + V(NumberIsFloat64Hole, Operator::kNoProperties, 1, 0) \ V(ConvertTaggedHoleToUndefined, Operator::kNoProperties, 1, 0) \ V(SameValue, Operator::kCommutative, 2, 0) \ V(ReferenceEqual, Operator::kCommutative, 2, 0) \ @@ -633,6 +707,7 @@ DeoptimizeReason DeoptimizeReasonOf(const Operator* op) { V(StringLessThan, Operator::kNoProperties, 2, 0) \ V(StringLessThanOrEqual, Operator::kNoProperties, 2, 0) \ V(ToBoolean, Operator::kNoProperties, 1, 0) \ + V(NewConsString, Operator::kNoProperties, 3, 0) \ V(MaskIndexWithBound, Operator::kNoProperties, 2, 0) #define SPECULATIVE_NUMBER_BINOP_LIST(V) \ @@ -642,30 +717,32 @@ DeoptimizeReason DeoptimizeReasonOf(const Operator* op) { V(SpeculativeNumberLessThanOrEqual) #define CHECKED_OP_LIST(V) \ - V(CheckBounds, 2, 1) \ + V(CheckEqualsInternalizedString, 2, 0) \ + V(CheckEqualsSymbol, 2, 0) \ V(CheckHeapObject, 1, 1) \ V(CheckInternalizedString, 1, 1) \ - V(CheckNumber, 1, 1) \ + V(CheckNotTaggedHole, 1, 1) \ V(CheckReceiver, 1, 1) \ - V(CheckSmi, 1, 1) \ - V(CheckString, 1, 1) \ V(CheckSeqString, 1, 1) \ V(CheckSymbol, 1, 1) \ - V(CheckNotTaggedHole, 1, 1) \ - V(CheckEqualsInternalizedString, 2, 0) \ - V(CheckEqualsSymbol, 2, 0) \ V(CheckedInt32Add, 2, 1) \ - V(CheckedInt32Sub, 2, 1) \ V(CheckedInt32Div, 2, 1) \ V(CheckedInt32Mod, 2, 1) \ + V(CheckedInt32Sub, 2, 1) \ V(CheckedUint32Div, 2, 1) \ - V(CheckedUint32Mod, 2, 1) \ - V(CheckedUint32ToInt32, 1, 1) \ - V(CheckedUint32ToTaggedSigned, 1, 1) \ + V(CheckedUint32Mod, 2, 1) + +#define CHECKED_WITH_FEEDBACK_OP_LIST(V) \ + V(CheckBounds, 2, 1) \ + V(CheckNumber, 1, 1) \ + V(CheckSmi, 1, 1) \ + V(CheckString, 1, 1) \ V(CheckedInt32ToTaggedSigned, 1, 1) \ V(CheckedTaggedSignedToInt32, 1, 1) \ + V(CheckedTaggedToTaggedPointer, 1, 1) \ V(CheckedTaggedToTaggedSigned, 1, 1) \ - V(CheckedTaggedToTaggedPointer, 1, 1) + V(CheckedUint32ToInt32, 1, 1) \ + V(CheckedUint32ToTaggedSigned, 1, 1) struct SimplifiedOperatorGlobalCache final { #define PURE(Name, properties, value_input_count, control_input_count) \ @@ -689,6 +766,18 @@ struct SimplifiedOperatorGlobalCache final { CHECKED_OP_LIST(CHECKED) #undef CHECKED +#define CHECKED_WITH_FEEDBACK(Name, value_input_count, value_output_count) \ + struct Name##Operator final : public Operator1<CheckParameters> { \ + Name##Operator() \ + : Operator1<CheckParameters>( \ + IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, \ + #Name, value_input_count, 1, 1, value_output_count, 1, 0, \ + CheckParameters(VectorSlotPair())) {} \ + }; \ + Name##Operator k##Name; + CHECKED_WITH_FEEDBACK_OP_LIST(CHECKED_WITH_FEEDBACK) +#undef CHECKED_WITH_FEEDBACK + template <DeoptimizeReason kDeoptimizeReason> struct CheckIfOperator final : public Operator1<DeoptimizeReason> { CheckIfOperator() @@ -772,12 +861,13 @@ struct SimplifiedOperatorGlobalCache final { template <CheckForMinusZeroMode kMode> struct CheckedFloat64ToInt32Operator final - : public Operator1<CheckForMinusZeroMode> { + : public Operator1<CheckMinusZeroParameters> { CheckedFloat64ToInt32Operator() - : Operator1<CheckForMinusZeroMode>( + : Operator1<CheckMinusZeroParameters>( IrOpcode::kCheckedFloat64ToInt32, Operator::kFoldable | Operator::kNoThrow, "CheckedFloat64ToInt32", - 1, 1, 1, 1, 1, 0, kMode) {} + 1, 1, 1, 1, 1, 0, + CheckMinusZeroParameters(kMode, VectorSlotPair())) {} }; CheckedFloat64ToInt32Operator<CheckForMinusZeroMode::kCheckForMinusZero> kCheckedFloat64ToInt32CheckForMinusZeroOperator; @@ -786,12 +876,13 @@ struct SimplifiedOperatorGlobalCache final { template <CheckForMinusZeroMode kMode> struct CheckedTaggedToInt32Operator final - : public Operator1<CheckForMinusZeroMode> { + : public Operator1<CheckMinusZeroParameters> { CheckedTaggedToInt32Operator() - : Operator1<CheckForMinusZeroMode>( + : Operator1<CheckMinusZeroParameters>( IrOpcode::kCheckedTaggedToInt32, Operator::kFoldable | Operator::kNoThrow, "CheckedTaggedToInt32", - 1, 1, 1, 1, 1, 0, kMode) {} + 1, 1, 1, 1, 1, 0, + CheckMinusZeroParameters(kMode, VectorSlotPair())) {} }; CheckedTaggedToInt32Operator<CheckForMinusZeroMode::kCheckForMinusZero> kCheckedTaggedToInt32CheckForMinusZeroOperator; @@ -814,12 +905,13 @@ struct SimplifiedOperatorGlobalCache final { template <CheckTaggedInputMode kMode> struct CheckedTruncateTaggedToWord32Operator final - : public Operator1<CheckTaggedInputMode> { + : public Operator1<CheckTaggedInputParameters> { CheckedTruncateTaggedToWord32Operator() - : Operator1<CheckTaggedInputMode>( + : Operator1<CheckTaggedInputParameters>( IrOpcode::kCheckedTruncateTaggedToWord32, Operator::kFoldable | Operator::kNoThrow, - "CheckedTruncateTaggedToWord32", 1, 1, 1, 1, 1, 0, kMode) {} + "CheckedTruncateTaggedToWord32", 1, 1, 1, 1, 1, 0, + CheckTaggedInputParameters(kMode, VectorSlotPair())) {} }; CheckedTruncateTaggedToWord32Operator<CheckTaggedInputMode::kNumber> kCheckedTruncateTaggedToWord32NumberOperator; @@ -867,6 +959,20 @@ struct SimplifiedOperatorGlobalCache final { }; EnsureWritableFastElementsOperator kEnsureWritableFastElements; + template <GrowFastElementsMode kMode> + struct GrowFastElementsOperator final + : public Operator1<GrowFastElementsParameters> { + GrowFastElementsOperator() + : Operator1(IrOpcode::kMaybeGrowFastElements, Operator::kNoThrow, + "MaybeGrowFastElements", 4, 1, 1, 1, 1, 0, + GrowFastElementsParameters(kMode, VectorSlotPair())) {} + }; + + GrowFastElementsOperator<GrowFastElementsMode::kDoubleElements> + kGrowFastElementsOperatorDoubleElements; + GrowFastElementsOperator<GrowFastElementsMode::kSmiOrObjectElements> + kGrowFastElementsOperatorSmiOrObjectElements; + struct LoadFieldByIndexOperator final : public Operator { LoadFieldByIndexOperator() : Operator( // -- @@ -934,13 +1040,38 @@ GET_FROM_CACHE(FindOrderedHashMapEntryForInt32Key) GET_FROM_CACHE(LoadFieldByIndex) #undef GET_FROM_CACHE -const Operator* SimplifiedOperatorBuilder::RuntimeAbort(BailoutReason reason) { - return new (zone()) Operator1<BailoutReason>( // -- - IrOpcode::kRuntimeAbort, // opcode - Operator::kNoThrow | Operator::kNoDeopt, // flags - "RuntimeAbort", // name - 0, 1, 1, 0, 1, 0, // counts - reason); // parameter +#define GET_FROM_CACHE_WITH_FEEDBACK(Name, value_input_count, \ + value_output_count) \ + const Operator* SimplifiedOperatorBuilder::Name( \ + const VectorSlotPair& feedback) { \ + if (!feedback.IsValid()) { \ + return &cache_.k##Name; \ + } \ + return new (zone()) Operator1<CheckParameters>( \ + IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, #Name, \ + value_input_count, 1, 1, value_output_count, 1, 0, \ + CheckParameters(feedback)); \ + } +CHECKED_WITH_FEEDBACK_OP_LIST(GET_FROM_CACHE_WITH_FEEDBACK) +#undef GET_FROM_CACHE_WITH_FEEDBACK + +bool IsCheckedWithFeedback(const Operator* op) { +#define CASE(Name, ...) case IrOpcode::k##Name: + switch (op->opcode()) { + CHECKED_WITH_FEEDBACK_OP_LIST(CASE) return true; + default: + return false; + } +#undef CASE +} + +const Operator* SimplifiedOperatorBuilder::RuntimeAbort(AbortReason reason) { + return new (zone()) Operator1<int>( // -- + IrOpcode::kRuntimeAbort, // opcode + Operator::kNoThrow | Operator::kNoDeopt, // flags + "RuntimeAbort", // name + 0, 1, 1, 0, 1, 0, // counts + static_cast<int>(reason)); // parameter } const Operator* SimplifiedOperatorBuilder::CheckIf(DeoptimizeReason reason) { @@ -977,25 +1108,35 @@ const Operator* SimplifiedOperatorBuilder::CheckedInt32Mul( } const Operator* SimplifiedOperatorBuilder::CheckedFloat64ToInt32( - CheckForMinusZeroMode mode) { - switch (mode) { - case CheckForMinusZeroMode::kCheckForMinusZero: - return &cache_.kCheckedFloat64ToInt32CheckForMinusZeroOperator; - case CheckForMinusZeroMode::kDontCheckForMinusZero: - return &cache_.kCheckedFloat64ToInt32DontCheckForMinusZeroOperator; + CheckForMinusZeroMode mode, const VectorSlotPair& feedback) { + if (!feedback.IsValid()) { + switch (mode) { + case CheckForMinusZeroMode::kCheckForMinusZero: + return &cache_.kCheckedFloat64ToInt32CheckForMinusZeroOperator; + case CheckForMinusZeroMode::kDontCheckForMinusZero: + return &cache_.kCheckedFloat64ToInt32DontCheckForMinusZeroOperator; + } } - UNREACHABLE(); + return new (zone()) Operator1<CheckMinusZeroParameters>( + IrOpcode::kCheckedFloat64ToInt32, + Operator::kFoldable | Operator::kNoThrow, "CheckedFloat64ToInt32", 1, 1, + 1, 1, 1, 0, CheckMinusZeroParameters(mode, feedback)); } const Operator* SimplifiedOperatorBuilder::CheckedTaggedToInt32( - CheckForMinusZeroMode mode) { - switch (mode) { - case CheckForMinusZeroMode::kCheckForMinusZero: - return &cache_.kCheckedTaggedToInt32CheckForMinusZeroOperator; - case CheckForMinusZeroMode::kDontCheckForMinusZero: - return &cache_.kCheckedTaggedToInt32DontCheckForMinusZeroOperator; + CheckForMinusZeroMode mode, const VectorSlotPair& feedback) { + if (!feedback.IsValid()) { + switch (mode) { + case CheckForMinusZeroMode::kCheckForMinusZero: + return &cache_.kCheckedTaggedToInt32CheckForMinusZeroOperator; + case CheckForMinusZeroMode::kDontCheckForMinusZero: + return &cache_.kCheckedTaggedToInt32DontCheckForMinusZeroOperator; + } } - UNREACHABLE(); + return new (zone()) Operator1<CheckMinusZeroParameters>( + IrOpcode::kCheckedTaggedToInt32, Operator::kFoldable | Operator::kNoThrow, + "CheckedTaggedToInt32", 1, 1, 1, 1, 1, 0, + CheckMinusZeroParameters(mode, feedback)); } const Operator* SimplifiedOperatorBuilder::CheckedTaggedToFloat64( @@ -1010,19 +1151,25 @@ const Operator* SimplifiedOperatorBuilder::CheckedTaggedToFloat64( } const Operator* SimplifiedOperatorBuilder::CheckedTruncateTaggedToWord32( - CheckTaggedInputMode mode) { - switch (mode) { - case CheckTaggedInputMode::kNumber: - return &cache_.kCheckedTruncateTaggedToWord32NumberOperator; - case CheckTaggedInputMode::kNumberOrOddball: - return &cache_.kCheckedTruncateTaggedToWord32NumberOrOddballOperator; + CheckTaggedInputMode mode, const VectorSlotPair& feedback) { + if (!feedback.IsValid()) { + switch (mode) { + case CheckTaggedInputMode::kNumber: + return &cache_.kCheckedTruncateTaggedToWord32NumberOperator; + case CheckTaggedInputMode::kNumberOrOddball: + return &cache_.kCheckedTruncateTaggedToWord32NumberOrOddballOperator; + } } - UNREACHABLE(); + return new (zone()) Operator1<CheckTaggedInputParameters>( + IrOpcode::kCheckedTruncateTaggedToWord32, + Operator::kFoldable | Operator::kNoThrow, "CheckedTruncateTaggedToWord32", + 1, 1, 1, 1, 1, 0, CheckTaggedInputParameters(mode, feedback)); } -const Operator* SimplifiedOperatorBuilder::CheckMaps(CheckMapsFlags flags, - ZoneHandleSet<Map> maps) { - CheckMapsParameters const parameters(flags, maps); +const Operator* SimplifiedOperatorBuilder::CheckMaps( + CheckMapsFlags flags, ZoneHandleSet<Map> maps, + const VectorSlotPair& feedback) { + CheckMapsParameters const parameters(flags, maps, feedback); return new (zone()) Operator1<CheckMapsParameters>( // -- IrOpcode::kCheckMaps, // opcode Operator::kNoThrow | Operator::kNoWrite, // flags @@ -1096,13 +1243,21 @@ const Operator* SimplifiedOperatorBuilder::EnsureWritableFastElements() { } const Operator* SimplifiedOperatorBuilder::MaybeGrowFastElements( - GrowFastElementsMode mode) { - return new (zone()) Operator1<GrowFastElementsMode>( // -- - IrOpcode::kMaybeGrowFastElements, // opcode - Operator::kNoThrow, // flags - "MaybeGrowFastElements", // name - 4, 1, 1, 1, 1, 0, // counts - mode); // parameter + GrowFastElementsMode mode, const VectorSlotPair& feedback) { + if (!feedback.IsValid()) { + switch (mode) { + case GrowFastElementsMode::kDoubleElements: + return &cache_.kGrowFastElementsOperatorDoubleElements; + case GrowFastElementsMode::kSmiOrObjectElements: + return &cache_.kGrowFastElementsOperatorSmiOrObjectElements; + } + } + return new (zone()) Operator1<GrowFastElementsParameters>( // -- + IrOpcode::kMaybeGrowFastElements, // opcode + Operator::kNoThrow, // flags + "MaybeGrowFastElements", // name + 4, 1, 1, 1, 1, 0, // counts + GrowFastElementsParameters(mode, feedback)); // parameter } const Operator* SimplifiedOperatorBuilder::TransitionElementsKind( @@ -1160,6 +1315,23 @@ bool IsRestLengthOf(const Operator* op) { return OpParameter<ArgumentsLengthParameters>(op).is_rest_length; } +bool operator==(CheckParameters const& lhs, CheckParameters const& rhs) { + return lhs.feedback() == rhs.feedback(); +} + +size_t hash_value(CheckParameters const& p) { return hash_value(p.feedback()); } + +std::ostream& operator<<(std::ostream& os, CheckParameters const& p) { + return os << p.feedback(); +} + +CheckParameters const& CheckParametersOf(Operator const* op) { +#define MAKE_OR(name, arg2, arg3) op->opcode() == IrOpcode::k##name || + CHECK((CHECKED_WITH_FEEDBACK_OP_LIST(MAKE_OR) false)); +#undef MAKE_OR + return OpParameter<CheckParameters>(op); +} + const Operator* SimplifiedOperatorBuilder::NewDoubleElements( PretenureFlag pretenure) { return new (zone()) Operator1<PretenureFlag>( // -- @@ -1292,6 +1464,7 @@ const Operator* SimplifiedOperatorBuilder::TransitionAndStoreNonNumberElement( #undef PURE_OP_LIST #undef SPECULATIVE_NUMBER_BINOP_LIST +#undef CHECKED_WITH_FEEDBACK_OP_LIST #undef CHECKED_OP_LIST #undef ACCESS_OP_LIST |