[webkit-changes] [WebKit/WebKit] a7e067: [JSC][GreedyRegAlloc] Fix corner cases in buildLiv...
Dan Hecht
noreply at github.com
Thu Feb 20 11:29:53 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: a7e06756879026db26e3c9aff2f0f7f98d518031
https://github.com/WebKit/WebKit/commit/a7e06756879026db26e3c9aff2f0f7f98d518031
Author: Dan Hecht <dan.hecht at apple.com>
Date: 2025-02-20 (Thu, 20 Feb 2025)
Changed paths:
M Source/JavaScriptCore/b3/air/AirAllocateRegistersByGreedy.cpp
Log Message:
-----------
[JSC][GreedyRegAlloc] Fix corner cases in buildLiveRanges
https://bugs.webkit.org/show_bug.cgi?id=288105
rdar://145064388
Reviewed by Yijia Huang.
buildLiveRanges() needs to be more deliberate about how it models
an instruction. It should process the effects in order rather than
how they happen to occur in the arg list (though usually things
worked out okay with arg list order). Otherwise, the following
issues can occur:
1. If %tmpA is late-def & %tmpB is late-use (or similarly early-def & early-use),
pruneCoalescable() needs to see this interference, otherwise an incorrect tmp
coalescing could occur.
2. If %tmpA is both early-use and late-def, then the late-def must
not kill the early-use.
3. Similarly, if %tmpA is both early-def and late-use (e.g. scratch), then
if processed in the wrong order, the lifetime of A may extend earlier
than it should (potential performance issue, not correctness).
4. if %tmpA and %tmpB are both def at the same point (either early or late)
and one of them is a dead def (has no subsequent use) then pruneCoalescable()
needs to handle def-def interference for dead defs. In the case of a dead def,
the interval will not be "active" since there was no subsequent use to open it,
and so we need to check first closed (i.e. last to be closed) interval for
interference. This will be more important if the clobber logic is folded
into the main use-def logic.
* Source/JavaScriptCore/b3/air/AirAllocateRegistersByGreedy.cpp:
(JSC::B3::Air::Greedy::GreedyAllocator::buildLiveRanges):
Canonical link: https://commits.webkit.org/290729@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list