| Index: src/compiler/load-elimination.cc
|
| diff --git a/src/compiler/load-elimination.cc b/src/compiler/load-elimination.cc
|
| index de625cc94a8b05ed0f43c55c8f98f35e0dc9598b..317766d90598577d5891568835e2396632fb1e77 100644
|
| --- a/src/compiler/load-elimination.cc
|
| +++ b/src/compiler/load-elimination.cc
|
| @@ -63,6 +63,8 @@ Reduction LoadElimination::Reduce(Node* node) {
|
| return ReduceLoadElement(node);
|
| case IrOpcode::kStoreElement:
|
| return ReduceStoreElement(node);
|
| + case IrOpcode::kStoreTypedElement:
|
| + return ReduceStoreTypedElement(node);
|
| case IrOpcode::kEffectPhi:
|
| return ReduceEffectPhi(node);
|
| case IrOpcode::kDead:
|
| @@ -455,6 +457,13 @@ Reduction LoadElimination::ReduceStoreElement(Node* node) {
|
| return UpdateState(node, state);
|
| }
|
|
|
| +Reduction LoadElimination::ReduceStoreTypedElement(Node* node) {
|
| + Node* const effect = NodeProperties::GetEffectInput(node);
|
| + AbstractState const* state = node_states_.Get(effect);
|
| + if (state == nullptr) return NoChange();
|
| + return UpdateState(node, state);
|
| +}
|
| +
|
| Reduction LoadElimination::ReduceEffectPhi(Node* node) {
|
| Node* const effect0 = NodeProperties::GetEffectInput(node, 0);
|
| Node* const control = NodeProperties::GetControlInput(node);
|
| @@ -571,15 +580,20 @@ LoadElimination::AbstractState const* LoadElimination::ComputeLoopState(
|
|
|
| // static
|
| int LoadElimination::FieldIndexOf(FieldAccess const& access) {
|
| - switch (access.machine_type.representation()) {
|
| + MachineRepresentation rep = access.machine_type.representation();
|
| + switch (rep) {
|
| case MachineRepresentation::kNone:
|
| case MachineRepresentation::kBit:
|
| UNREACHABLE();
|
| break;
|
| - case MachineRepresentation::kWord8:
|
| - case MachineRepresentation::kWord16:
|
| case MachineRepresentation::kWord32:
|
| case MachineRepresentation::kWord64:
|
| + if (rep != MachineType::PointerRepresentation()) {
|
| + return -1; // We currently only track pointer size fields.
|
| + }
|
| + break;
|
| + case MachineRepresentation::kWord8:
|
| + case MachineRepresentation::kWord16:
|
| case MachineRepresentation::kFloat32:
|
| return -1; // Currently untracked.
|
| case MachineRepresentation::kFloat64:
|
|
|