[maglev] Do not use LoadPolymorphicDoubleField if only Smis

Bug: v8:7700
Change-Id: I25eceaa6a926c17bdba882145d073afbdf71e091
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4198149
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Auto-Submit: Victor Gomes <victorgomes@chromium.org>
Commit-Queue: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/main@{#85516}
This commit is contained in:
Victor Gomes 2023-01-27 12:10:08 +01:00 committed by V8 LUCI CQ
parent 021fe0c80f
commit 193db1b453

View File

@ -2099,20 +2099,18 @@ bool MaglevGraphBuilder::TryBuildNamedAccess(
return false;
}
bool only_double_or_smi_load = true;
Representation field_repr = Representation::Smi();
// Check if we support the polymorphic load.
for (compiler::PropertyAccessInfo access_info : access_infos) {
switch (access_info.kind()) {
case compiler::PropertyAccessInfo::kNotFound:
case compiler::PropertyAccessInfo::kModuleExport:
only_double_or_smi_load = false;
field_repr.generalize(Representation::Tagged());
break;
case compiler::PropertyAccessInfo::kDataField:
case compiler::PropertyAccessInfo::kFastDataConstant:
only_double_or_smi_load &=
(access_info.field_index().is_double() ||
access_info.field_representation().IsSmi());
field_repr.generalize(access_info.field_representation());
break;
default:
// TODO(victorgomes): Support other access.
@ -2137,13 +2135,14 @@ bool MaglevGraphBuilder::TryBuildNamedAccess(
}
}
if (only_double_or_smi_load) {
if (field_repr.kind() == Representation::kDouble) {
SetAccumulator(AddNewNode<LoadPolymorphicDoubleField>(
{lookup_start_object}, std::move(access_infos)));
} else {
SetAccumulator(AddNewNode<LoadPolymorphicTaggedField>(
{lookup_start_object}, std::move(access_infos)));
}
return true;
}
}