Uh oh!
There was an error while loading. Please reload this page.
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.
ghost
commented
Nov 14, 2023
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.
|
AndyAyersMS
commented
Nov 14, 2023
@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). |
jakobbotsch
left a comment
There was a problem hiding this comment.
LGTM. Is the fgExpandQmarkForCastInstOf special case still necessary?
AndyAyersMS
commented
Nov 14, 2023
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 |
AndyAyersMS
commented
Nov 14, 2023
Ah... I can look at this. Maybe as part of revisiting #86778. |
AndyAyersMS
commented
Nov 14, 2023
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.