Chromium Code Reviews| Index: src/compiler/machine-graph-verifier.cc |
| diff --git a/src/compiler/machine-graph-verifier.cc b/src/compiler/machine-graph-verifier.cc |
| index acfa2bc276bf9c8de0658d2de8e41713cf6696ec..c0eea6528fe97bb1ad86af92403dd55e7be0b9a9 100644 |
| --- a/src/compiler/machine-graph-verifier.cc |
| +++ b/src/compiler/machine-graph-verifier.cc |
| @@ -30,6 +30,10 @@ class MachineRepresentationInferrer { |
| Run(); |
| } |
| + CallDescriptor* call_descriptor() const { |
| + return linkage_->GetIncomingDescriptor(); |
| + } |
| + |
| MachineRepresentation GetRepresentation(Node const* node) const { |
| return representation_vector_.at(node->id()); |
| } |
| @@ -94,6 +98,11 @@ class MachineRepresentationInferrer { |
| linkage_->GetParameterType(ParameterIndexOf(node->op())) |
| .representation(); |
| break; |
| + case IrOpcode::kReturn: { |
| + representation_vector_[node->id()] = PromoteRepresentation( |
| + linkage_->GetReturnType().representation()); |
| + break; |
| + } |
| case IrOpcode::kProjection: { |
| representation_vector_[node->id()] = GetProjectionType(node); |
| } break; |
| @@ -136,6 +145,9 @@ class MachineRepresentationInferrer { |
| break; |
| } |
| case IrOpcode::kAtomicStore: |
| + representation_vector_[node->id()] = |
| + PromoteRepresentation(AtomicStoreRepresentationOf(node->op())); |
| + break; |
| case IrOpcode::kStore: |
| case IrOpcode::kProtectedStore: |
| representation_vector_[node->id()] = PromoteRepresentation( |
| @@ -456,6 +468,11 @@ class MachineRepresentationChecker { |
| CheckValueInputIsTagged(node, i); |
| } |
| break; |
| + case MachineRepresentation::kWord32: |
| + for (int i = 0; i < node->op()->ValueInputCount(); ++i) { |
| + CheckValueInputForInt32Op(node, i); |
| + } |
| + break; |
| default: |
| for (int i = 0; i < node->op()->ValueInputCount(); ++i) { |
| CheckValueInputRepresentationIs( |
| @@ -468,10 +485,33 @@ class MachineRepresentationChecker { |
| case IrOpcode::kSwitch: |
| CheckValueInputForInt32Op(node, 0); |
| break; |
| - case IrOpcode::kReturn: |
| - // TODO(epertoso): use the linkage to determine which tipe we |
| - // should have here. |
| + case IrOpcode::kReturn: { |
| + // TODO(ishell): enable once the pop count parameter type becomes |
| + // MachineType::PointerRepresentation(). Currently it's int32 or |
| + // word-size. |
| + // CheckValueInputRepresentationIs( |
| + // node, 0, MachineType::PointerRepresentation()); // Pop count |
| + size_t return_count = inferrer_->call_descriptor()->ReturnCount(); |
| + for (size_t i = 0; i < return_count; i++) { |
| + MachineType type = inferrer_->call_descriptor()->GetReturnType(i); |
| + int input_index = static_cast<int>(i + 1); |
| + switch (type.representation()) { |
| + case MachineRepresentation::kTagged: |
| + case MachineRepresentation::kTaggedPointer: |
| + case MachineRepresentation::kTaggedSigned: |
| + CheckValueInputIsTagged(node, input_index); |
| + break; |
| + case MachineRepresentation::kWord32: |
| + CheckValueInputForInt32Op(node, input_index); |
| + break; |
| + default: |
| + CheckValueInputRepresentationIs( |
| + node, 2, inferrer_->GetRepresentation(node)); |
| + } |
| + break; |
|
Nico
2017/09/15 19:28:25
This break is probably supposed to go in the defau
Igor Sheludko
2017/09/20 15:15:20
Nice catch! Thank you!
The fix: https://chromium-r
|
| + } |
| break; |
| + } |
| case IrOpcode::kTypedStateValues: |
| case IrOpcode::kFrameState: |
| break; |