| Index: src/compiler/simplified-lowering.cc
|
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
|
| index 3430db1b12cf39b923714417c522be2bb87dc73a..9555a3fe00a5dc9e46884420bf488e2d68311957 100644
|
| --- a/src/compiler/simplified-lowering.cc
|
| +++ b/src/compiler/simplified-lowering.cc
|
| @@ -1012,6 +1012,36 @@ class RepresentationSelector {
|
| SetOutput(node, MachineRepresentation::kTagged);
|
| }
|
|
|
| + void VisitObjectState(Node* node) {
|
| + if (propagate()) {
|
| + for (int i = 0; i < node->InputCount(); i++) {
|
| + EnqueueInput(node, i, UseInfo::Any());
|
| + }
|
| + } else if (lower()) {
|
| + Zone* zone = jsgraph_->zone();
|
| + ZoneVector<MachineType>* types =
|
| + new (zone->New(sizeof(ZoneVector<MachineType>)))
|
| + ZoneVector<MachineType>(node->InputCount(), zone);
|
| + for (int i = 0; i < node->InputCount(); i++) {
|
| + Node* input = node->InputAt(i);
|
| + NodeInfo* input_info = GetInfo(input);
|
| + Type* input_type = TypeOf(input);
|
| + MachineRepresentation rep = input_type->IsInhabited()
|
| + ? input_info->representation()
|
| + : MachineRepresentation::kNone;
|
| + MachineType machine_type(rep, DeoptValueSemanticOf(input_type));
|
| + DCHECK(machine_type.representation() !=
|
| + MachineRepresentation::kWord32 ||
|
| + machine_type.semantic() == MachineSemantic::kInt32 ||
|
| + machine_type.semantic() == MachineSemantic::kUint32);
|
| + (*types)[i] = machine_type;
|
| + }
|
| + NodeProperties::ChangeOp(node,
|
| + jsgraph_->common()->TypedObjectState(types));
|
| + }
|
| + SetOutput(node, MachineRepresentation::kTagged);
|
| + }
|
| +
|
| const Operator* Int32Op(Node* node) {
|
| return changer_->Int32OperatorFor(node->opcode());
|
| }
|
| @@ -2456,6 +2486,8 @@ class RepresentationSelector {
|
| return;
|
| case IrOpcode::kStateValues:
|
| return VisitStateValues(node);
|
| + case IrOpcode::kObjectState:
|
| + return VisitObjectState(node);
|
| case IrOpcode::kTypeGuard: {
|
| // We just get rid of the sigma here. In principle, it should be
|
| // possible to refine the truncation and representation based on
|
| @@ -2497,7 +2529,6 @@ class RepresentationSelector {
|
| case IrOpcode::kThrow:
|
| case IrOpcode::kBeginRegion:
|
| case IrOpcode::kProjection:
|
| - case IrOpcode::kObjectState:
|
| case IrOpcode::kOsrValue:
|
| // All JavaScript operators except JSToNumber have uniform handling.
|
| #define OPCODE_CASE(name) case IrOpcode::k##name:
|
|
|