Index: src/compiler/simplified-operator.cc |
diff --git a/src/compiler/simplified-operator.cc b/src/compiler/simplified-operator.cc |
index b20e5937a59cdc37a4908f68a18cb72a1af7431d..cf0c3deb56710143acb17e26c23ad9c99321d957 100644 |
--- a/src/compiler/simplified-operator.cc |
+++ b/src/compiler/simplified-operator.cc |
@@ -208,7 +208,8 @@ CheckFloat64HoleMode CheckFloat64HoleModeOf(const Operator* op) { |
} |
CheckForMinusZeroMode CheckMinusZeroModeOf(const Operator* op) { |
- DCHECK(op->opcode() == IrOpcode::kCheckedInt32Mul || |
+ DCHECK(op->opcode() == IrOpcode::kChangeFloat64ToTagged || |
+ op->opcode() == IrOpcode::kCheckedInt32Mul || |
op->opcode() == IrOpcode::kCheckedFloat64ToInt32 || |
op->opcode() == IrOpcode::kCheckedTaggedToInt32); |
return OpParameter<CheckForMinusZeroMode>(op); |
@@ -395,7 +396,6 @@ NumberOperationHint NumberOperationHintOf(const Operator* op) { |
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) \ |
@@ -459,6 +459,19 @@ struct SimplifiedOperatorGlobalCache final { |
#undef CHECKED |
template <CheckForMinusZeroMode kMode> |
+ struct ChangeFloat64ToTaggedOperator final |
+ : public Operator1<CheckForMinusZeroMode> { |
+ ChangeFloat64ToTaggedOperator() |
+ : Operator1<CheckForMinusZeroMode>( |
+ IrOpcode::kChangeFloat64ToTagged, Operator::kPure, |
+ "ChangeFloat64ToTagged", 1, 0, 0, 1, 0, 0, kMode) {} |
+ }; |
+ ChangeFloat64ToTaggedOperator<CheckForMinusZeroMode::kCheckForMinusZero> |
+ kChangeFloat64ToTaggedCheckForMinusZeroOperator; |
+ ChangeFloat64ToTaggedOperator<CheckForMinusZeroMode::kDontCheckForMinusZero> |
+ kChangeFloat64ToTaggedDontCheckForMinusZeroOperator; |
+ |
+ template <CheckForMinusZeroMode kMode> |
struct CheckedInt32MulOperator final |
: public Operator1<CheckForMinusZeroMode> { |
CheckedInt32MulOperator() |
@@ -603,6 +616,18 @@ PURE_OP_LIST(GET_FROM_CACHE) |
CHECKED_OP_LIST(GET_FROM_CACHE) |
#undef GET_FROM_CACHE |
+const Operator* SimplifiedOperatorBuilder::ChangeFloat64ToTagged( |
+ CheckForMinusZeroMode mode) { |
+ switch (mode) { |
+ case CheckForMinusZeroMode::kCheckForMinusZero: |
+ return &cache_.kChangeFloat64ToTaggedCheckForMinusZeroOperator; |
+ case CheckForMinusZeroMode::kDontCheckForMinusZero: |
+ return &cache_.kChangeFloat64ToTaggedDontCheckForMinusZeroOperator; |
+ } |
+ UNREACHABLE(); |
+ return nullptr; |
+} |
+ |
const Operator* SimplifiedOperatorBuilder::CheckedInt32Mul( |
CheckForMinusZeroMode mode) { |
switch (mode) { |