| 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..23f37c3055ed7ea11162417f95987fe0e4a7430c 100644 | 
| --- a/src/compiler/js-typed-lowering.cc | 
| +++ b/src/compiler/js-typed-lowering.cc | 
| @@ -528,6 +528,13 @@ JSTypedLowering::JSTypedLowering(Editor* editor, | 
| dependencies_(dependencies), | 
| flags_(flags), | 
| jsgraph_(jsgraph), | 
| +      pointer_comparable_type_(Type::Union( | 
| +          Type::Oddball(), | 
| +          Type::Union( | 
| +              Type::SymbolOrReceiver(), | 
| +              Type::HeapConstant(factory()->empty_string(), graph()->zone()), | 
| +              graph()->zone()), | 
| +          graph()->zone())), | 
| type_cache_(TypeCache::Get()) { | 
| for (size_t k = 0; k < arraysize(shifted_int32_ranges_); ++k) { | 
| double min = kMinInt / (1 << k); | 
| @@ -1010,7 +1017,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 +1081,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(); | 
| } | 
|  |