| Index: src/compiler/js-typed-lowering.cc
|
| diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc
|
| index 6578a7e07b47c9872d1985207012358eb1d2e889..84186c0c2ea0d423807e41c0c1ffce7366782f14 100644
|
| --- a/src/compiler/js-typed-lowering.cc
|
| +++ b/src/compiler/js-typed-lowering.cc
|
| @@ -989,14 +989,13 @@ Reduction JSTypedLowering::ReduceJSEqual(Node* node, bool invert) {
|
| return NoChange();
|
| }
|
|
|
| -Reduction JSTypedLowering::ReduceJSStrictEqual(Node* node, bool invert) {
|
| +Reduction JSTypedLowering::ReduceJSStrictEqual(Node* node) {
|
| JSBinopReduction r(this, node);
|
| if (r.left() == r.right()) {
|
| // x === x is always true if x != NaN
|
| - Node* replacement = graph()->NewNode(simplified()->ObjectIsNaN(), r.left());
|
| - if (!invert) {
|
| - replacement = graph()->NewNode(simplified()->BooleanNot(), replacement);
|
| - }
|
| + Node* replacement = graph()->NewNode(
|
| + simplified()->BooleanNot(),
|
| + graph()->NewNode(simplified()->ObjectIsNaN(), r.left()));
|
| ReplaceWithValue(node, replacement);
|
| return Replace(replacement);
|
| }
|
| @@ -1005,47 +1004,47 @@ Reduction JSTypedLowering::ReduceJSStrictEqual(Node* node, bool invert) {
|
| // Number) an empty type intersection means the values cannot be strictly
|
| // equal.
|
| if (!r.left_type()->Maybe(r.right_type())) {
|
| - Node* replacement = jsgraph()->BooleanConstant(invert);
|
| + Node* replacement = jsgraph()->FalseConstant();
|
| ReplaceWithValue(node, replacement);
|
| return Replace(replacement);
|
| }
|
| }
|
|
|
| - Reduction const reduction = ReduceJSEqualTypeOf(node, invert);
|
| + Reduction const reduction = ReduceJSEqualTypeOf(node, false);
|
| if (reduction.Changed()) return reduction;
|
|
|
| if (r.BothInputsAre(Type::Unique())) {
|
| - return r.ChangeToPureOperator(simplified()->ReferenceEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->ReferenceEqual());
|
| }
|
| if (r.OneInputIs(pointer_comparable_type_)) {
|
| - return r.ChangeToPureOperator(simplified()->ReferenceEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->ReferenceEqual());
|
| }
|
| if (r.IsInternalizedStringCompareOperation()) {
|
| r.CheckInputsToInternalizedString();
|
| - return r.ChangeToPureOperator(simplified()->ReferenceEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->ReferenceEqual());
|
| }
|
| if (r.BothInputsAre(Type::String())) {
|
| - return r.ChangeToPureOperator(simplified()->StringEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->StringEqual());
|
| }
|
|
|
| NumberOperationHint hint;
|
| if (r.BothInputsAre(Type::Signed32()) ||
|
| r.BothInputsAre(Type::Unsigned32())) {
|
| - return r.ChangeToPureOperator(simplified()->NumberEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->NumberEqual());
|
| } else if (r.GetCompareNumberOperationHint(&hint)) {
|
| return r.ChangeToSpeculativeOperator(
|
| - simplified()->SpeculativeNumberEqual(hint), invert, Type::Boolean());
|
| + simplified()->SpeculativeNumberEqual(hint), false, Type::Boolean());
|
| } else if (r.BothInputsAre(Type::Number())) {
|
| - return r.ChangeToPureOperator(simplified()->NumberEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->NumberEqual());
|
| } else if (r.IsReceiverCompareOperation()) {
|
| // For strict equality, it's enough to know that one input is a Receiver,
|
| // as a strict equality comparison with a Receiver can only yield true if
|
| // both sides refer to the same Receiver than.
|
| r.CheckLeftInputToReceiver();
|
| - return r.ChangeToPureOperator(simplified()->ReferenceEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->ReferenceEqual());
|
| } else if (r.IsStringCompareOperation()) {
|
| r.CheckInputsToString();
|
| - return r.ChangeToPureOperator(simplified()->StringEqual(), invert);
|
| + return r.ChangeToPureOperator(simplified()->StringEqual());
|
| }
|
| return NoChange();
|
| }
|
| @@ -2373,9 +2372,7 @@ Reduction JSTypedLowering::Reduce(Node* node) {
|
| case IrOpcode::kJSNotEqual:
|
| return ReduceJSEqual(node, true);
|
| case IrOpcode::kJSStrictEqual:
|
| - return ReduceJSStrictEqual(node, false);
|
| - case IrOpcode::kJSStrictNotEqual:
|
| - return ReduceJSStrictEqual(node, true);
|
| + return ReduceJSStrictEqual(node);
|
| case IrOpcode::kJSLessThan: // fall through
|
| case IrOpcode::kJSGreaterThan: // fall through
|
| case IrOpcode::kJSLessThanOrEqual: // fall through
|
|
|