-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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: RBO's utilization of liberal VNs is illegal #102158
Comments
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
Switching RBO to use conservative VNs leads to fairly widespread size regressions. Hoping we can find something more surgical here. Diffs are based on 2,600,909 contexts (1,033,923 MinOpts, 1,566,986 FullOpts). MISSED contexts: base: 1 (0.00%), diff: 1,095 (0.04%) Overall (+1,731,069 bytes)
FullOpts (+1,731,069 bytes)
|
Still not sure how to approach this, but RBO's been like this for a while now, so fixing doesn't seem urgent. Going to move out of 9.0. |
The following program hits the assert when run with
DOTNET_JitNoCSE=1
.RBO eliminates the
y == k + 1
branch because it is dominated byc.X == k + 1
with the same liberal VN. However, this is not legal sincey
andc.X
evaluated in the dominating test may not have the same value under data races.The example requires
DOTNET_JitNoCSE
because otherwise CSE removes one of the loads ofc.X
, but naturally CSE could decide not to CSE these for any number of reasons (like register pressure).cc @dotnet/jit-contrib
The text was updated successfully, but these errors were encountered: