Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 5186c242378cb9c03f6f0699cfd8029e5b618a07
https://github.com/WebKit/WebKit/commit/5186c242378cb9c03f6f0699cfd8029e5b618a07
Author: Tadeu Zagallo <[email protected]>
Date: 2023-04-25 (Tue, 25 Apr 2023)
Changed paths:
M Source/WebGPU/WGSL/Overload.cpp
M Source/WebGPU/WGSL/tests/valid/overload.wgsl
Log Message:
-----------
[WGSL] Overload resolution shouldn't eagerly promote variables
https://bugs.webkit.org/show_bug.cgi?id=255771
rdar://108361197
Reviewed by Mike Wyrzykowski.
During overload resolution, when trying to assign a type to a variable we check
whether it satisifies the variable's constraints. In order to satisfy a
constraint
we might need to promote the type being assigned to the variable. The example
from the tests is when the variable requires a concrete type but we are
assigning
an abstract type to it. Originally, we would promote the type as soon as we
assigned
it to the variable, but that is not always correct. The promotion algorithm will
pick the cheapest conversion, in this case it would promote an AbstractInt to an
i32, which is a valid conversion. However, later we observe that the same
variable
is also being unified with an u32, which was also a valid conversion for the
original
type (AbstractInt), but since we already promoted the variable to i32, we can no
longer unify the variable with u32, since we can't unify i32 and u32. The
solution
is faily straightforward though: we still reject types that don't satisfy the
constraints,
but hold off on promoting the type until we materialize the variable after
determining
that a given overload is a viable candidate. This guarantees that there will be
a
suitable promotion that will satisfy the constraints, but we delay choosing
which
type we'll promote to until we have looked at all arguments.
* Source/WebGPU/WGSL/Overload.cpp:
(WGSL::OverloadResolver::materialize const):
(WGSL::OverloadResolver::assign):
* Source/WebGPU/WGSL/tests/valid/overload.wgsl:
Canonical link: https://commits.webkit.org/263355@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes