-
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: consistently handle no return calls in qmarks #94690
Conversation
When we expand QMARKS, ensure that any block with a no-return call gets changed to BBJ_THROW. This fixes a case I am seeing with cross-block local assertion prop, as the upper QMARK gets optimized away and so we don't check if the expansing has any noreturn calls. It also happens in places with just within-block local assertion prop. Contributes to dotnet#94363.
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsWhen we expand QMARKS, ensure that any block with a no-return call gets changed to BBJ_THROW. This fixes a case I am seeing with cross-block local assertion prop, as the upper QMARK gets optimized away and so we don't check if the expansing has any noreturn calls. It also happens in places with just within-block local assertion prop. Contributes to #94363.
|
@dotnet/jit-contrib fyi A handful of diffs expected (a few more with cross-block enabled, but still not a lot). Ideally we'd tail merge these, but the noreturn calls often end up with different arguments, and tail merge / throw helper merge aren't able to handle these cases (yet). |
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. Is the fgExpandQmarkForCastInstOf
special case still necessary?
You mean the part that is described by
I don't see how it can be reached, as the outer qmark is the one that would have the Let me see if we get there with SPMI. |
I mean the entirety of |
Ah... I can look at this. Maybe as part of revisiting #86778. |
Will revisit some of the above when I look at moving qmark expansion earlier. |
When we expand QMARKS, ensure that any block with a no-return call gets changed to BBJ_THROW.
This fixes a case I am seeing with cross-block local assertion prop, as the upper QMARK gets optimized away and so we don't check if the expansing has any noreturn calls.
It also happens in places with just within-block local assertion prop.
Contributes to #94363.