-
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: Generalize FlowGraphNaturalLoop::AnalyzeIteration
#97327
Conversation
Consider all exit edges as potential tests on a IV variable, and try to recognize induction from those. Previously we looked only at the lexically bottom most block. Overall this unlocks only a pretty minor number of new cases which then leads to a bit more cloning. Size regressions are expected because of that.
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsConsider all exit edges as potential tests on a IV variable, and try to recognize induction from those. Previously we looked only at the lexically bottom most block. Overall this unlocks only a pretty minor number of new cases which then leads to a bit more cloning. Size regressions are expected because of that. Based on #97325. Should unblock #97191.
|
Assembly diffsAssembly diffs for linux/arm64 ran on windows/x64Diffs are based on 2,501,261 contexts (1,003,806 MinOpts, 1,497,455 FullOpts). MISSED contexts: base: 3,546 (0.14%), diff: 3,956 (0.16%) Overall (+654,368 bytes)
FullOpts (+654,368 bytes)
Assembly diffs for linux/x64 ran on windows/x64Diffs are based on 2,595,036 contexts (1,052,329 MinOpts, 1,542,707 FullOpts). MISSED contexts: base: 3,596 (0.14%), diff: 3,599 (0.14%) Overall (+847,760 bytes)
FullOpts (+847,760 bytes)
Assembly diffs for osx/arm64 ran on windows/x64Diffs are based on 2,262,764 contexts (930,876 MinOpts, 1,331,888 FullOpts). MISSED contexts: base: 2,925 (0.13%), diff: 3,201 (0.14%) Overall (+527,124 bytes)
FullOpts (+527,124 bytes)
Assembly diffs for windows/arm64 ran on windows/x64Diffs are based on 2,318,293 contexts (931,543 MinOpts, 1,386,750 FullOpts). MISSED contexts: base: 2,587 (0.11%), diff: 2,601 (0.11%) Overall (+731,948 bytes)
FullOpts (+731,948 bytes)
Assembly diffs for windows/x64 ran on windows/x64Diffs are based on 2,492,949 contexts (983,689 MinOpts, 1,509,260 FullOpts). MISSED contexts: base: 3,859 (0.15%), diff: 3,862 (0.15%) Overall (+879,433 bytes)
FullOpts (+879,433 bytes)
Details here Assembly diffs for linux/arm ran on windows/x86Diffs are based on 2,237,735 contexts (827,812 MinOpts, 1,409,923 FullOpts). MISSED contexts: base: 74,052 (3.20%), diff: 74,543 (3.22%) Overall (+922,034 bytes)
FullOpts (+922,034 bytes)
Assembly diffs for windows/x86 ran on windows/x86Diffs are based on 2,299,179 contexts (841,817 MinOpts, 1,457,362 FullOpts). MISSED contexts: base: 2,090 (0.09%), diff: 2,191 (0.10%) Overall (+281,351 bytes)
FullOpts (+281,351 bytes)
Details here Throughput diffsThroughput diffs for linux/arm64 ran on windows/x64Overall (+0.01% to +0.37%)
FullOpts (+0.01% to +0.50%)
Throughput diffs for linux/x64 ran on windows/x64Overall (+0.02% to +0.42%)
FullOpts (+0.02% to +0.55%)
Throughput diffs for osx/arm64 ran on windows/x64Overall (+0.01% to +0.40%)
FullOpts (+0.01% to +0.60%)
Throughput diffs for windows/arm64 ran on windows/x64Overall (+0.01% to +0.55%)
FullOpts (+0.01% to +0.83%)
Throughput diffs for windows/x64 ran on windows/x64Overall (+0.02% to +0.53%)
FullOpts (+0.02% to +0.74%)
Details here Throughput diffs for linux/arm ran on windows/x86Overall (+0.01% to +0.59%)
FullOpts (+0.01% to +0.77%)
Throughput diffs for windows/x86 ran on windows/x86Overall (+0.01% to +0.27%)
FullOpts (+0.01% to +0.34%)
Details here Throughput diffs for linux/arm64 ran on linux/x64Overall (+0.02% to +0.38%)
FullOpts (+0.02% to +0.51%)
Throughput diffs for linux/x64 ran on linux/x64Overall (+0.02% to +0.43%)
FullOpts (+0.02% to +0.56%)
Details here |
/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress |
Azure Pipelines successfully started running 2 pipeline(s). |
cc @dotnet/jit-contrib PTAL @BruceForstall Should be ready assuming CI looks good. Diffs are quite substantial due to the new cloning, but it looks like the same methods are repeated a bunch of times if you look at the jit-analyze output, so probably the results are a bit overblown. As usual loop cloning profitability heuristics is probably the right way to deal with this. |
Consider all exit edges as potential tests on a IV variable, and try to recognize induction from those. Previously we looked only at the lexically bottom most block. Overall this unlocks only a pretty minor number of new cases which then leads to a bit more cloning. Size regressions are expected because of that.
Consider all exit edges as potential tests on a IV variable, and try to recognize induction from those. Previously we looked only at the lexically bottom most block.
Overall this unlocks only a pretty minor number of new cases which then leads to a bit more cloning. Size regressions are expected because of that.
Based on #97325. Should unblock #97191.