| Index: src/compiler/simplified-operator.cc
 | 
| diff --git a/src/compiler/simplified-operator.cc b/src/compiler/simplified-operator.cc
 | 
| index f2649994870cb844fba63f2d06d77c4430237e3a..b20e5937a59cdc37a4908f68a18cb72a1af7431d 100644
 | 
| --- a/src/compiler/simplified-operator.cc
 | 
| +++ b/src/compiler/simplified-operator.cc
 | 
| @@ -229,26 +229,6 @@ std::ostream& operator<<(std::ostream& os, CheckForMinusZeroMode mode) {
 | 
|    return os;
 | 
|  }
 | 
|  
 | 
| -size_t hash_value(CheckTaggedHoleMode mode) {
 | 
| -  return static_cast<size_t>(mode);
 | 
| -}
 | 
| -
 | 
| -std::ostream& operator<<(std::ostream& os, CheckTaggedHoleMode mode) {
 | 
| -  switch (mode) {
 | 
| -    case CheckTaggedHoleMode::kConvertHoleToUndefined:
 | 
| -      return os << "convert-hole-to-undefined";
 | 
| -    case CheckTaggedHoleMode::kNeverReturnHole:
 | 
| -      return os << "never-return-hole";
 | 
| -  }
 | 
| -  UNREACHABLE();
 | 
| -  return os;
 | 
| -}
 | 
| -
 | 
| -CheckTaggedHoleMode CheckTaggedHoleModeOf(const Operator* op) {
 | 
| -  DCHECK_EQ(IrOpcode::kCheckTaggedHole, op->opcode());
 | 
| -  return OpParameter<CheckTaggedHoleMode>(op);
 | 
| -}
 | 
| -
 | 
|  size_t hash_value(CheckTaggedInputMode mode) {
 | 
|    return static_cast<size_t>(mode);
 | 
|  }
 | 
| @@ -351,84 +331,85 @@ NumberOperationHint NumberOperationHintOf(const Operator* op) {
 | 
|    return OpParameter<NumberOperationHint>(op);
 | 
|  }
 | 
|  
 | 
| -#define PURE_OP_LIST(V)                                       \
 | 
| -  V(BooleanNot, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberEqual, Operator::kCommutative, 2, 0)                \
 | 
| -  V(NumberLessThan, Operator::kNoProperties, 2, 0)            \
 | 
| -  V(NumberLessThanOrEqual, Operator::kNoProperties, 2, 0)     \
 | 
| -  V(NumberAdd, Operator::kCommutative, 2, 0)                  \
 | 
| -  V(NumberSubtract, Operator::kNoProperties, 2, 0)            \
 | 
| -  V(NumberMultiply, Operator::kCommutative, 2, 0)             \
 | 
| -  V(NumberDivide, Operator::kNoProperties, 2, 0)              \
 | 
| -  V(NumberModulus, Operator::kNoProperties, 2, 0)             \
 | 
| -  V(NumberBitwiseOr, Operator::kCommutative, 2, 0)            \
 | 
| -  V(NumberBitwiseXor, Operator::kCommutative, 2, 0)           \
 | 
| -  V(NumberBitwiseAnd, Operator::kCommutative, 2, 0)           \
 | 
| -  V(NumberShiftLeft, Operator::kNoProperties, 2, 0)           \
 | 
| -  V(NumberShiftRight, Operator::kNoProperties, 2, 0)          \
 | 
| -  V(NumberShiftRightLogical, Operator::kNoProperties, 2, 0)   \
 | 
| -  V(NumberImul, Operator::kCommutative, 2, 0)                 \
 | 
| -  V(NumberAbs, Operator::kNoProperties, 1, 0)                 \
 | 
| -  V(NumberClz32, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberCeil, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberFloor, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberFround, Operator::kNoProperties, 1, 0)              \
 | 
| -  V(NumberAcos, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberAcosh, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberAsin, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberAsinh, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberAtan, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberAtan2, Operator::kNoProperties, 2, 0)               \
 | 
| -  V(NumberAtanh, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberCbrt, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberCos, Operator::kNoProperties, 1, 0)                 \
 | 
| -  V(NumberCosh, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberExp, Operator::kNoProperties, 1, 0)                 \
 | 
| -  V(NumberExpm1, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberLog, Operator::kNoProperties, 1, 0)                 \
 | 
| -  V(NumberLog1p, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberLog10, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberLog2, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberMax, Operator::kNoProperties, 2, 0)                 \
 | 
| -  V(NumberMin, Operator::kNoProperties, 2, 0)                 \
 | 
| -  V(NumberPow, Operator::kNoProperties, 2, 0)                 \
 | 
| -  V(NumberRound, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberSign, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberSin, Operator::kNoProperties, 1, 0)                 \
 | 
| -  V(NumberSinh, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberSqrt, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberTan, Operator::kNoProperties, 1, 0)                 \
 | 
| -  V(NumberTanh, Operator::kNoProperties, 1, 0)                \
 | 
| -  V(NumberTrunc, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(NumberToInt32, Operator::kNoProperties, 1, 0)             \
 | 
| -  V(NumberToUint32, Operator::kNoProperties, 1, 0)            \
 | 
| -  V(NumberSilenceNaN, Operator::kNoProperties, 1, 0)          \
 | 
| -  V(StringCharCodeAt, Operator::kNoProperties, 2, 1)          \
 | 
| -  V(StringFromCharCode, Operator::kNoProperties, 1, 0)        \
 | 
| -  V(PlainPrimitiveToNumber, Operator::kNoProperties, 1, 0)    \
 | 
| -  V(PlainPrimitiveToWord32, Operator::kNoProperties, 1, 0)    \
 | 
| -  V(PlainPrimitiveToFloat64, Operator::kNoProperties, 1, 0)   \
 | 
| -  V(ChangeTaggedSignedToInt32, Operator::kNoProperties, 1, 0) \
 | 
| -  V(ChangeTaggedToInt32, Operator::kNoProperties, 1, 0)       \
 | 
| -  V(ChangeTaggedToUint32, Operator::kNoProperties, 1, 0)      \
 | 
| -  V(ChangeTaggedToFloat64, Operator::kNoProperties, 1, 0)     \
 | 
| -  V(ChangeInt31ToTaggedSigned, Operator::kNoProperties, 1, 0) \
 | 
| -  V(ChangeInt32ToTagged, Operator::kNoProperties, 1, 0)       \
 | 
| -  V(ChangeUint32ToTagged, Operator::kNoProperties, 1, 0)      \
 | 
| -  V(ChangeFloat64ToTagged, Operator::kNoProperties, 1, 0)     \
 | 
| -  V(ChangeTaggedToBit, Operator::kNoProperties, 1, 0)         \
 | 
| -  V(ChangeBitToTagged, Operator::kNoProperties, 1, 0)         \
 | 
| -  V(TruncateTaggedToWord32, Operator::kNoProperties, 1, 0)    \
 | 
| -  V(TruncateTaggedToFloat64, Operator::kNoProperties, 1, 0)   \
 | 
| -  V(ObjectIsCallable, Operator::kNoProperties, 1, 0)          \
 | 
| -  V(ObjectIsNumber, Operator::kNoProperties, 1, 0)            \
 | 
| -  V(ObjectIsReceiver, Operator::kNoProperties, 1, 0)          \
 | 
| -  V(ObjectIsSmi, Operator::kNoProperties, 1, 0)               \
 | 
| -  V(ObjectIsString, Operator::kNoProperties, 1, 0)            \
 | 
| -  V(ObjectIsUndetectable, Operator::kNoProperties, 1, 0)      \
 | 
| -  V(ReferenceEqual, Operator::kCommutative, 2, 0)             \
 | 
| -  V(StringEqual, Operator::kCommutative, 2, 0)                \
 | 
| -  V(StringLessThan, Operator::kNoProperties, 2, 0)            \
 | 
| +#define PURE_OP_LIST(V)                                          \
 | 
| +  V(BooleanNot, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberEqual, Operator::kCommutative, 2, 0)                   \
 | 
| +  V(NumberLessThan, Operator::kNoProperties, 2, 0)               \
 | 
| +  V(NumberLessThanOrEqual, Operator::kNoProperties, 2, 0)        \
 | 
| +  V(NumberAdd, Operator::kCommutative, 2, 0)                     \
 | 
| +  V(NumberSubtract, Operator::kNoProperties, 2, 0)               \
 | 
| +  V(NumberMultiply, Operator::kCommutative, 2, 0)                \
 | 
| +  V(NumberDivide, Operator::kNoProperties, 2, 0)                 \
 | 
| +  V(NumberModulus, Operator::kNoProperties, 2, 0)                \
 | 
| +  V(NumberBitwiseOr, Operator::kCommutative, 2, 0)               \
 | 
| +  V(NumberBitwiseXor, Operator::kCommutative, 2, 0)              \
 | 
| +  V(NumberBitwiseAnd, Operator::kCommutative, 2, 0)              \
 | 
| +  V(NumberShiftLeft, Operator::kNoProperties, 2, 0)              \
 | 
| +  V(NumberShiftRight, Operator::kNoProperties, 2, 0)             \
 | 
| +  V(NumberShiftRightLogical, Operator::kNoProperties, 2, 0)      \
 | 
| +  V(NumberImul, Operator::kCommutative, 2, 0)                    \
 | 
| +  V(NumberAbs, Operator::kNoProperties, 1, 0)                    \
 | 
| +  V(NumberClz32, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberCeil, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberFloor, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberFround, Operator::kNoProperties, 1, 0)                 \
 | 
| +  V(NumberAcos, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberAcosh, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberAsin, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberAsinh, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberAtan, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberAtan2, Operator::kNoProperties, 2, 0)                  \
 | 
| +  V(NumberAtanh, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberCbrt, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberCos, Operator::kNoProperties, 1, 0)                    \
 | 
| +  V(NumberCosh, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberExp, Operator::kNoProperties, 1, 0)                    \
 | 
| +  V(NumberExpm1, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberLog, Operator::kNoProperties, 1, 0)                    \
 | 
| +  V(NumberLog1p, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberLog10, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberLog2, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberMax, Operator::kNoProperties, 2, 0)                    \
 | 
| +  V(NumberMin, Operator::kNoProperties, 2, 0)                    \
 | 
| +  V(NumberPow, Operator::kNoProperties, 2, 0)                    \
 | 
| +  V(NumberRound, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberSign, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberSin, Operator::kNoProperties, 1, 0)                    \
 | 
| +  V(NumberSinh, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberSqrt, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberTan, Operator::kNoProperties, 1, 0)                    \
 | 
| +  V(NumberTanh, Operator::kNoProperties, 1, 0)                   \
 | 
| +  V(NumberTrunc, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(NumberToInt32, Operator::kNoProperties, 1, 0)                \
 | 
| +  V(NumberToUint32, Operator::kNoProperties, 1, 0)               \
 | 
| +  V(NumberSilenceNaN, Operator::kNoProperties, 1, 0)             \
 | 
| +  V(StringCharCodeAt, Operator::kNoProperties, 2, 1)             \
 | 
| +  V(StringFromCharCode, Operator::kNoProperties, 1, 0)           \
 | 
| +  V(PlainPrimitiveToNumber, Operator::kNoProperties, 1, 0)       \
 | 
| +  V(PlainPrimitiveToWord32, Operator::kNoProperties, 1, 0)       \
 | 
| +  V(PlainPrimitiveToFloat64, Operator::kNoProperties, 1, 0)      \
 | 
| +  V(ChangeTaggedSignedToInt32, Operator::kNoProperties, 1, 0)    \
 | 
| +  V(ChangeTaggedToInt32, Operator::kNoProperties, 1, 0)          \
 | 
| +  V(ChangeTaggedToUint32, Operator::kNoProperties, 1, 0)         \
 | 
| +  V(ChangeTaggedToFloat64, Operator::kNoProperties, 1, 0)        \
 | 
| +  V(ChangeInt31ToTaggedSigned, Operator::kNoProperties, 1, 0)    \
 | 
| +  V(ChangeInt32ToTagged, Operator::kNoProperties, 1, 0)          \
 | 
| +  V(ChangeUint32ToTagged, Operator::kNoProperties, 1, 0)         \
 | 
| +  V(ChangeFloat64ToTagged, Operator::kNoProperties, 1, 0)        \
 | 
| +  V(ChangeTaggedToBit, Operator::kNoProperties, 1, 0)            \
 | 
| +  V(ChangeBitToTagged, Operator::kNoProperties, 1, 0)            \
 | 
| +  V(TruncateTaggedToWord32, Operator::kNoProperties, 1, 0)       \
 | 
| +  V(TruncateTaggedToFloat64, Operator::kNoProperties, 1, 0)      \
 | 
| +  V(ObjectIsCallable, Operator::kNoProperties, 1, 0)             \
 | 
| +  V(ObjectIsNumber, Operator::kNoProperties, 1, 0)               \
 | 
| +  V(ObjectIsReceiver, Operator::kNoProperties, 1, 0)             \
 | 
| +  V(ObjectIsSmi, Operator::kNoProperties, 1, 0)                  \
 | 
| +  V(ObjectIsString, Operator::kNoProperties, 1, 0)               \
 | 
| +  V(ObjectIsUndetectable, Operator::kNoProperties, 1, 0)         \
 | 
| +  V(ConvertTaggedHoleToUndefined, Operator::kNoProperties, 1, 0) \
 | 
| +  V(ReferenceEqual, Operator::kCommutative, 2, 0)                \
 | 
| +  V(StringEqual, Operator::kCommutative, 2, 0)                   \
 | 
| +  V(StringLessThan, Operator::kNoProperties, 2, 0)               \
 | 
|    V(StringLessThanOrEqual, Operator::kNoProperties, 2, 0)
 | 
|  
 | 
|  #define SPECULATIVE_NUMBER_BINOP_LIST(V)      \
 | 
| @@ -442,6 +423,7 @@ NumberOperationHint NumberOperationHintOf(const Operator* op) {
 | 
|    V(CheckIf, 1, 0)                    \
 | 
|    V(CheckNumber, 1, 1)                \
 | 
|    V(CheckString, 1, 1)                \
 | 
| +  V(CheckTaggedHole, 1, 1)            \
 | 
|    V(CheckTaggedPointer, 1, 1)         \
 | 
|    V(CheckTaggedSigned, 1, 1)          \
 | 
|    V(CheckedInt32Add, 2, 1)            \
 | 
| @@ -546,19 +528,6 @@ struct SimplifiedOperatorGlobalCache final {
 | 
|    CheckFloat64HoleNaNOperator<CheckFloat64HoleMode::kNeverReturnHole>
 | 
|        kCheckFloat64HoleNeverReturnHoleOperator;
 | 
|  
 | 
| -  template <CheckTaggedHoleMode kMode>
 | 
| -  struct CheckTaggedHoleOperator final : public Operator1<CheckTaggedHoleMode> {
 | 
| -    CheckTaggedHoleOperator()
 | 
| -        : Operator1<CheckTaggedHoleMode>(
 | 
| -              IrOpcode::kCheckTaggedHole,
 | 
| -              Operator::kFoldable | Operator::kNoThrow, "CheckTaggedHole", 1, 1,
 | 
| -              1, 1, 1, 0, kMode) {}
 | 
| -  };
 | 
| -  CheckTaggedHoleOperator<CheckTaggedHoleMode::kConvertHoleToUndefined>
 | 
| -      kCheckTaggedHoleConvertHoleToUndefinedOperator;
 | 
| -  CheckTaggedHoleOperator<CheckTaggedHoleMode::kNeverReturnHole>
 | 
| -      kCheckTaggedHoleNeverReturnHoleOperator;
 | 
| -
 | 
|    template <PretenureFlag kPretenure>
 | 
|    struct AllocateOperator final : public Operator1<PretenureFlag> {
 | 
|      AllocateOperator()
 | 
| @@ -706,18 +675,6 @@ const Operator* SimplifiedOperatorBuilder::CheckFloat64Hole(
 | 
|    return nullptr;
 | 
|  }
 | 
|  
 | 
| -const Operator* SimplifiedOperatorBuilder::CheckTaggedHole(
 | 
| -    CheckTaggedHoleMode mode) {
 | 
| -  switch (mode) {
 | 
| -    case CheckTaggedHoleMode::kConvertHoleToUndefined:
 | 
| -      return &cache_.kCheckTaggedHoleConvertHoleToUndefinedOperator;
 | 
| -    case CheckTaggedHoleMode::kNeverReturnHole:
 | 
| -      return &cache_.kCheckTaggedHoleNeverReturnHoleOperator;
 | 
| -  }
 | 
| -  UNREACHABLE();
 | 
| -  return nullptr;
 | 
| -}
 | 
| -
 | 
|  const Operator* SimplifiedOperatorBuilder::EnsureWritableFastElements() {
 | 
|    return &cache_.kEnsureWritableFastElements;
 | 
|  }
 | 
| 
 |