-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JIT: Compact newly recognized loops #97149
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsLarge diffs expected. Sadly that's just churn until we get a new block layout in the backend, but I do not see an easy way to avoid it if we want to be able to remove old loop finding.
|
cc @dotnet/jit-contrib PTAL @BruceForstall Diffs. A significant amount of churn, that I sadly don't have a good idea on how to avoid. |
// If this is a CALLFINALLYRET that is not in the loop, but the | ||
// CALLFINALLY was, then we have to leave it in place. For compaction | ||
// purposes this doesn't really make any difference, since no codegen | ||
// is associated with the CALLFINALLYRET anyway. | ||
if (cur->isBBCallFinallyPairTail()) | ||
{ | ||
cur = cur->Next(); | ||
continue; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is an interesting case that can occur since we do not return any EH succeessors for CALLFINALLYRET
; if the CALLFINALLY/CALLFINALLYRET
is inside a try whose handler loops back around, then the CALLFINALLY
may be part of the loop while the CALLFINALLYRET
isn't. Here's an example case; red edges are EH successor edges. The CALLFINALLY
is BB19
and the CALLFINALLYRET
is BB20
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
IMO, churn is ok at this point.
Large diffs expected. Sadly that's just churn until we get a new block layout in the backend, but I do not see an easy way to avoid it if we want to be able to remove old loop finding.