OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler/js-typed-lowering.h" | 5 #include "src/compiler/js-typed-lowering.h" |
6 | 6 |
7 #include "src/ast/modules.h" | 7 #include "src/ast/modules.h" |
8 #include "src/builtins/builtins-utils.h" | 8 #include "src/builtins/builtins-utils.h" |
9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
10 #include "src/compilation-dependencies.h" | 10 #include "src/compilation-dependencies.h" |
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 Reduction JSTypedLowering::ReduceJSStrictEqual(Node* node, bool invert) { | 993 Reduction JSTypedLowering::ReduceJSStrictEqual(Node* node, bool invert) { |
994 JSBinopReduction r(this, node); | 994 JSBinopReduction r(this, node); |
995 if (r.left() == r.right()) { | 995 if (r.left() == r.right()) { |
996 // x === x is always true if x != NaN | 996 // x === x is always true if x != NaN |
997 if (!r.left_type()->Maybe(Type::NaN())) { | 997 if (!r.left_type()->Maybe(Type::NaN())) { |
998 Node* replacement = jsgraph()->BooleanConstant(!invert); | 998 Node* replacement = jsgraph()->BooleanConstant(!invert); |
999 ReplaceWithValue(node, replacement); | 999 ReplaceWithValue(node, replacement); |
1000 return Replace(replacement); | 1000 return Replace(replacement); |
1001 } | 1001 } |
1002 } | 1002 } |
1003 if (r.OneInputCannotBe(Type::NumberOrSimdOrString())) { | 1003 if (r.OneInputCannotBe(Type::NumberOrString())) { |
1004 // For values with canonical representation (i.e. neither String, nor | 1004 // For values with canonical representation (i.e. neither String, nor |
1005 // Simd128Value nor Number) an empty type intersection means the values | 1005 // Number) an empty type intersection means the values cannot be strictly |
1006 // cannot be strictly equal. | 1006 // equal. |
1007 if (!r.left_type()->Maybe(r.right_type())) { | 1007 if (!r.left_type()->Maybe(r.right_type())) { |
1008 Node* replacement = jsgraph()->BooleanConstant(invert); | 1008 Node* replacement = jsgraph()->BooleanConstant(invert); |
1009 ReplaceWithValue(node, replacement); | 1009 ReplaceWithValue(node, replacement); |
1010 return Replace(replacement); | 1010 return Replace(replacement); |
1011 } | 1011 } |
1012 } | 1012 } |
1013 | 1013 |
1014 Reduction const reduction = ReduceJSEqualTypeOf(node, invert); | 1014 Reduction const reduction = ReduceJSEqualTypeOf(node, invert); |
1015 if (reduction.Changed()) return reduction; | 1015 if (reduction.Changed()) return reduction; |
1016 | 1016 |
(...skipping 1459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2476 } | 2476 } |
2477 | 2477 |
2478 | 2478 |
2479 CompilationDependencies* JSTypedLowering::dependencies() const { | 2479 CompilationDependencies* JSTypedLowering::dependencies() const { |
2480 return dependencies_; | 2480 return dependencies_; |
2481 } | 2481 } |
2482 | 2482 |
2483 } // namespace compiler | 2483 } // namespace compiler |
2484 } // namespace internal | 2484 } // namespace internal |
2485 } // namespace v8 | 2485 } // namespace v8 |
OLD | NEW |