JIT: Generalize FlowGraphNaturalLoop::AnalyzeIteration#97327
JIT: Generalize FlowGraphNaturalLoop::AnalyzeIteration#97327jakobbotsch merged 1 commit intodotnet:mainfrom
FlowGraphNaturalLoop::AnalyzeIteration#97327Conversation
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.