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(); |
} |