Index: src/compiler/load-elimination.cc |
diff --git a/src/compiler/load-elimination.cc b/src/compiler/load-elimination.cc |
index 93c24a08e5cfd6af94a74e6f7e6e876ee601e3e7..8acab6e8ff473f12ca838ac7d7faf17d4201aa4f 100644 |
--- a/src/compiler/load-elimination.cc |
+++ b/src/compiler/load-elimination.cc |
@@ -897,6 +897,7 @@ int LoadElimination::FieldIndexOf(FieldAccess const& access) { |
switch (rep) { |
case MachineRepresentation::kNone: |
case MachineRepresentation::kBit: |
+ case MachineRepresentation::kSimd128: |
UNREACHABLE(); |
break; |
case MachineRepresentation::kWord32: |
@@ -910,16 +911,20 @@ int LoadElimination::FieldIndexOf(FieldAccess const& access) { |
case MachineRepresentation::kFloat32: |
return -1; // Currently untracked. |
case MachineRepresentation::kFloat64: |
- case MachineRepresentation::kSimd128: |
- return -1; // Currently untracked. |
+ if (kDoubleSize != kPointerSize) { |
+ return -1; // We currently only track pointer size fields. |
+ } |
+ // Fall through. |
case MachineRepresentation::kTaggedSigned: |
case MachineRepresentation::kTaggedPointer: |
case MachineRepresentation::kTagged: |
// TODO(bmeurer): Check that we never do overlapping load/stores of |
- // individual parts of Float64/Simd128 values. |
+ // individual parts of Float64 values. |
break; |
} |
- DCHECK_EQ(kTaggedBase, access.base_is_tagged); |
+ if (access.base_is_tagged != kTaggedBase) { |
+ return -1; // We currently only track tagged objects. |
+ } |
return FieldIndexOf(access.offset); |
} |