| Index: src/compiler/js-typed-lowering.cc
|
| diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc
|
| index bd532b9d8b8757f021330c08cded31015ca81a83..01775ced41ddb4f8598fe8234b475652fe3f81e1 100644
|
| --- a/src/compiler/js-typed-lowering.cc
|
| +++ b/src/compiler/js-typed-lowering.cc
|
| @@ -872,43 +872,50 @@ Reduction JSTypedLowering::ReduceJSTypeOf(Node* node) {
|
| }
|
|
|
| Reduction JSTypedLowering::ReduceJSEqualTypeOf(Node* node, bool invert) {
|
| + Node* input;
|
| + Handle<String> type;
|
| HeapObjectBinopMatcher m(node);
|
| if (m.left().IsJSTypeOf() && m.right().HasValue() &&
|
| m.right().Value()->IsString()) {
|
| - Node* replacement;
|
| - Node* input = m.left().InputAt(0);
|
| - Handle<String> value = Handle<String>::cast(m.right().Value());
|
| - if (String::Equals(value, factory()->boolean_string())) {
|
| - replacement =
|
| - graph()->NewNode(common()->Select(MachineRepresentation::kTagged),
|
| - graph()->NewNode(simplified()->ReferenceEqual(),
|
| - input, jsgraph()->TrueConstant()),
|
| - jsgraph()->TrueConstant(),
|
| - graph()->NewNode(simplified()->ReferenceEqual(),
|
| - input, jsgraph()->FalseConstant()));
|
| - } else if (String::Equals(value, factory()->function_string())) {
|
| - replacement = graph()->NewNode(simplified()->ObjectIsCallable(), input);
|
| - } else if (String::Equals(value, factory()->number_string())) {
|
| - replacement = graph()->NewNode(simplified()->ObjectIsNumber(), input);
|
| - } else if (String::Equals(value, factory()->string_string())) {
|
| - replacement = graph()->NewNode(simplified()->ObjectIsString(), input);
|
| - } else if (String::Equals(value, factory()->undefined_string())) {
|
| - replacement = graph()->NewNode(
|
| - common()->Select(MachineRepresentation::kTagged),
|
| - graph()->NewNode(simplified()->ReferenceEqual(), input,
|
| - jsgraph()->NullConstant()),
|
| - jsgraph()->FalseConstant(),
|
| - graph()->NewNode(simplified()->ObjectIsUndetectable(), input));
|
| - } else {
|
| - return NoChange();
|
| - }
|
| - if (invert) {
|
| - replacement = graph()->NewNode(simplified()->BooleanNot(), replacement);
|
| - }
|
| - ReplaceWithValue(node, replacement);
|
| - return Replace(replacement);
|
| + input = m.left().InputAt(0);
|
| + type = Handle<String>::cast(m.right().Value());
|
| + } else if (m.right().IsJSTypeOf() && m.left().HasValue() &&
|
| + m.left().Value()->IsString()) {
|
| + input = m.right().InputAt(0);
|
| + type = Handle<String>::cast(m.left().Value());
|
| + } else {
|
| + return NoChange();
|
| }
|
| - return NoChange();
|
| + Node* value;
|
| + if (String::Equals(type, factory()->boolean_string())) {
|
| + value =
|
| + graph()->NewNode(common()->Select(MachineRepresentation::kTagged),
|
| + graph()->NewNode(simplified()->ReferenceEqual(), input,
|
| + jsgraph()->TrueConstant()),
|
| + jsgraph()->TrueConstant(),
|
| + graph()->NewNode(simplified()->ReferenceEqual(), input,
|
| + jsgraph()->FalseConstant()));
|
| + } else if (String::Equals(type, factory()->function_string())) {
|
| + value = graph()->NewNode(simplified()->ObjectIsCallable(), input);
|
| + } else if (String::Equals(type, factory()->number_string())) {
|
| + value = graph()->NewNode(simplified()->ObjectIsNumber(), input);
|
| + } else if (String::Equals(type, factory()->string_string())) {
|
| + value = graph()->NewNode(simplified()->ObjectIsString(), input);
|
| + } else if (String::Equals(type, factory()->undefined_string())) {
|
| + value = graph()->NewNode(
|
| + common()->Select(MachineRepresentation::kTagged),
|
| + graph()->NewNode(simplified()->ReferenceEqual(), input,
|
| + jsgraph()->NullConstant()),
|
| + jsgraph()->FalseConstant(),
|
| + graph()->NewNode(simplified()->ObjectIsUndetectable(), input));
|
| + } else {
|
| + return NoChange();
|
| + }
|
| + if (invert) {
|
| + value = graph()->NewNode(simplified()->BooleanNot(), value);
|
| + }
|
| + ReplaceWithValue(node, value);
|
| + return Replace(value);
|
| }
|
|
|
| Reduction JSTypedLowering::ReduceJSEqual(Node* node, bool invert) {
|
|
|