diff options
Diffstat (limited to 'deps/v8/src/compiler/simplified-operator-reducer.cc')
-rw-r--r-- | deps/v8/src/compiler/simplified-operator-reducer.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/simplified-operator-reducer.cc b/deps/v8/src/compiler/simplified-operator-reducer.cc index acd0f66ef6..120d7926d5 100644 --- a/deps/v8/src/compiler/simplified-operator-reducer.cc +++ b/deps/v8/src/compiler/simplified-operator-reducer.cc @@ -89,6 +89,8 @@ Reduction SimplifiedOperatorReducer::Reduce(Node* node) { if (m.HasValue()) return ReplaceNumber(FastUI2D(m.Value())); break; } + case IrOpcode::kReferenceEqual: + return ReduceReferenceEqual(node); default: break; } @@ -96,6 +98,23 @@ Reduction SimplifiedOperatorReducer::Reduce(Node* node) { } +Reduction SimplifiedOperatorReducer::ReduceReferenceEqual(Node* node) { + DCHECK_EQ(IrOpcode::kReferenceEqual, node->opcode()); + Node* const left = NodeProperties::GetValueInput(node, 0); + Node* const right = NodeProperties::GetValueInput(node, 1); + HeapObjectMatcher match_left(left); + HeapObjectMatcher match_right(right); + if (match_left.HasValue() && match_right.HasValue()) { + if (match_left.Value().is_identical_to(match_right.Value())) { + return Replace(jsgraph()->TrueConstant()); + } else { + return Replace(jsgraph()->FalseConstant()); + } + } + return NoChange(); +} + + Reduction SimplifiedOperatorReducer::Change(Node* node, const Operator* op, Node* a) { DCHECK_EQ(node->InputCount(), OperatorProperties::GetTotalInputCount(op)); |