Chromium Code Reviews| Index: src/compiler/js-typed-lowering.cc |
| diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc |
| index de471c9e9e1a9c6ea75ef5cff2832d7c8ab369be..fdd3da7743a6aaf9224761466a67ecadaef217bf 100644 |
| --- a/src/compiler/js-typed-lowering.cc |
| +++ b/src/compiler/js-typed-lowering.cc |
| @@ -528,6 +528,18 @@ JSTypedLowering::JSTypedLowering(Editor* editor, |
| dependencies_(dependencies), |
| flags_(flags), |
| jsgraph_(jsgraph), |
| + pointer_comparable_type_(Type::Union( |
| + Type::BooleanOrNullOrUndefined(), |
| + Type::Union(Type::Symbol(), |
| + Type::Union(Type::Receiver(), |
| + Type::Union(Type::Hole(), |
| + Type::HeapConstant( |
| + factory()->empty_string(), |
| + graph()->zone()), |
| + graph()->zone()), |
| + graph()->zone()), |
| + graph()->zone()), |
| + graph()->zone())), |
|
Yang
2017/02/09 06:41:41
can we have a helper function that returns this mo
Benedikt Meurer
2017/02/09 06:58:24
Done.
|
| type_cache_(TypeCache::Get()) { |
| for (size_t k = 0; k < arraysize(shifted_int32_ranges_); ++k) { |
| double min = kMinInt / (1 << k); |
| @@ -1010,7 +1022,7 @@ Reduction JSTypedLowering::ReduceJSStrictEqual(Node* node, bool invert) { |
| if (r.BothInputsAre(Type::Unique())) { |
| return r.ChangeToPureOperator(simplified()->ReferenceEqual(), invert); |
| } |
| - if (r.OneInputIs(Type::NonStringUniqueOrHole())) { |
| + if (r.OneInputIs(pointer_comparable_type_)) { |
| return r.ChangeToPureOperator(simplified()->ReferenceEqual(), invert); |
| } |
| if (r.IsInternalizedStringCompareOperation()) { |
| @@ -1074,6 +1086,14 @@ Reduction JSTypedLowering::ReduceJSToBoolean(Node* node) { |
| node->TrimInputCount(1); |
| NodeProperties::ChangeOp(node, simplified()->BooleanNot()); |
| return Changed(node); |
| + } else if (input_type->Is(Type::String())) { |
| + // JSToBoolean(x:string) => BooleanNot(ReferenceEqual(x,"")) |
| + node->ReplaceInput(0, |
| + graph()->NewNode(simplified()->ReferenceEqual(), input, |
| + jsgraph()->EmptyStringConstant())); |
| + node->TrimInputCount(1); |
| + NodeProperties::ChangeOp(node, simplified()->BooleanNot()); |
| + return Changed(node); |
| } |
| return NoChange(); |
| } |