Index: src/compiler/representation-change.cc |
diff --git a/src/compiler/representation-change.cc b/src/compiler/representation-change.cc |
index b3aaed9ffe2bfc12291fc0a029bcf374fee5647a..68261c69d3ca6a47f872c9ce8eed0d70f89c0241 100644 |
--- a/src/compiler/representation-change.cc |
+++ b/src/compiler/representation-change.cc |
@@ -674,22 +674,11 @@ Node* RepresentationChanger::GetWord32RepresentationFor( |
return TypeError(node, output_rep, output_type, |
MachineRepresentation::kWord32); |
} |
- } else if (output_rep == MachineRepresentation::kTaggedSigned) { |
- if (output_type->Is(Type::Signed32())) { |
+ } else if (IsAnyTagged(output_rep)) { |
+ if (output_rep == MachineRepresentation::kTaggedSigned && |
+ output_type->Is(Type::SignedSmall())) { |
op = simplified()->ChangeTaggedSignedToInt32(); |
- } else if (use_info.truncation().IsUsedAsWord32()) { |
- if (use_info.type_check() != TypeCheckKind::kNone) { |
- op = simplified()->CheckedTruncateTaggedToWord32(); |
- } else { |
- op = simplified()->TruncateTaggedToWord32(); |
- } |
- } else { |
- return TypeError(node, output_rep, output_type, |
- MachineRepresentation::kWord32); |
- } |
- } else if (output_rep == MachineRepresentation::kTagged || |
- output_rep == MachineRepresentation::kTaggedPointer) { |
- if (output_type->Is(Type::Signed32())) { |
+ } else if (output_type->Is(Type::Signed32())) { |
op = simplified()->ChangeTaggedToInt32(); |
} else if (use_info.type_check() == TypeCheckKind::kSignedSmall) { |
op = simplified()->CheckedTaggedSignedToInt32(); |
@@ -703,8 +692,12 @@ Node* RepresentationChanger::GetWord32RepresentationFor( |
} else if (use_info.truncation().IsUsedAsWord32()) { |
if (output_type->Is(Type::NumberOrOddball())) { |
op = simplified()->TruncateTaggedToWord32(); |
- } else if (use_info.type_check() != TypeCheckKind::kNone) { |
- op = simplified()->CheckedTruncateTaggedToWord32(); |
+ } else if (use_info.type_check() == TypeCheckKind::kNumber) { |
+ op = simplified()->CheckedTruncateTaggedToWord32( |
+ CheckTaggedInputMode::kNumber); |
+ } else if (use_info.type_check() == TypeCheckKind::kNumberOrOddball) { |
+ op = simplified()->CheckedTruncateTaggedToWord32( |
+ CheckTaggedInputMode::kNumberOrOddball); |
} else { |
return TypeError(node, output_rep, output_type, |
MachineRepresentation::kWord32); |
@@ -726,8 +719,8 @@ Node* RepresentationChanger::GetWord32RepresentationFor( |
return TypeError(node, output_rep, output_type, |
MachineRepresentation::kWord32); |
} |
- } else { |
- DCHECK_EQ(TypeCheckKind::kNumberOrOddball, use_info.type_check()); |
+ } else if (use_info.type_check() == TypeCheckKind::kNumber || |
+ use_info.type_check() == TypeCheckKind::kNumberOrOddball) { |
return node; |
} |
} else if (output_rep == MachineRepresentation::kWord8 || |