| Index: src/compiler/representation-change.h
|
| diff --git a/src/compiler/representation-change.h b/src/compiler/representation-change.h
|
| index 8950b53f685179a3fb3aeec18617a772f82a392b..d7895da82504a86bc26443a3de32c2e010a562bf 100644
|
| --- a/src/compiler/representation-change.h
|
| +++ b/src/compiler/representation-change.h
|
| @@ -80,7 +80,8 @@ enum class TypeCheckKind : uint8_t {
|
| kSignedSmall,
|
| kSigned32,
|
| kNumber,
|
| - kNumberOrOddball
|
| + kNumberOrOddball,
|
| + kHeapObject
|
| };
|
|
|
| inline std::ostream& operator<<(std::ostream& os, TypeCheckKind type_check) {
|
| @@ -95,6 +96,8 @@ inline std::ostream& operator<<(std::ostream& os, TypeCheckKind type_check) {
|
| return os << "Number";
|
| case TypeCheckKind::kNumberOrOddball:
|
| return os << "NumberOrOddball";
|
| + case TypeCheckKind::kHeapObject:
|
| + return os << "HeapObject";
|
| }
|
| UNREACHABLE();
|
| return os;
|
| @@ -152,6 +155,10 @@ class UseInfo {
|
| }
|
|
|
| // Possibly deoptimizing conversions.
|
| + static UseInfo CheckedHeapObjectAsTaggedPointer() {
|
| + return UseInfo(MachineRepresentation::kTaggedPointer, Truncation::Any(),
|
| + TypeCheckKind::kHeapObject);
|
| + }
|
| static UseInfo CheckedSignedSmallAsTaggedSigned() {
|
| return UseInfo(MachineRepresentation::kTaggedSigned, Truncation::Any(),
|
| TypeCheckKind::kSignedSmall);
|
| @@ -260,7 +267,8 @@ class RepresentationChanger final {
|
| UseInfo use_info);
|
| Node* GetTaggedPointerRepresentationFor(Node* node,
|
| MachineRepresentation output_rep,
|
| - Type* output_type);
|
| + Type* output_type, Node* use_node,
|
| + UseInfo use_info);
|
| Node* GetTaggedRepresentationFor(Node* node, MachineRepresentation output_rep,
|
| Type* output_type, Truncation truncation);
|
| Node* GetFloat32RepresentationFor(Node* node,
|
| @@ -284,8 +292,10 @@ class RepresentationChanger final {
|
| Node* InsertChangeFloat32ToFloat64(Node* node);
|
| Node* InsertChangeFloat64ToInt32(Node* node);
|
| Node* InsertChangeFloat64ToUint32(Node* node);
|
| + Node* InsertChangeInt32ToFloat64(Node* node);
|
| Node* InsertChangeTaggedSignedToInt32(Node* node);
|
| Node* InsertChangeTaggedToFloat64(Node* node);
|
| + Node* InsertChangeUint32ToFloat64(Node* node);
|
|
|
| Node* InsertConversion(Node* node, const Operator* op, Node* use_node);
|
|
|
|
|