Index: src/compiler/representation-change.cc |
diff --git a/src/compiler/representation-change.cc b/src/compiler/representation-change.cc |
index 0c19a12f1b854ec6844f69d2f0b9892c0cb1db24..c6a96af27cbf0bcf6aae7ed76b56c9b8c7e13f22 100644 |
--- a/src/compiler/representation-change.cc |
+++ b/src/compiler/representation-change.cc |
@@ -457,6 +457,16 @@ Node* RepresentationChanger::GetWord32RepresentationFor( |
} else if (output_type->Is(Type::Signed32())) { |
op = simplified()->ChangeTaggedToInt32(); |
} else if (use_info.truncation().IsUsedAsWord32()) { |
+ if (use_info.type_check() == TypeCheckKind::kNumberOrOddball) { |
+ op = simplified()->CheckedTaggedToFloat64(); |
+ Node* effect = NodeProperties::GetEffectInput(use_node); |
+ Node* control = NodeProperties::GetControlInput(use_node); |
+ Node* to_float_checked = |
+ jsgraph()->graph()->NewNode(op, node, effect, control); |
+ NodeProperties::ReplaceEffectInput(use_node, to_float_checked); |
+ return jsgraph()->graph()->NewNode(machine()->TruncateFloat64ToWord32(), |
+ to_float_checked); |
Jarin
2016/07/27 05:34:01
As discussed offline, we should introduce a dedica
epertoso
2016/07/27 08:26:36
Acknowledged.
|
+ } |
op = simplified()->TruncateTaggedToWord32(); |
} else if (use_info.type_check() == TypeCheckKind::kSigned32) { |
op = simplified()->CheckedTaggedToInt32(); |
@@ -464,11 +474,15 @@ Node* RepresentationChanger::GetWord32RepresentationFor( |
} else if (output_rep == MachineRepresentation::kWord32) { |
// Only the checked case should get here, the non-checked case is |
// handled in GetRepresentationFor. |
- DCHECK(use_info.type_check() == TypeCheckKind::kSigned32); |
- if (output_type->Is(Type::Signed32())) { |
+ if (use_info.type_check() == TypeCheckKind::kSigned32) { |
+ if (output_type->Is(Type::Signed32())) { |
+ return node; |
+ } else if (output_type->Is(Type::Unsigned32())) { |
+ op = simplified()->CheckedUint32ToInt32(); |
+ } |
+ } else { |
+ DCHECK(use_info.type_check() == TypeCheckKind::kNumberOrOddball); |
Benedikt Meurer
2016/07/27 03:34:36
Nit: Use DCHECK_EQ(TypeCheckKind::kNumberOrOddball
epertoso
2016/07/27 08:26:36
Done.
|
return node; |
- } else if (output_type->Is(Type::Unsigned32())) { |
- op = simplified()->CheckedUint32ToInt32(); |
} |
} else if (output_rep == MachineRepresentation::kWord8 || |
output_rep == MachineRepresentation::kWord16) { |