Skip to content

JIT: Always assign edge likelihoods in fgIncorporateProfileData #98054

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

Closed
wants to merge 51 commits into from

Conversation

amanasifkhalid
Copy link
Member

@amanasifkhalid amanasifkhalid commented Feb 6, 2024

Part of #93020. Currently, if profile data isn't available or reliable, the JIT won't assign edge likelihoods. We have the ability to come up with reasonable edge likelihoods using a block's number of successors in profile synthesis, so do so when incorporating profile data.

(This change had a lot of churn locally, and I think we can do this heuristic-driven likelihoods fixup more cheaply, i.e. skip the DFS computation if we can tolerate more naive likelihood guesses, don't compute block weights, etc.).

@ghost ghost assigned amanasifkhalid Feb 6, 2024
@dotnet-issue-labeler dotnet-issue-labeler bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 6, 2024
@ghost
Copy link

ghost commented Feb 6, 2024

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

Part of #93020. Currently, if profile data isn't available or reliable, the JIT won't assign edge likelihoods. We have the ability to come up with reasonable edge likelihoods using a block's number of successors in profile synthesis, so do so when incorporating profile data.

(This change had a lot of churn locally, and I think we can do this heuristic-driven likelihoods fixup more cheaply, i.e. skip the DFS computation and loop search, replace the AssignLikelihood* methods with some simple arithmetic using NumSucc, etc.).

Author: amanasifkhalid
Assignees: amanasifkhalid
Labels:

area-CodeGen-coreclr

Milestone: -

amanasifkhalid and others added 2 commits February 6, 2024 15:38
…ect behavior on overshift (dotnet#98001)

* Ensure that constant folding for SIMD shifts on xarch follow the correct behavior on overshift

* Ensure we test Sse2.IsSupported
@ryujit-bot
Copy link

Diff results for #98054

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (+0.13% to +2.81%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +2.81%
benchmarks.run_pgo.linux.arm64.checked.mch +0.13%
benchmarks.run_tiered.linux.arm64.checked.mch +1.34%
coreclr_tests.run.linux.arm64.checked.mch +0.53%
libraries.crossgen2.linux.arm64.checked.mch +1.24%
libraries.pmi.linux.arm64.checked.mch +1.80%
libraries_tests.run.linux.arm64.Release.mch +0.16%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +1.82%
realworld.run.linux.arm64.checked.mch +2.59%
smoke_tests.nativeaot.linux.arm64.checked.mch +2.07%
MinOpts (-0.31% to +5.68%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.55%
benchmarks.run_pgo.linux.arm64.checked.mch -0.11%
benchmarks.run_tiered.linux.arm64.checked.mch -0.05%
coreclr_tests.run.linux.arm64.checked.mch -0.31%
libraries.crossgen2.linux.arm64.checked.mch +0.76%
libraries.pmi.linux.arm64.checked.mch +5.68%
libraries_tests.run.linux.arm64.Release.mch -0.24%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.13%
realworld.run.linux.arm64.checked.mch +2.17%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.55%
FullOpts (+0.16% to +2.82%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +2.82%
benchmarks.run_pgo.linux.arm64.checked.mch +0.16%
benchmarks.run_tiered.linux.arm64.checked.mch +2.76%
coreclr_tests.run.linux.arm64.checked.mch +0.87%
libraries.crossgen2.linux.arm64.checked.mch +1.24%
libraries.pmi.linux.arm64.checked.mch +1.80%
libraries_tests.run.linux.arm64.Release.mch +0.36%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +1.88%
realworld.run.linux.arm64.checked.mch +2.59%
smoke_tests.nativeaot.linux.arm64.checked.mch +2.07%

Throughput diffs for linux/x64 ran on linux/x64

Overall (+0.21% to +2.70%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +2.41%
benchmarks.run_pgo.linux.x64.checked.mch +0.21%
benchmarks.run_tiered.linux.x64.checked.mch +1.69%
coreclr_tests.run.linux.x64.checked.mch +0.89%
libraries.crossgen2.linux.x64.checked.mch +1.42%
libraries.pmi.linux.x64.checked.mch +1.95%
libraries_tests.run.linux.x64.Release.mch +0.65%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +2.03%
realworld.run.linux.x64.checked.mch +2.70%
smoke_tests.nativeaot.linux.x64.checked.mch +2.15%
MinOpts (+0.49% to +9.74%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.64%
benchmarks.run_pgo.linux.x64.checked.mch +0.51%
benchmarks.run_tiered.linux.x64.checked.mch +0.55%
coreclr_tests.run.linux.x64.checked.mch +1.25%
libraries.crossgen2.linux.x64.checked.mch +1.06%
libraries.pmi.linux.x64.checked.mch +9.74%
libraries_tests.run.linux.x64.Release.mch +0.49%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +1.79%
realworld.run.linux.x64.checked.mch +3.10%
smoke_tests.nativeaot.linux.x64.checked.mch +0.68%
FullOpts (+0.18% to +2.96%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +2.41%
benchmarks.run_pgo.linux.x64.checked.mch +0.18%
benchmarks.run_tiered.linux.x64.checked.mch +2.96%
coreclr_tests.run.linux.x64.checked.mch +0.73%
libraries.crossgen2.linux.x64.checked.mch +1.42%
libraries.pmi.linux.x64.checked.mch +1.95%
libraries_tests.run.linux.x64.Release.mch +0.69%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +2.04%
realworld.run.linux.x64.checked.mch +2.70%
smoke_tests.nativeaot.linux.x64.checked.mch +2.15%

Throughput diffs for osx/arm64 ran on linux/x64

Overall (+0.08% to +2.71%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +2.71%
benchmarks.run_pgo.osx.arm64.checked.mch +0.14%
benchmarks.run_tiered.osx.arm64.checked.mch +1.51%
coreclr_tests.run.osx.arm64.checked.mch +0.47%
libraries.crossgen2.osx.arm64.checked.mch +1.24%
libraries.pmi.osx.arm64.checked.mch +1.91%
libraries_tests.run.osx.arm64.Release.mch +0.08%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +1.82%
realworld.run.osx.arm64.checked.mch +2.58%
MinOpts (-0.25% to +5.64%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +0.65%
benchmarks.run_pgo.osx.arm64.checked.mch -0.15%
benchmarks.run_tiered.osx.arm64.checked.mch -0.07%
coreclr_tests.run.osx.arm64.checked.mch -0.25%
libraries.crossgen2.osx.arm64.checked.mch +0.76%
libraries.pmi.osx.arm64.checked.mch +5.64%
libraries_tests.run.osx.arm64.Release.mch -0.22%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +0.13%
realworld.run.osx.arm64.checked.mch +2.24%
FullOpts (+0.29% to +2.84%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +2.71%
benchmarks.run_pgo.osx.arm64.checked.mch +0.29%
benchmarks.run_tiered.osx.arm64.checked.mch +2.84%
coreclr_tests.run.osx.arm64.checked.mch +0.90%
libraries.crossgen2.osx.arm64.checked.mch +1.24%
libraries.pmi.osx.arm64.checked.mch +1.91%
libraries_tests.run.osx.arm64.Release.mch +0.48%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +1.88%
realworld.run.osx.arm64.checked.mch +2.59%

Throughput diffs for windows/arm64 ran on linux/x64

Overall (+0.08% to +2.58%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +2.58%
benchmarks.run_pgo.windows.arm64.checked.mch +0.11%
benchmarks.run_tiered.windows.arm64.checked.mch +1.34%
coreclr_tests.run.windows.arm64.checked.mch +0.49%
libraries.crossgen2.windows.arm64.checked.mch +1.22%
libraries.pmi.windows.arm64.checked.mch +1.77%
libraries_tests.run.windows.arm64.Release.mch +0.08%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +1.82%
realworld.run.windows.arm64.checked.mch +2.42%
smoke_tests.nativeaot.windows.arm64.checked.mch +2.11%
MinOpts (-0.71% to +5.68%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +0.62%
benchmarks.run_pgo.windows.arm64.checked.mch -0.13%
benchmarks.run_tiered.windows.arm64.checked.mch -0.06%
coreclr_tests.run.windows.arm64.checked.mch -0.71%
libraries.crossgen2.windows.arm64.checked.mch +0.76%
libraries.pmi.windows.arm64.checked.mch +5.68%
libraries_tests.run.windows.arm64.Release.mch -0.19%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +0.13%
realworld.run.windows.arm64.checked.mch +2.24%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.58%
FullOpts (+0.11% to +2.58%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +2.58%
benchmarks.run_pgo.windows.arm64.checked.mch +0.15%
benchmarks.run_tiered.windows.arm64.checked.mch +2.52%
coreclr_tests.run.windows.arm64.checked.mch +0.92%
libraries.crossgen2.windows.arm64.checked.mch +1.22%
libraries.pmi.windows.arm64.checked.mch +1.77%
libraries_tests.run.windows.arm64.Release.mch +0.11%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +1.87%
realworld.run.windows.arm64.checked.mch +2.42%
smoke_tests.nativeaot.windows.arm64.checked.mch +2.11%

Throughput diffs for windows/x64 ran on linux/x64

Overall (-0.65% to +2.65%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch -0.65%
benchmarks.run.windows.x64.checked.mch +2.65%
benchmarks.run_pgo.windows.x64.checked.mch +0.37%
benchmarks.run_tiered.windows.x64.checked.mch +1.65%
coreclr_tests.run.windows.x64.checked.mch +0.86%
libraries.crossgen2.windows.x64.checked.mch +1.42%
libraries.pmi.windows.x64.checked.mch +1.91%
libraries_tests.run.windows.x64.Release.mch +0.63%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +2.08%
realworld.run.windows.x64.checked.mch +2.58%
smoke_tests.nativeaot.windows.x64.checked.mch +2.18%
MinOpts (+0.45% to +10.18%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch +0.60%
benchmarks.run.windows.x64.checked.mch +1.09%
benchmarks.run_pgo.windows.x64.checked.mch +0.64%
benchmarks.run_tiered.windows.x64.checked.mch +0.70%
coreclr_tests.run.windows.x64.checked.mch +1.09%
libraries.crossgen2.windows.x64.checked.mch +1.09%
libraries.pmi.windows.x64.checked.mch +10.18%
libraries_tests.run.windows.x64.Release.mch +0.45%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +2.03%
realworld.run.windows.x64.checked.mch +3.09%
smoke_tests.nativeaot.windows.x64.checked.mch +0.72%
FullOpts (-0.85% to +2.65%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch -0.85%
benchmarks.run.windows.x64.checked.mch +2.65%
benchmarks.run_pgo.windows.x64.checked.mch +0.28%
benchmarks.run_tiered.windows.x64.checked.mch +2.60%
coreclr_tests.run.windows.x64.checked.mch +0.74%
libraries.crossgen2.windows.x64.checked.mch +1.42%
libraries.pmi.windows.x64.checked.mch +1.91%
libraries_tests.run.windows.x64.Release.mch +0.79%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +2.08%
realworld.run.windows.x64.checked.mch +2.57%
smoke_tests.nativeaot.windows.x64.checked.mch +2.18%

Details here


@ryujit-bot
Copy link

Diff results for #98054

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 1,536,730 contexts (368,644 MinOpts, 1,168,086 FullOpts).

MISSED contexts: base: 316 (0.02%), diff: 76,964 (4.77%)

Overall (+1,183,860 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 10,759,020 +80,844
benchmarks.run_pgo.linux.arm64.checked.mch 63,686,268 -21,392
benchmarks.run_tiered.linux.arm64.checked.mch 19,798,224 +33,608
coreclr_tests.run.linux.arm64.checked.mch 295,682,080 +13,688
libraries.crossgen2.linux.arm64.checked.mch 54,686,356 +183,380
libraries.pmi.linux.arm64.checked.mch 61,288,276 +311,268
libraries_tests.run.linux.arm64.Release.mch 37,104,084 +40,840
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 126,685,772 +433,340
realworld.run.linux.arm64.checked.mch 12,403,860 +93,016
smoke_tests.nativeaot.linux.arm64.checked.mch 2,535,652 +15,268
MinOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch 21,282,624 -8
benchmarks.run_tiered.linux.arm64.checked.mch 15,778,624 -8
coreclr_tests.run.linux.arm64.checked.mch 160,793,764 +0
libraries.pmi.linux.arm64.checked.mch 119,984 +0
libraries_tests.run.linux.arm64.Release.mch 23,895,476 +0
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 13,402,832 +0
FullOpts (+1,183,876 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 10,625,704 +80,844
benchmarks.run_pgo.linux.arm64.checked.mch 42,403,644 -21,384
benchmarks.run_tiered.linux.arm64.checked.mch 4,019,600 +33,616
coreclr_tests.run.linux.arm64.checked.mch 134,888,316 +13,688
libraries.crossgen2.linux.arm64.checked.mch 54,684,720 +183,380
libraries.pmi.linux.arm64.checked.mch 61,168,292 +311,268
libraries_tests.run.linux.arm64.Release.mch 13,208,608 +40,840
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 113,282,940 +433,340
realworld.run.linux.arm64.checked.mch 11,821,656 +93,016
smoke_tests.nativeaot.linux.arm64.checked.mch 2,534,664 +15,268

Assembly diffs for linux/x64 ran on windows/x64

Diffs are based on 1,546,466 contexts (360,162 MinOpts, 1,186,304 FullOpts).

MISSED contexts: base: 265 (0.02%), diff: 77,380 (4.77%)

Overall (+2,454,719 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.x64.checked.mch 10,099,690 +115,641
benchmarks.run_pgo.linux.x64.checked.mch 55,943,861 +9,830
benchmarks.run_tiered.linux.x64.checked.mch 18,062,441 +42,452
coreclr_tests.run.linux.x64.checked.mch 242,934,718 +252,275
libraries.crossgen2.linux.x64.checked.mch 37,887,110 +288,753
libraries.pmi.linux.x64.checked.mch 48,565,136 +576,517
libraries_tests.run.linux.x64.Release.mch 30,459,618 +234,014
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 102,474,514 +695,729
realworld.run.linux.x64.checked.mch 10,222,975 +188,047
smoke_tests.nativeaot.linux.x64.checked.mch 3,611,585 +51,461
MinOpts (-11 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.linux.x64.checked.mch 17,746,512 -2
benchmarks.run_tiered.linux.x64.checked.mch 15,055,746 -2
coreclr_tests.run.linux.x64.checked.mch 140,366,881 +0
libraries.crossgen2.linux.x64.checked.mch 1,198 +0
libraries.pmi.linux.x64.checked.mch 112,857 +0
libraries_tests.run.linux.x64.Release.mch 15,927,817 -7
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 10,583,855 +0
FullOpts (+2,454,730 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.x64.checked.mch 9,929,988 +115,641
benchmarks.run_pgo.linux.x64.checked.mch 38,197,349 +9,832
benchmarks.run_tiered.linux.x64.checked.mch 3,006,695 +42,454
coreclr_tests.run.linux.x64.checked.mch 102,567,837 +252,275
libraries.crossgen2.linux.x64.checked.mch 37,885,912 +288,753
libraries.pmi.linux.x64.checked.mch 48,452,279 +576,517
libraries_tests.run.linux.x64.Release.mch 14,531,801 +234,021
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 91,890,659 +695,729
realworld.run.linux.x64.checked.mch 9,834,439 +188,047
smoke_tests.nativeaot.linux.x64.checked.mch 3,610,636 +51,461

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 1,660,469 contexts (561,303 MinOpts, 1,099,166 FullOpts).

MISSED contexts: base: 227 (0.01%), diff: 76,048 (4.38%)

Overall (+1,273,248 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 8,830,016 +78,904
benchmarks.run_pgo.osx.arm64.checked.mch 24,158,400 -2,688
benchmarks.run_tiered.osx.arm64.checked.mch 14,959,196 +30,980
coreclr_tests.run.osx.arm64.checked.mch 384,586,092 +109,528
libraries.crossgen2.osx.arm64.checked.mch 54,579,628 +182,384
libraries.pmi.osx.arm64.checked.mch 64,676,624 +338,492
libraries_tests.run.osx.arm64.Release.mch 72,410,840 +49,372
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch 125,434,348 +395,244
realworld.run.osx.arm64.checked.mch 11,733,820 +91,032
MinOpts (-168 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch 15,994,412 -8
benchmarks.run_tiered.osx.arm64.checked.mch 11,521,636 -8
coreclr_tests.run.osx.arm64.checked.mch 251,411,576 +0
libraries.pmi.osx.arm64.checked.mch 121,128 +0
libraries_tests.run.osx.arm64.Release.mch 60,384,980 -152
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch 13,059,360 +0
FullOpts (+1,273,416 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 8,829,280 +78,904
benchmarks.run_pgo.osx.arm64.checked.mch 8,163,988 -2,680
benchmarks.run_tiered.osx.arm64.checked.mch 3,437,560 +30,988
coreclr_tests.run.osx.arm64.checked.mch 133,174,516 +109,528
libraries.crossgen2.osx.arm64.checked.mch 54,578,000 +182,384
libraries.pmi.osx.arm64.checked.mch 64,555,496 +338,492
libraries_tests.run.osx.arm64.Release.mch 12,025,860 +49,524
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch 112,374,988 +395,244
realworld.run.osx.arm64.checked.mch 11,169,868 +91,032

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 1,401,964 contexts (263,527 MinOpts, 1,138,437 FullOpts).

MISSED contexts: base: 247 (0.02%), diff: 78,791 (5.32%)

Overall (+1,213,456 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 8,566,940 +77,272
benchmarks.run_pgo.windows.arm64.checked.mch 34,767,736 -14,548
benchmarks.run_tiered.windows.arm64.checked.mch 14,659,024 +30,500
coreclr_tests.run.windows.arm64.checked.mch 271,490,652 +114,164
libraries.crossgen2.windows.arm64.checked.mch 57,736,832 +190,396
libraries.pmi.windows.arm64.checked.mch 64,354,940 +326,904
libraries_tests.run.windows.arm64.Release.mch 5,836,220 -1,460
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch 131,037,732 +375,968
realworld.run.windows.arm64.checked.mch 12,344,168 +94,400
smoke_tests.nativeaot.windows.arm64.checked.mch 3,423,284 +19,860
MinOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch 13,026,864 -8
benchmarks.run_tiered.windows.arm64.checked.mch 11,198,832 -8
coreclr_tests.run.windows.arm64.checked.mch 138,292,568 +0
libraries.pmi.windows.arm64.checked.mch 119,984 +0
libraries_tests.run.windows.arm64.Release.mch 1,224,000 +0
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch 13,059,280 +0
FullOpts (+1,213,472 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 8,566,404 +77,272
benchmarks.run_pgo.windows.arm64.checked.mch 21,740,872 -14,540
benchmarks.run_tiered.windows.arm64.checked.mch 3,460,192 +30,508
coreclr_tests.run.windows.arm64.checked.mch 133,198,084 +114,164
libraries.crossgen2.windows.arm64.checked.mch 57,735,196 +190,396
libraries.pmi.windows.arm64.checked.mch 64,234,956 +326,904
libraries_tests.run.windows.arm64.Release.mch 4,612,220 -1,460
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch 117,978,452 +375,968
realworld.run.windows.arm64.checked.mch 11,780,192 +94,400
smoke_tests.nativeaot.windows.arm64.checked.mch 3,422,272 +19,860

Assembly diffs for windows/x64 ran on windows/x64

Diffs are based on 1,915,694 contexts (587,569 MinOpts, 1,328,125 FullOpts).

MISSED contexts: base: 373 (0.02%), diff: 87,176 (4.35%)

Overall (+2,646,963 bytes)
Collection Base size (bytes) Diff size (bytes)
aspnet.run.windows.x64.checked.mch 44,258,494 -127,822
benchmarks.run.windows.x64.checked.mch 9,258,280 +181,239
benchmarks.run_pgo.windows.x64.checked.mch 32,800,681 +52,024
benchmarks.run_tiered.windows.x64.checked.mch 18,809,905 +58,820
coreclr_tests.run.windows.x64.checked.mch 291,190,967 +406,581
libraries.crossgen2.windows.x64.checked.mch 38,455,544 +272,770
libraries.pmi.windows.x64.checked.mch 54,873,751 +611,430
libraries_tests.run.windows.x64.Release.mch 41,283,781 +123,799
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch 112,234,381 +794,141
realworld.run.windows.x64.checked.mch 11,552,376 +215,205
smoke_tests.nativeaot.windows.x64.checked.mch 4,353,584 +58,776
MinOpts (-23 bytes)
Collection Base size (bytes) Diff size (bytes)
aspnet.run.windows.x64.checked.mch 18,390,919 -3
benchmarks.run_pgo.windows.x64.checked.mch 18,836,696 -3
benchmarks.run_tiered.windows.x64.checked.mch 15,367,889 -3
coreclr_tests.run.windows.x64.checked.mch 185,774,390 +0
libraries.crossgen2.windows.x64.checked.mch 1,187 +0
libraries.pmi.windows.x64.checked.mch 113,521 +0
libraries_tests.run.windows.x64.Release.mch 31,641,880 -14
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch 10,782,870 +0
FullOpts (+2,646,986 bytes)
Collection Base size (bytes) Diff size (bytes)
aspnet.run.windows.x64.checked.mch 25,867,575 -127,819
benchmarks.run.windows.x64.checked.mch 9,257,685 +181,239
benchmarks.run_pgo.windows.x64.checked.mch 13,963,985 +52,027
benchmarks.run_tiered.windows.x64.checked.mch 3,442,016 +58,823
coreclr_tests.run.windows.x64.checked.mch 105,416,577 +406,581
libraries.crossgen2.windows.x64.checked.mch 38,454,357 +272,770
libraries.pmi.windows.x64.checked.mch 54,760,230 +611,430
libraries_tests.run.windows.x64.Release.mch 9,641,901 +123,813
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch 101,451,511 +794,141
realworld.run.windows.x64.checked.mch 11,165,767 +215,205
smoke_tests.nativeaot.windows.x64.checked.mch 4,352,637 +58,776

Details here


Assembly diffs for linux/arm ran on windows/x86

Diffs are based on 1,383,559 contexts (345,734 MinOpts, 1,037,825 FullOpts).

MISSED contexts: base: 54,343 (3.61%), diff: 121,291 (8.06%)

Overall (+1,422,504 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 12,211,474 +144,216
benchmarks.run_pgo.linux.arm.checked.mch 21,667,458 +92,932
benchmarks.run_tiered.linux.arm.checked.mch 16,812,366 +126,954
coreclr_tests.run.linux.arm.checked.mch 315,775,792 +241,110
libraries.crossgen2.linux.arm.checked.mch 31,059,614 +96,226
libraries.pmi.linux.arm.checked.mch 40,595,468 +236,910
libraries_tests.run.linux.arm.Release.mch 16,008,592 +74,398
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch 73,558,612 +255,992
realworld.run.linux.arm.checked.mch 11,277,914 +153,766
MinOpts (-4 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.linux.arm.checked.mch 4,921,152 +0
benchmarks.run_tiered.linux.arm.checked.mch 7,367,290 -4
coreclr_tests.run.linux.arm.checked.mch 212,434,950 +0
libraries.pmi.linux.arm.checked.mch 106,224 +0
libraries_tests.run.linux.arm.Release.mch 597,060 +0
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch 10,029,770 +0
FullOpts (+1,422,508 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 11,898,898 +144,216
benchmarks.run_pgo.linux.arm.checked.mch 16,746,306 +92,932
benchmarks.run_tiered.linux.arm.checked.mch 9,445,076 +126,958
coreclr_tests.run.linux.arm.checked.mch 103,340,842 +241,110
libraries.crossgen2.linux.arm.checked.mch 31,058,384 +96,226
libraries.pmi.linux.arm.checked.mch 40,489,244 +236,910
libraries_tests.run.linux.arm.Release.mch 15,411,532 +74,398
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch 63,528,842 +255,992
realworld.run.linux.arm.checked.mch 10,842,842 +153,766

Assembly diffs for windows/x86 ran on windows/x86

Diffs are based on 1,529,353 contexts (327,626 MinOpts, 1,201,727 FullOpts).

MISSED contexts: base: 799 (0.05%), diff: 100,304 (6.15%)

Overall (+2,640,345 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 8,042,044 +192,717
benchmarks.run_pgo.windows.x86.checked.mch 28,754,577 +234,686
benchmarks.run_tiered.windows.x86.checked.mch 12,099,955 +140,973
coreclr_tests.run.windows.x86.checked.mch 210,972,421 +226,256
libraries.crossgen2.windows.x86.checked.mch 29,314,718 +259,842
libraries.pmi.windows.x86.checked.mch 39,429,027 +502,430
libraries_tests.run.windows.x86.Release.mch 13,052,418 +174,246
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch 83,805,955 +733,594
realworld.run.windows.x86.checked.mch 8,444,744 +175,601
MinOpts (-15 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.windows.x86.checked.mch 6,121,948 -6
benchmarks.run_tiered.windows.x86.checked.mch 6,854,637 -9
coreclr_tests.run.windows.x86.checked.mch 122,261,024 +0
libraries.crossgen2.windows.x86.checked.mch 1,060 +0
libraries.pmi.windows.x86.checked.mch 95,233 +0
libraries_tests.run.windows.x86.Release.mch 5,490,195 +0
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch 8,952,773 +0
FullOpts (+2,640,360 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 8,041,566 +192,717
benchmarks.run_pgo.windows.x86.checked.mch 22,632,629 +234,692
benchmarks.run_tiered.windows.x86.checked.mch 5,245,318 +140,982
coreclr_tests.run.windows.x86.checked.mch 88,711,397 +226,256
libraries.crossgen2.windows.x86.checked.mch 29,313,658 +259,842
libraries.pmi.windows.x86.checked.mch 39,333,794 +502,430
libraries_tests.run.windows.x86.Release.mch 7,562,223 +174,246
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch 74,853,182 +733,594
realworld.run.windows.x86.checked.mch 8,149,030 +175,601

Details here


Throughput diffs

Throughput diffs for linux/arm ran on windows/x86

Overall (-0.20% to +2.58%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +1.92%
benchmarks.run_pgo.linux.arm.checked.mch -0.20%
benchmarks.run_tiered.linux.arm.checked.mch +1.50%
coreclr_tests.run.linux.arm.checked.mch +0.70%
libraries.crossgen2.linux.arm.checked.mch +1.34%
libraries.pmi.linux.arm.checked.mch +1.84%
libraries_tests.run.linux.arm.Release.mch +0.60%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +1.83%
realworld.run.linux.arm.checked.mch +2.58%
MinOpts (-0.22% to +7.90%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +0.57%
benchmarks.run_pgo.linux.arm.checked.mch -0.22%
benchmarks.run_tiered.linux.arm.checked.mch +0.02%
coreclr_tests.run.linux.arm.checked.mch +0.61%
libraries.crossgen2.linux.arm.checked.mch +0.70%
libraries.pmi.linux.arm.checked.mch +7.90%
libraries_tests.run.linux.arm.Release.mch +0.10%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +1.48%
realworld.run.linux.arm.checked.mch +1.81%
FullOpts (-0.20% to +2.59%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +1.94%
benchmarks.run_pgo.linux.arm.checked.mch -0.20%
benchmarks.run_tiered.linux.arm.checked.mch +1.85%
coreclr_tests.run.linux.arm.checked.mch +0.76%
libraries.crossgen2.linux.arm.checked.mch +1.34%
libraries.pmi.linux.arm.checked.mch +1.84%
libraries_tests.run.linux.arm.Release.mch +0.60%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +1.85%
realworld.run.linux.arm.checked.mch +2.59%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.93% to +2.79%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +2.79%
benchmarks.run_pgo.windows.x86.checked.mch +0.93%
benchmarks.run_tiered.windows.x86.checked.mch +2.11%
coreclr_tests.run.windows.x86.checked.mch +1.33%
libraries.crossgen2.windows.x86.checked.mch +1.41%
libraries.pmi.windows.x86.checked.mch +1.79%
libraries_tests.run.windows.x86.Release.mch +1.24%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +1.97%
realworld.run.windows.x86.checked.mch +2.30%
MinOpts (+0.33% to +8.98%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +1.01%
benchmarks.run_pgo.windows.x86.checked.mch +0.42%
benchmarks.run_tiered.windows.x86.checked.mch +0.42%
coreclr_tests.run.windows.x86.checked.mch +1.26%
libraries.crossgen2.windows.x86.checked.mch +0.87%
libraries.pmi.windows.x86.checked.mch +8.98%
libraries_tests.run.windows.x86.Release.mch +0.33%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +1.54%
realworld.run.windows.x86.checked.mch +3.40%
FullOpts (+0.96% to +2.79%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +2.79%
benchmarks.run_pgo.windows.x86.checked.mch +0.96%
benchmarks.run_tiered.windows.x86.checked.mch +2.63%
coreclr_tests.run.windows.x86.checked.mch +1.35%
libraries.crossgen2.windows.x86.checked.mch +1.41%
libraries.pmi.windows.x86.checked.mch +1.79%
libraries_tests.run.windows.x86.Release.mch +1.40%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +1.98%
realworld.run.windows.x86.checked.mch +2.30%

Details here


Throughput diffs for linux/arm64 ran on linux/x64

Overall (+0.12% to +2.83%)
Collection PDIFF
libraries.pmi.linux.arm64.checked.mch +1.85%
benchmarks.run_pgo.linux.arm64.checked.mch +0.12%
libraries_tests.run.linux.arm64.Release.mch +0.23%
realworld.run.linux.arm64.checked.mch +2.64%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +1.86%
benchmarks.run_tiered.linux.arm64.checked.mch +1.42%
benchmarks.run.linux.arm64.checked.mch +2.83%
coreclr_tests.run.linux.arm64.checked.mch +0.55%
libraries.crossgen2.linux.arm64.checked.mch +1.31%
smoke_tests.nativeaot.linux.arm64.checked.mch +2.14%
MinOpts (-0.11% to +5.70%)
Collection PDIFF
libraries.pmi.linux.arm64.checked.mch +5.70%
libraries_tests.run.linux.arm64.Release.mch -0.11%
realworld.run.linux.arm64.checked.mch +2.18%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.51%
benchmarks.run_tiered.linux.arm64.checked.mch +0.07%
benchmarks.run.linux.arm64.checked.mch +0.57%
coreclr_tests.run.linux.arm64.checked.mch -0.11%
libraries.crossgen2.linux.arm64.checked.mch +0.79%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.62%
FullOpts (+0.13% to +2.83%)
Collection PDIFF
libraries.pmi.linux.arm64.checked.mch +1.84%
benchmarks.run_pgo.linux.arm64.checked.mch +0.13%
libraries_tests.run.linux.arm64.Release.mch +0.40%
realworld.run.linux.arm64.checked.mch +2.64%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +1.91%
benchmarks.run_tiered.linux.arm64.checked.mch +2.79%
benchmarks.run.linux.arm64.checked.mch +2.83%
coreclr_tests.run.linux.arm64.checked.mch +0.83%
libraries.crossgen2.linux.arm64.checked.mch +1.31%
smoke_tests.nativeaot.linux.arm64.checked.mch +2.14%

Throughput diffs for linux/x64 ran on linux/x64

Overall (+0.19% to +2.74%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +2.44%
realworld.run.linux.x64.checked.mch +2.74%
smoke_tests.nativeaot.linux.x64.checked.mch +2.20%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +2.05%
benchmarks.run_pgo.linux.x64.checked.mch +0.19%
libraries.crossgen2.linux.x64.checked.mch +1.46%
coreclr_tests.run.linux.x64.checked.mch +0.79%
libraries_tests.run.linux.x64.Release.mch +0.64%
benchmarks.run_tiered.linux.x64.checked.mch +1.68%
libraries.pmi.linux.x64.checked.mch +1.98%
MinOpts (+0.45% to +9.30%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.59%
realworld.run.linux.x64.checked.mch +2.94%
smoke_tests.nativeaot.linux.x64.checked.mch +0.73%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +1.54%
benchmarks.run_pgo.linux.x64.checked.mch +0.47%
libraries.crossgen2.linux.x64.checked.mch +1.00%
coreclr_tests.run.linux.x64.checked.mch +1.03%
libraries_tests.run.linux.x64.Release.mch +0.45%
benchmarks.run_tiered.linux.x64.checked.mch +0.52%
libraries.pmi.linux.x64.checked.mch +9.30%
FullOpts (+0.16% to +2.97%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +2.45%
realworld.run.linux.x64.checked.mch +2.74%
smoke_tests.nativeaot.linux.x64.checked.mch +2.20%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +2.06%
benchmarks.run_pgo.linux.x64.checked.mch +0.16%
libraries.crossgen2.linux.x64.checked.mch +1.46%
coreclr_tests.run.linux.x64.checked.mch +0.67%
libraries_tests.run.linux.x64.Release.mch +0.70%
benchmarks.run_tiered.linux.x64.checked.mch +2.97%
libraries.pmi.linux.x64.checked.mch +1.98%

Details here


Throughput diffs for linux/arm64 ran on windows/x64

Overall (+0.23% to +0.68%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.55%
benchmarks.run_pgo.linux.arm64.checked.mch +0.23%
benchmarks.run_tiered.linux.arm64.checked.mch +0.53%
coreclr_tests.run.linux.arm64.checked.mch +0.61%
libraries.crossgen2.linux.arm64.checked.mch +0.46%
libraries.pmi.linux.arm64.checked.mch +0.50%
libraries_tests.run.linux.arm64.Release.mch +0.30%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.53%
realworld.run.linux.arm64.checked.mch +0.54%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.68%
MinOpts (+0.40% to +6.79%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.50%
benchmarks.run_pgo.linux.arm64.checked.mch +0.43%
benchmarks.run_tiered.linux.arm64.checked.mch +0.47%
coreclr_tests.run.linux.arm64.checked.mch +1.33%
libraries.crossgen2.linux.arm64.checked.mch +0.74%
libraries.pmi.linux.arm64.checked.mch +6.79%
libraries_tests.run.linux.arm64.Release.mch +0.40%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +1.43%
realworld.run.linux.arm64.checked.mch +2.19%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.46%
FullOpts (+0.20% to +0.68%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.55%
benchmarks.run_pgo.linux.arm64.checked.mch +0.20%
benchmarks.run_tiered.linux.arm64.checked.mch +0.59%
coreclr_tests.run.linux.arm64.checked.mch +0.33%
libraries.crossgen2.linux.arm64.checked.mch +0.46%
libraries.pmi.linux.arm64.checked.mch +0.50%
libraries_tests.run.linux.arm64.Release.mch +0.26%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.51%
realworld.run.linux.arm64.checked.mch +0.52%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.68%

Throughput diffs for linux/x64 ran on windows/x64

Overall (+0.23% to +0.77%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.61%
benchmarks.run_pgo.linux.x64.checked.mch +0.23%
benchmarks.run_tiered.linux.x64.checked.mch +0.59%
coreclr_tests.run.linux.x64.checked.mch +0.66%
libraries.crossgen2.linux.x64.checked.mch +0.52%
libraries.pmi.linux.x64.checked.mch +0.53%
libraries_tests.run.linux.x64.Release.mch +0.33%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.56%
realworld.run.linux.x64.checked.mch +0.56%
smoke_tests.nativeaot.linux.x64.checked.mch +0.77%
MinOpts (+0.48% to +7.46%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.56%
benchmarks.run_pgo.linux.x64.checked.mch +0.48%
benchmarks.run_tiered.linux.x64.checked.mch +0.49%
coreclr_tests.run.linux.x64.checked.mch +1.35%
libraries.crossgen2.linux.x64.checked.mch +0.84%
libraries.pmi.linux.x64.checked.mch +7.46%
libraries_tests.run.linux.x64.Release.mch +0.48%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +1.57%
realworld.run.linux.x64.checked.mch +2.96%
smoke_tests.nativeaot.linux.x64.checked.mch +0.55%
FullOpts (+0.20% to +0.77%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.61%
benchmarks.run_pgo.linux.x64.checked.mch +0.20%
benchmarks.run_tiered.linux.x64.checked.mch +0.69%
coreclr_tests.run.linux.x64.checked.mch +0.37%
libraries.crossgen2.linux.x64.checked.mch +0.52%
libraries.pmi.linux.x64.checked.mch +0.52%
libraries_tests.run.linux.x64.Release.mch +0.29%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.54%
realworld.run.linux.x64.checked.mch +0.55%
smoke_tests.nativeaot.linux.x64.checked.mch +0.77%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (+0.32% to +0.58%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +0.56%
benchmarks.run_pgo.osx.arm64.checked.mch +0.33%
benchmarks.run_tiered.osx.arm64.checked.mch +0.58%
coreclr_tests.run.osx.arm64.checked.mch +0.57%
libraries.crossgen2.osx.arm64.checked.mch +0.46%
libraries.pmi.osx.arm64.checked.mch +0.56%
libraries_tests.run.osx.arm64.Release.mch +0.32%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +0.53%
realworld.run.osx.arm64.checked.mch +0.54%
MinOpts (+0.35% to +6.74%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +0.70%
benchmarks.run_pgo.osx.arm64.checked.mch +0.53%
benchmarks.run_tiered.osx.arm64.checked.mch +0.57%
coreclr_tests.run.osx.arm64.checked.mch +0.98%
libraries.crossgen2.osx.arm64.checked.mch +0.74%
libraries.pmi.osx.arm64.checked.mch +6.74%
libraries_tests.run.osx.arm64.Release.mch +0.35%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +1.47%
realworld.run.osx.arm64.checked.mch +2.27%
FullOpts (+0.24% to +0.59%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +0.56%
benchmarks.run_pgo.osx.arm64.checked.mch +0.24%
benchmarks.run_tiered.osx.arm64.checked.mch +0.59%
coreclr_tests.run.osx.arm64.checked.mch +0.34%
libraries.crossgen2.osx.arm64.checked.mch +0.46%
libraries.pmi.osx.arm64.checked.mch +0.56%
libraries_tests.run.osx.arm64.Release.mch +0.29%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +0.51%
realworld.run.osx.arm64.checked.mch +0.52%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (+0.25% to +0.69%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +0.56%
benchmarks.run_pgo.windows.arm64.checked.mch +0.25%
benchmarks.run_tiered.windows.arm64.checked.mch +0.58%
coreclr_tests.run.windows.arm64.checked.mch +0.53%
libraries.crossgen2.windows.arm64.checked.mch +0.45%
libraries.pmi.windows.arm64.checked.mch +0.50%
libraries_tests.run.windows.arm64.Release.mch +0.27%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +0.53%
realworld.run.windows.arm64.checked.mch +0.54%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.69%
MinOpts (+0.47% to +6.80%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +0.66%
benchmarks.run_pgo.windows.arm64.checked.mch +0.54%
benchmarks.run_tiered.windows.arm64.checked.mch +0.57%
coreclr_tests.run.windows.arm64.checked.mch +1.11%
libraries.crossgen2.windows.arm64.checked.mch +0.74%
libraries.pmi.windows.arm64.checked.mch +6.80%
libraries_tests.run.windows.arm64.Release.mch +0.53%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +1.47%
realworld.run.windows.arm64.checked.mch +2.27%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.47%
FullOpts (+0.21% to +0.69%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +0.56%
benchmarks.run_pgo.windows.arm64.checked.mch +0.21%
benchmarks.run_tiered.windows.arm64.checked.mch +0.59%
coreclr_tests.run.windows.arm64.checked.mch +0.33%
libraries.crossgen2.windows.arm64.checked.mch +0.45%
libraries.pmi.windows.arm64.checked.mch +0.50%
libraries_tests.run.windows.arm64.Release.mch +0.25%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +0.51%
realworld.run.windows.arm64.checked.mch +0.53%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.69%

Throughput diffs for windows/x64 ran on windows/x64

Overall (+0.32% to +0.76%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch +0.32%
benchmarks.run.windows.x64.checked.mch +0.62%
benchmarks.run_pgo.windows.x64.checked.mch +0.32%
benchmarks.run_tiered.windows.x64.checked.mch +0.67%
coreclr_tests.run.windows.x64.checked.mch +0.64%
libraries.crossgen2.windows.x64.checked.mch +0.52%
libraries.pmi.windows.x64.checked.mch +0.53%
libraries_tests.run.windows.x64.Release.mch +0.37%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +0.56%
realworld.run.windows.x64.checked.mch +0.57%
smoke_tests.nativeaot.windows.x64.checked.mch +0.76%
MinOpts (+0.46% to +7.80%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch +0.57%
benchmarks.run.windows.x64.checked.mch +0.83%
benchmarks.run_pgo.windows.x64.checked.mch +0.62%
benchmarks.run_tiered.windows.x64.checked.mch +0.66%
coreclr_tests.run.windows.x64.checked.mch +1.17%
libraries.crossgen2.windows.x64.checked.mch +0.86%
libraries.pmi.windows.x64.checked.mch +7.80%
libraries_tests.run.windows.x64.Release.mch +0.46%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +1.62%
realworld.run.windows.x64.checked.mch +2.95%
smoke_tests.nativeaot.windows.x64.checked.mch +0.58%
FullOpts (+0.24% to +0.76%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch +0.28%
benchmarks.run.windows.x64.checked.mch +0.62%
benchmarks.run_pgo.windows.x64.checked.mch +0.24%
benchmarks.run_tiered.windows.x64.checked.mch +0.68%
coreclr_tests.run.windows.x64.checked.mch +0.37%
libraries.crossgen2.windows.x64.checked.mch +0.52%
libraries.pmi.windows.x64.checked.mch +0.53%
libraries_tests.run.windows.x64.Release.mch +0.30%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +0.54%
realworld.run.windows.x64.checked.mch +0.56%
smoke_tests.nativeaot.windows.x64.checked.mch +0.76%

Details here


Throughput diffs for linux/arm ran on linux/x86

Overall (+0.21% to +0.57%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +0.52%
benchmarks.run_pgo.linux.arm.checked.mch +0.21%
benchmarks.run_tiered.linux.arm.checked.mch +0.49%
coreclr_tests.run.linux.arm.checked.mch +0.57%
libraries.crossgen2.linux.arm.checked.mch +0.42%
libraries.pmi.linux.arm.checked.mch +0.47%
libraries_tests.run.linux.arm.Release.mch +0.25%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +0.50%
realworld.run.linux.arm.checked.mch +0.55%
MinOpts (+0.28% to +6.67%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +0.48%
benchmarks.run_pgo.linux.arm.checked.mch +0.28%
benchmarks.run_tiered.linux.arm.checked.mch +0.36%
coreclr_tests.run.linux.arm.checked.mch +0.95%
libraries.crossgen2.linux.arm.checked.mch +0.67%
libraries.pmi.linux.arm.checked.mch +6.67%
libraries_tests.run.linux.arm.Release.mch +0.41%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +1.35%
realworld.run.linux.arm.checked.mch +1.98%
FullOpts (+0.21% to +0.54%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +0.52%
benchmarks.run_pgo.linux.arm.checked.mch +0.21%
benchmarks.run_tiered.linux.arm.checked.mch +0.52%
coreclr_tests.run.linux.arm.checked.mch +0.33%
libraries.crossgen2.linux.arm.checked.mch +0.42%
libraries.pmi.linux.arm.checked.mch +0.47%
libraries_tests.run.linux.arm.Release.mch +0.25%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +0.47%
realworld.run.linux.arm.checked.mch +0.54%

Details here


@ryujit-bot
Copy link

Diff results for #98054

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 1,613,384 contexts (368,644 MinOpts, 1,244,740 FullOpts).

MISSED contexts: 316 (0.02%)

Overall (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.linux.arm64.checked.mch 63,764,680 -16
FullOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.linux.arm64.checked.mch 63,763,044 -16

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 1,736,294 contexts (561,303 MinOpts, 1,174,991 FullOpts).

MISSED contexts: 227 (0.01%)

Overall (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.osx.arm64.checked.mch 63,645,568 -16
FullOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.osx.arm64.checked.mch 63,643,940 -16

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 1,480,514 contexts (263,527 MinOpts, 1,216,987 FullOpts).

MISSED contexts: 247 (0.02%)

Overall (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.windows.arm64.checked.mch 66,990,496 -16
FullOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.windows.arm64.checked.mch 66,988,860 -16

Assembly diffs for windows/x64 ran on windows/x64

Diffs are based on 2,002,515 contexts (587,594 MinOpts, 1,414,921 FullOpts).

MISSED contexts: 373 (0.02%)

Overall (-7 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.windows.x64.checked.mch 44,929,099 -7
FullOpts (-7 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.windows.x64.checked.mch 44,927,912 -7

Details here


Throughput diffs

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.35% to +0.67%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +0.62%
benchmarks.run_pgo.windows.x86.checked.mch +0.35%
benchmarks.run_tiered.windows.x86.checked.mch +0.63%
coreclr_tests.run.windows.x86.checked.mch +0.67%
libraries.crossgen2.windows.x86.checked.mch +0.53%
libraries.pmi.windows.x86.checked.mch +0.54%
libraries_tests.run.windows.x86.Release.mch +0.35%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +0.57%
realworld.run.windows.x86.checked.mch +0.57%
MinOpts (+0.44% to +9.00%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +0.80%
benchmarks.run_pgo.windows.x86.checked.mch +0.51%
benchmarks.run_tiered.windows.x86.checked.mch +0.52%
coreclr_tests.run.windows.x86.checked.mch +1.47%
libraries.crossgen2.windows.x86.checked.mch +0.77%
libraries.pmi.windows.x86.checked.mch +9.00%
libraries_tests.run.windows.x86.Release.mch +0.44%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +1.79%
realworld.run.windows.x86.checked.mch +3.29%
FullOpts (+0.34% to +0.66%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +0.62%
benchmarks.run_pgo.windows.x86.checked.mch +0.34%
benchmarks.run_tiered.windows.x86.checked.mch +0.66%
coreclr_tests.run.windows.x86.checked.mch +0.39%
libraries.crossgen2.windows.x86.checked.mch +0.53%
libraries.pmi.windows.x86.checked.mch +0.53%
libraries_tests.run.windows.x86.Release.mch +0.34%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +0.55%
realworld.run.windows.x86.checked.mch +0.56%

Details here


Throughput diffs for linux/arm64 ran on linux/x64

Overall (+0.22% to +0.68%)
Collection PDIFF
realworld.run.linux.arm64.checked.mch +0.53%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.68%
libraries.pmi.linux.arm64.checked.mch +0.49%
benchmarks.run_tiered.linux.arm64.checked.mch +0.56%
libraries.crossgen2.linux.arm64.checked.mch +0.46%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.52%
benchmarks.run_pgo.linux.arm64.checked.mch +0.22%
coreclr_tests.run.linux.arm64.checked.mch +0.58%
benchmarks.run.linux.arm64.checked.mch +0.56%
libraries_tests.run.linux.arm64.Release.mch +0.31%
MinOpts (+0.43% to +6.76%)
Collection PDIFF
realworld.run.linux.arm64.checked.mch +2.19%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.48%
libraries.pmi.linux.arm64.checked.mch +6.76%
benchmarks.run_tiered.linux.arm64.checked.mch +0.51%
libraries.crossgen2.linux.arm64.checked.mch +0.73%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +1.54%
benchmarks.run_pgo.linux.arm64.checked.mch +0.47%
coreclr_tests.run.linux.arm64.checked.mch +1.22%
benchmarks.run.linux.arm64.checked.mch +0.50%
libraries_tests.run.linux.arm64.Release.mch +0.43%
FullOpts (+0.18% to +0.68%)
Collection PDIFF
realworld.run.linux.arm64.checked.mch +0.52%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.68%
libraries.pmi.linux.arm64.checked.mch +0.49%
benchmarks.run_tiered.linux.arm64.checked.mch +0.60%
libraries.crossgen2.linux.arm64.checked.mch +0.46%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.49%
benchmarks.run_pgo.linux.arm64.checked.mch +0.18%
coreclr_tests.run.linux.arm64.checked.mch +0.32%
benchmarks.run.linux.arm64.checked.mch +0.56%
libraries_tests.run.linux.arm64.Release.mch +0.25%

Throughput diffs for linux/x64 ran on linux/x64

Overall (+0.21% to +0.77%)
Collection PDIFF
smoke_tests.nativeaot.linux.x64.checked.mch +0.77%
libraries.pmi.linux.x64.checked.mch +0.52%
libraries_tests.run.linux.x64.Release.mch +0.33%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.55%
benchmarks.run_tiered.linux.x64.checked.mch +0.62%
libraries.crossgen2.linux.x64.checked.mch +0.52%
coreclr_tests.run.linux.x64.checked.mch +0.63%
benchmarks.run_pgo.linux.x64.checked.mch +0.21%
benchmarks.run.linux.x64.checked.mch +0.61%
realworld.run.linux.x64.checked.mch +0.56%
MinOpts (+0.51% to +7.42%)
Collection PDIFF
smoke_tests.nativeaot.linux.x64.checked.mch +0.56%
libraries.pmi.linux.x64.checked.mch +7.42%
libraries_tests.run.linux.x64.Release.mch +0.51%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +1.66%
benchmarks.run_tiered.linux.x64.checked.mch +0.53%
libraries.crossgen2.linux.x64.checked.mch +0.82%
coreclr_tests.run.linux.x64.checked.mch +1.21%
benchmarks.run_pgo.linux.x64.checked.mch +0.52%
benchmarks.run.linux.x64.checked.mch +0.55%
realworld.run.linux.x64.checked.mch +2.89%
FullOpts (+0.18% to +0.77%)
Collection PDIFF
smoke_tests.nativeaot.linux.x64.checked.mch +0.77%
libraries.pmi.linux.x64.checked.mch +0.52%
libraries_tests.run.linux.x64.Release.mch +0.29%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.52%
benchmarks.run_tiered.linux.x64.checked.mch +0.70%
libraries.crossgen2.linux.x64.checked.mch +0.52%
coreclr_tests.run.linux.x64.checked.mch +0.36%
benchmarks.run_pgo.linux.x64.checked.mch +0.18%
benchmarks.run.linux.x64.checked.mch +0.61%
realworld.run.linux.x64.checked.mch +0.54%

Details here


jkoritzinsky and others added 17 commits February 6, 2024 16:05
Extracting a piece of dotnet#87045 that I had to revert in that PR. Native linkers don't like when LSDA is in a COMDAT so fold these in the object writer instead. Seems to save about 1.2% in the Stage1 app. Obviously Unix only.
The split between `Delegate` and `MulticastDelegate` is a wart that likely has some history behind it. Types that inherit from `Delegate` directly would not be considered delegates by the runtime. They need to inherit `MulticastDelegate. I can't find a reason why we'd need some useless base implementation of these methods that immediately gets overriden in `MulticastDelegate`. This deletes the useless base implementation and moves the useful implementation from `MulticastDelegate` to `Delegate`.

This along with dotnet#97951 saves ~40 bytes per delegate `MethodTable` because the virtual methods can now be devirtualized or placed into the sealed vtable. We might be able to do even more since technically sealed virtuals could be reshuffled after the codegen phase and slots eliminated then.
* STJ: Skip usage of indexer for KeyedCollection

* Add deserialization test

---------

Co-authored-by: Eirik Tsarpalis <eirik.tsarpalis@gmail.com>
Co-authored-by: Marek Fišera <mara@neptuo.com>
* [Mono] [Arm64] Add SIMD support for vector ctors

* fix ctors for mini arm64
* [wasm][mt] Improve blocking wait detection and tests

Add check to the `SemaphoreSlim.Wait`. The wait will eventually continue
to the `Monitor.Wait`, it can spin wait first though and return, so catch
it earlier to avoid non-deterministic behavior.

Improve the blocking wait detection and extract it to the new method. Also
introduce helper method to force a blocking wait in places we want it
on the JS interop threads.

* Feedback
…ence-packages build 20240207.1 (dotnet#98090)

Microsoft.SourceBuild.Intermediate.source-build-reference-packages
 From Version 9.0.0-alpha.1.24101.2 -> To Version 9.0.0-alpha.1.24107.1

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
* Update dependencies from https://github.com/dotnet/arcade build 20240206.2

Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Build.Tasks.Archives , Microsoft.DotNet.Build.Tasks.Feed , Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Build.Tasks.Packaging , Microsoft.DotNet.Build.Tasks.TargetFramework , Microsoft.DotNet.Build.Tasks.Templating , Microsoft.DotNet.Build.Tasks.Workloads , Microsoft.DotNet.CodeAnalysis , Microsoft.DotNet.GenAPI , Microsoft.DotNet.GenFacades , Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.PackageTesting , Microsoft.DotNet.RemoteExecutor , Microsoft.DotNet.SharedFramework.Sdk , Microsoft.DotNet.VersionTools.Tasks , Microsoft.DotNet.XliffTasks , Microsoft.DotNet.XUnitAssert , Microsoft.DotNet.XUnitConsoleRunner , Microsoft.DotNet.XUnitExtensions
 From Version 9.0.0-beta.24081.4 -> To Version 9.0.0-beta.24106.2

* Update dependencies from https://github.com/dotnet/arcade build 20240206.2

Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Build.Tasks.Archives , Microsoft.DotNet.Build.Tasks.Feed , Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Build.Tasks.Packaging , Microsoft.DotNet.Build.Tasks.TargetFramework , Microsoft.DotNet.Build.Tasks.Templating , Microsoft.DotNet.Build.Tasks.Workloads , Microsoft.DotNet.CodeAnalysis , Microsoft.DotNet.GenAPI , Microsoft.DotNet.GenFacades , Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.PackageTesting , Microsoft.DotNet.RemoteExecutor , Microsoft.DotNet.SharedFramework.Sdk , Microsoft.DotNet.VersionTools.Tasks , Microsoft.DotNet.XliffTasks , Microsoft.DotNet.XUnitAssert , Microsoft.DotNet.XUnitConsoleRunner , Microsoft.DotNet.XUnitExtensions
 From Version 9.0.0-beta.24081.4 -> To Version 9.0.0-beta.24106.2

* Update dependencies from https://github.com/dotnet/arcade build 20240206.2

Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Build.Tasks.Archives , Microsoft.DotNet.Build.Tasks.Feed , Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Build.Tasks.Packaging , Microsoft.DotNet.Build.Tasks.TargetFramework , Microsoft.DotNet.Build.Tasks.Templating , Microsoft.DotNet.Build.Tasks.Workloads , Microsoft.DotNet.CodeAnalysis , Microsoft.DotNet.GenAPI , Microsoft.DotNet.GenFacades , Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.PackageTesting , Microsoft.DotNet.RemoteExecutor , Microsoft.DotNet.SharedFramework.Sdk , Microsoft.DotNet.VersionTools.Tasks , Microsoft.DotNet.XliffTasks , Microsoft.DotNet.XUnitAssert , Microsoft.DotNet.XUnitConsoleRunner , Microsoft.DotNet.XUnitExtensions
 From Version 9.0.0-beta.24081.4 -> To Version 9.0.0-beta.24106.2

* Update dependencies from https://github.com/dotnet/arcade build 20240206.2

Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Build.Tasks.Archives , Microsoft.DotNet.Build.Tasks.Feed , Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Build.Tasks.Packaging , Microsoft.DotNet.Build.Tasks.TargetFramework , Microsoft.DotNet.Build.Tasks.Templating , Microsoft.DotNet.Build.Tasks.Workloads , Microsoft.DotNet.CodeAnalysis , Microsoft.DotNet.GenAPI , Microsoft.DotNet.GenFacades , Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.PackageTesting , Microsoft.DotNet.RemoteExecutor , Microsoft.DotNet.SharedFramework.Sdk , Microsoft.DotNet.VersionTools.Tasks , Microsoft.DotNet.XliffTasks , Microsoft.DotNet.XUnitAssert , Microsoft.DotNet.XUnitConsoleRunner , Microsoft.DotNet.XUnitExtensions
 From Version 9.0.0-beta.24081.4 -> To Version 9.0.0-beta.24106.2

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
* Add encoding for ARM64 IF_SVE_CJ_2A instruction group

* fix merge conflicts

* Fix conflicts

---------

Co-authored-by: Kunal Pathak <Kunal.Pathak@microsoft.com>
* Remove StackFrameIterator.ShouldSkipRegularGcReporting

* Adjust windows-x64 offsets
…read.browser-wasm is not found` (dotnet#98083)

* Invert the logic: prepare MT nuget for ST and ST nuget for MT.

* We have only 2 runtimes now.

* Added clarification
…net#97713)

* Take into account the local involved in GT_SWITCH for resolution

* consolidate the logic, remove ifdef

* Add handling for op2
MichalStrehovsky and others added 8 commits February 8, 2024 13:38
…tnet#98084)

link.exe hardcodes a list of [magic symbol names](https://learn.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-warning-lnk4104?view=msvc-170) that it thinks should not be generated into import library and emits warnings if they are.

We don't have a mechanism to set visibility of `UnmanagedCallersOnly` methods and I don't think we'd want to make a public API for that. But this means that users get a warning that is not particularly actionable. We could either replicate this magic list of symbol names into compiler and generate these as `PRIVATE` (but then how do people opt out if they don't actually want this as `PRIVATE`?), or we can just suppress the warning.

This PR suppresses the warning.
* Improved uninitialized object creation performance

* Remove duplicate GenericCache getter call, revert to direct throw

Co-authored-by: Jan Kotas <jkotas@microsoft.com>

---------

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
… runtime (dotnet#98094)

Only trigger it for wasm-specific changes in PRs, not libraries/illink.
…orrectly (dotnet#98125)

* Ensure that the various `Max*Number` and `Min*Number` APIs optimize correctly

* Don't mark the test methods as AO

* Add a missing using statement to the test
)

* Update TensorPrimitives to vectorize for size(T) is 1 or 2

It was previously only 4 or 8. This does the work previously skipped to enable the "less than largest available vector" path to handle these smaller sizes as well.

* Remove some unnecessary aggregations from small paths

* Fix copy/paste comments
…Y_3B (dotnet#98136)

* Implement IF_SVE_GU_3{A,B,C}

* Implement IF_SVE_GX_3{A,B,C}

* Implement IF_SVE_GY_3B

* Implement IF_SVE_FF_3{A,B,C}
@AndyAyersMS
Copy link
Member

@AndyAyersMS running profile synthesis as-is to set edge likelihoods was prohibitively expensive, so I tweaked AssignLikelihoods to only set likelihoods (i.e. skip block weight computations), and to skip the loop edge heuristic for setting BBJ_COND likelihoods (as that requires finding loops first). Ignoring coreclr_tests, this still seems expensive. We could save a bit more TP by using completely naive edge likelihoods (like 1/NumSucc()), though I'm not sure how big a difference that would make. With these TP costs in mind, do you think it's worth initializing all edge likelihoods, regardless of the presence or quality of profile data?

I think you can do this more cheaply by checking for the AssignLikelihoodsOnly option first and running it and exiting before we build DFS/loops. Then (if necessary) refactor the loop-aware heuristics to only run if loops are valid.

So something like:

void ProfileSynthesis::Run(ProfileSynthesisOption option)
{   
    if (option == ProfileSynthesisOption::AssignLikelihoodsOnly)
    {
        AssignLikelihoods();
        return;
    }

    m_dfsTree = m_comp->fgComputeDfs();
    m_loops   = FlowGraphNaturalLoops::Find(m_dfsTree);

    // Retain or compute edge likelihood information
    //
    switch (option)
    {
        case ProfileSynthesisOption::AssignLikelihoods:
            AssignLikelihoods();
            break;

@amanasifkhalid
Copy link
Member Author

I think you can do this more cheaply by checking for the AssignLikelihoodsOnly option first and running it and exiting before we build DFS/loops.

I tried that in the last commit, albeit somewhat sloppily: I moved the DFS/loop logic to below the switch statement, and commented out the loop-aware heuristics in AssignLikelihoodCond so that we don't need loop info at all to assign likelihoods. This still proves to be a bit expensive for MinOpts TP, though only for a few collections.

By the way, do you know if there's a way to view which contexts in a collection had the largest TP diffs, kind of like what we can do with asmdiffs? I wonder if the largest TP regressions in MinOpts are driven by just a few outliers, considering the relatively low impact in other collections.

@AndyAyersMS
Copy link
Member

Likely the cost is in all those calls to fgGetPredForBlock -- for each block B it needs to search each successor block pred list for the edges from B. And some successor blocks can have a lot of pred edges.

Unfortunately, our edge info representation is currently biased in favor of edge targets and not edge sources. The ultimate fix for this is something like

  • double-thread FlowEdges so successor edges can be directly enumerated,
  • (more radical) have the successor blocks be described only by their FlowEdges (so a BBJ_COND block, say has two FlowEdges, not two BasicBlocks, to describe what happens next).

@amanasifkhalid
Copy link
Member Author

I see... I'm tempted to try out your second option. For that, I'm guessing we'd need to add a new member to FlowEdge for the destination block, and then replace BasicBlock::bbTarget et al with the successor FlowEdge*. Then BasicBlock::GetTarget() can return bbTargetEdge->getDestinationBlock() (or something like that).

In the meantime, to avoid the fgGetPredForBlock overhead, we could try initializing edge likelihoods with these heuristic values when we first create the edges in fgMakeBasicBlocks. Let me see if that fixes the TP issue.

@AndyAyersMS
Copy link
Member

Using FlowEdge would be a big change, but feel free to give it a go and see how big.

@AndyAyersMS
Copy link
Member

Thinking about this some more, if you want to drive it from the target side, then I suppose the simple equally-likely projection is better than nothing.

So say in fgAddRefPred when initializingPreds is true, you could set the likelihood to something like (1/#source block successors) * flDupCount as a "better than nothing" value.

@amanasifkhalid
Copy link
Member Author

Sorry for the pings -- my branch got messed up locally. Gonna close this in lieu of a new PR.

@ryujit-bot
Copy link

Diff results for #98054

Assembly diffs

Assembly diffs for linux/arm64 ran on linux/x64

Diffs are based on 1,610,272 contexts (368,644 MinOpts, 1,241,628 FullOpts).

MISSED contexts: 3,428 (0.21%)

Overall (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm64.checked.mch 301,232,224 -16
FullOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm64.checked.mch 140,438,460 -16

Assembly diffs for linux/x64 ran on linux/x64

Diffs are based on 1,620,764 contexts (360,162 MinOpts, 1,260,602 FullOpts).

MISSED contexts: 3,086 (0.19%)

Overall (-15 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.x64.checked.mch 247,129,711 -15
FullOpts (-15 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.x64.checked.mch 106,762,830 -15

Assembly diffs for osx/arm64 ran on linux/x64

Diffs are based on 1,733,061 contexts (561,303 MinOpts, 1,171,758 FullOpts).

MISSED contexts: 3,460 (0.20%)

Overall (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.osx.arm64.checked.mch 390,212,620 -16
FullOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.osx.arm64.checked.mch 138,801,044 -16

Assembly diffs for windows/arm64 ran on linux/x64

Diffs are based on 1,477,297 contexts (263,527 MinOpts, 1,213,770 FullOpts).

MISSED contexts: 3,464 (0.23%)

Overall (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.arm64.checked.mch 277,084,748 -16
FullOpts (-16 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.arm64.checked.mch 138,792,180 -16

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.03%
benchmarks.run_pgo.linux.arm64.checked.mch +0.04%
benchmarks.run_tiered.linux.arm64.checked.mch +0.03%
coreclr_tests.run.linux.arm64.checked.mch +0.02%
libraries.crossgen2.linux.arm64.checked.mch +0.02%
libraries.pmi.linux.arm64.checked.mch +0.03%
libraries_tests.run.linux.arm64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.03%
realworld.run.linux.arm64.checked.mch +0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.03%
MinOpts (+0.02% to +0.08%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.02%
benchmarks.run_pgo.linux.arm64.checked.mch +0.03%
benchmarks.run_tiered.linux.arm64.checked.mch +0.03%
coreclr_tests.run.linux.arm64.checked.mch +0.02%
libraries.crossgen2.linux.arm64.checked.mch +0.04%
libraries.pmi.linux.arm64.checked.mch +0.05%
libraries_tests.run.linux.arm64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.03%
realworld.run.linux.arm64.checked.mch +0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.03%
FullOpts (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.03%
benchmarks.run_pgo.linux.arm64.checked.mch +0.04%
benchmarks.run_tiered.linux.arm64.checked.mch +0.03%
coreclr_tests.run.linux.arm64.checked.mch +0.02%
libraries.crossgen2.linux.arm64.checked.mch +0.02%
libraries.pmi.linux.arm64.checked.mch +0.03%
libraries_tests.run.linux.arm64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.03%
realworld.run.linux.arm64.checked.mch +0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.03%

Throughput diffs for linux/x64 ran on windows/x64

Overall (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.03%
benchmarks.run_pgo.linux.x64.checked.mch +0.04%
benchmarks.run_tiered.linux.x64.checked.mch +0.04%
coreclr_tests.run.linux.x64.checked.mch +0.02%
libraries.crossgen2.linux.x64.checked.mch +0.03%
libraries.pmi.linux.x64.checked.mch +0.03%
libraries_tests.run.linux.x64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.03%
realworld.run.linux.x64.checked.mch +0.03%
smoke_tests.nativeaot.linux.x64.checked.mch +0.04%
MinOpts (+0.02% to +0.11%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.02%
benchmarks.run_pgo.linux.x64.checked.mch +0.03%
benchmarks.run_tiered.linux.x64.checked.mch +0.03%
coreclr_tests.run.linux.x64.checked.mch +0.02%
libraries.crossgen2.linux.x64.checked.mch +0.04%
libraries.pmi.linux.x64.checked.mch +0.06%
libraries_tests.run.linux.x64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.04%
realworld.run.linux.x64.checked.mch +0.11%
smoke_tests.nativeaot.linux.x64.checked.mch +0.03%
FullOpts (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.linux.x64.checked.mch +0.03%
benchmarks.run_pgo.linux.x64.checked.mch +0.04%
benchmarks.run_tiered.linux.x64.checked.mch +0.04%
coreclr_tests.run.linux.x64.checked.mch +0.02%
libraries.crossgen2.linux.x64.checked.mch +0.03%
libraries.pmi.linux.x64.checked.mch +0.03%
libraries_tests.run.linux.x64.Release.mch +0.04%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.03%
realworld.run.linux.x64.checked.mch +0.02%
smoke_tests.nativeaot.linux.x64.checked.mch +0.04%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +0.03%
benchmarks.run_pgo.osx.arm64.checked.mch +0.04%
benchmarks.run_tiered.osx.arm64.checked.mch +0.04%
coreclr_tests.run.osx.arm64.checked.mch +0.02%
libraries.crossgen2.osx.arm64.checked.mch +0.02%
libraries.pmi.osx.arm64.checked.mch +0.03%
libraries_tests.run.osx.arm64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +0.03%
realworld.run.osx.arm64.checked.mch +0.02%
MinOpts (+0.02% to +0.08%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +0.03%
benchmarks.run_pgo.osx.arm64.checked.mch +0.04%
benchmarks.run_tiered.osx.arm64.checked.mch +0.04%
coreclr_tests.run.osx.arm64.checked.mch +0.02%
libraries.crossgen2.osx.arm64.checked.mch +0.04%
libraries.pmi.osx.arm64.checked.mch +0.06%
libraries_tests.run.osx.arm64.Release.mch +0.02%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +0.03%
realworld.run.osx.arm64.checked.mch +0.08%
FullOpts (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.osx.arm64.checked.mch +0.03%
benchmarks.run_pgo.osx.arm64.checked.mch +0.04%
benchmarks.run_tiered.osx.arm64.checked.mch +0.03%
coreclr_tests.run.osx.arm64.checked.mch +0.02%
libraries.crossgen2.osx.arm64.checked.mch +0.02%
libraries.pmi.osx.arm64.checked.mch +0.03%
libraries_tests.run.osx.arm64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch +0.03%
realworld.run.osx.arm64.checked.mch +0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +0.03%
benchmarks.run_pgo.windows.arm64.checked.mch +0.04%
benchmarks.run_tiered.windows.arm64.checked.mch +0.04%
coreclr_tests.run.windows.arm64.checked.mch +0.02%
libraries.crossgen2.windows.arm64.checked.mch +0.02%
libraries.pmi.windows.arm64.checked.mch +0.03%
libraries_tests.run.windows.arm64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +0.03%
realworld.run.windows.arm64.checked.mch +0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.04%
MinOpts (+0.02% to +0.09%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +0.02%
benchmarks.run_pgo.windows.arm64.checked.mch +0.04%
benchmarks.run_tiered.windows.arm64.checked.mch +0.04%
coreclr_tests.run.windows.arm64.checked.mch +0.02%
libraries.crossgen2.windows.arm64.checked.mch +0.04%
libraries.pmi.windows.arm64.checked.mch +0.05%
libraries_tests.run.windows.arm64.Release.mch +0.04%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +0.03%
realworld.run.windows.arm64.checked.mch +0.09%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.03%
FullOpts (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.windows.arm64.checked.mch +0.03%
benchmarks.run_pgo.windows.arm64.checked.mch +0.04%
benchmarks.run_tiered.windows.arm64.checked.mch +0.03%
coreclr_tests.run.windows.arm64.checked.mch +0.02%
libraries.crossgen2.windows.arm64.checked.mch +0.02%
libraries.pmi.windows.arm64.checked.mch +0.03%
libraries_tests.run.windows.arm64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch +0.03%
realworld.run.windows.arm64.checked.mch +0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.04%

Throughput diffs for windows/x64 ran on windows/x64

Overall (+0.02% to +0.04%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch +0.03%
benchmarks.run.windows.x64.checked.mch +0.03%
benchmarks.run_pgo.windows.x64.checked.mch +0.04%
benchmarks.run_tiered.windows.x64.checked.mch +0.04%
coreclr_tests.run.windows.x64.checked.mch +0.02%
libraries.crossgen2.windows.x64.checked.mch +0.03%
libraries.pmi.windows.x64.checked.mch +0.03%
libraries_tests.run.windows.x64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +0.03%
realworld.run.windows.x64.checked.mch +0.03%
smoke_tests.nativeaot.windows.x64.checked.mch +0.04%
MinOpts (+0.02% to +0.11%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch +0.04%
benchmarks.run.windows.x64.checked.mch +0.04%
benchmarks.run_pgo.windows.x64.checked.mch +0.04%
benchmarks.run_tiered.windows.x64.checked.mch +0.05%
coreclr_tests.run.windows.x64.checked.mch +0.02%
libraries.crossgen2.windows.x64.checked.mch +0.04%
libraries.pmi.windows.x64.checked.mch +0.07%
libraries_tests.run.windows.x64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +0.04%
realworld.run.windows.x64.checked.mch +0.11%
smoke_tests.nativeaot.windows.x64.checked.mch +0.03%
FullOpts (+0.02% to +0.04%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch +0.03%
benchmarks.run.windows.x64.checked.mch +0.03%
benchmarks.run_pgo.windows.x64.checked.mch +0.04%
benchmarks.run_tiered.windows.x64.checked.mch +0.04%
coreclr_tests.run.windows.x64.checked.mch +0.02%
libraries.crossgen2.windows.x64.checked.mch +0.03%
libraries.pmi.windows.x64.checked.mch +0.03%
libraries_tests.run.windows.x64.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.x64.Release.mch +0.03%
realworld.run.windows.x64.checked.mch +0.02%
smoke_tests.nativeaot.windows.x64.checked.mch +0.04%

Details here


Throughput diffs for windows/x86 ran on linux/x86

Overall (+0.02% to +0.03%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +0.03%
benchmarks.run_pgo.windows.x86.checked.mch +0.03%
benchmarks.run_tiered.windows.x86.checked.mch +0.03%
coreclr_tests.run.windows.x86.checked.mch +0.02%
libraries.crossgen2.windows.x86.checked.mch +0.02%
libraries.pmi.windows.x86.checked.mch +0.03%
libraries_tests.run.windows.x86.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +0.03%
realworld.run.windows.x86.checked.mch +0.02%
MinOpts (+0.01% to +0.11%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +0.03%
benchmarks.run_pgo.windows.x86.checked.mch +0.03%
benchmarks.run_tiered.windows.x86.checked.mch +0.03%
coreclr_tests.run.windows.x86.checked.mch +0.01%
libraries.crossgen2.windows.x86.checked.mch +0.03%
libraries.pmi.windows.x86.checked.mch +0.07%
libraries_tests.run.windows.x86.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +0.04%
realworld.run.windows.x86.checked.mch +0.11%
FullOpts (+0.02% to +0.03%)
Collection PDIFF
benchmarks.run.windows.x86.checked.mch +0.03%
benchmarks.run_pgo.windows.x86.checked.mch +0.03%
benchmarks.run_tiered.windows.x86.checked.mch +0.03%
coreclr_tests.run.windows.x86.checked.mch +0.02%
libraries.crossgen2.windows.x86.checked.mch +0.02%
libraries.pmi.windows.x86.checked.mch +0.03%
libraries_tests.run.windows.x86.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch +0.03%
realworld.run.windows.x86.checked.mch +0.02%

Details here


@ryujit-bot
Copy link

Diff results for #98054

Assembly diffs

Assembly diffs for windows/x64 ran on windows/x64

Diffs are based on 1,999,231 contexts (587,594 MinOpts, 1,411,637 FullOpts).

MISSED contexts: 3,657 (0.18%)

Overall (-2 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x64.checked.mch 296,147,901 -2
FullOpts (-2 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x64.checked.mch 110,373,511 -2

Details here


Assembly diffs for linux/arm ran on windows/x86

Diffs are based on 1,449,330 contexts (345,734 MinOpts, 1,103,596 FullOpts).

MISSED contexts: 55,656 (3.70%)

Overall (+0 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm.checked.mch 321,240,776 +0
FullOpts (+0 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm.checked.mch 108,805,826 +0

Assembly diffs for windows/x86 ran on windows/x86

Diffs are based on 1,618,717 contexts (327,626 MinOpts, 1,291,091 FullOpts).

MISSED contexts: base: 11,019 (0.68%), diff: 11,022 (0.68%)

Overall (+38 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x86.checked.mch 215,108,619 +38
FullOpts (+38 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x86.checked.mch 92,847,595 +38

Details here


Throughput diffs

Throughput diffs for linux/arm ran on windows/x86

Overall (+0.02% to +0.03%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +0.03%
benchmarks.run_pgo.linux.arm.checked.mch +0.02%
benchmarks.run_tiered.linux.arm.checked.mch +0.02%
coreclr_tests.run.linux.arm.checked.mch +0.02%
libraries.crossgen2.linux.arm.checked.mch +0.02%
libraries.pmi.linux.arm.checked.mch +0.02%
libraries_tests.run.linux.arm.Release.mch +0.02%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +0.03%
realworld.run.linux.arm.checked.mch +0.03%
MinOpts (+0.02% to +0.07%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +0.02%
benchmarks.run_pgo.linux.arm.checked.mch +0.02%
benchmarks.run_tiered.linux.arm.checked.mch +0.02%
coreclr_tests.run.linux.arm.checked.mch +0.02%
libraries.crossgen2.linux.arm.checked.mch +0.03%
libraries.pmi.linux.arm.checked.mch +0.05%
libraries_tests.run.linux.arm.Release.mch +0.03%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +0.03%
realworld.run.linux.arm.checked.mch +0.07%
FullOpts (+0.02% to +0.03%)
Collection PDIFF
benchmarks.run.linux.arm.checked.mch +0.03%
benchmarks.run_pgo.linux.arm.checked.mch +0.02%
benchmarks.run_tiered.linux.arm.checked.mch +0.02%
coreclr_tests.run.linux.arm.checked.mch +0.02%
libraries.crossgen2.linux.arm.checked.mch +0.02%
libraries.pmi.linux.arm.checked.mch +0.02%
libraries_tests.run.linux.arm.Release.mch +0.02%
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch +0.03%
realworld.run.linux.arm.checked.mch +0.03%

Details here


Throughput diffs for linux/arm64 ran on linux/x64

Overall (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.03%
libraries_tests.run.linux.arm64.Release.mch +0.04%
libraries.pmi.linux.arm64.checked.mch +0.03%
realworld.run.linux.arm64.checked.mch +0.03%
benchmarks.run_pgo.linux.arm64.checked.mch +0.04%
coreclr_tests.run.linux.arm64.checked.mch +0.02%
libraries.crossgen2.linux.arm64.checked.mch +0.03%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.04%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.03%
benchmarks.run_tiered.linux.arm64.checked.mch +0.04%
MinOpts (+0.02% to +0.09%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.03%
libraries_tests.run.linux.arm64.Release.mch +0.03%
libraries.pmi.linux.arm64.checked.mch +0.07%
realworld.run.linux.arm64.checked.mch +0.09%
benchmarks.run_pgo.linux.arm64.checked.mch +0.03%
coreclr_tests.run.linux.arm64.checked.mch +0.02%
libraries.crossgen2.linux.arm64.checked.mch +0.04%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.04%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.04%
benchmarks.run_tiered.linux.arm64.checked.mch +0.04%
FullOpts (+0.02% to +0.04%)
Collection PDIFF
benchmarks.run.linux.arm64.checked.mch +0.04%
libraries_tests.run.linux.arm64.Release.mch +0.04%
libraries.pmi.linux.arm64.checked.mch +0.03%
realworld.run.linux.arm64.checked.mch +0.03%
benchmarks.run_pgo.linux.arm64.checked.mch +0.04%
coreclr_tests.run.linux.arm64.checked.mch +0.02%
libraries.crossgen2.linux.arm64.checked.mch +0.03%
smoke_tests.nativeaot.linux.arm64.checked.mch +0.04%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch +0.03%
benchmarks.run_tiered.linux.arm64.checked.mch +0.04%

Throughput diffs for linux/x64 ran on linux/x64

Overall (+0.03% to +0.05%)
Collection PDIFF
libraries.pmi.linux.x64.checked.mch +0.03%
smoke_tests.nativeaot.linux.x64.checked.mch +0.04%
realworld.run.linux.x64.checked.mch +0.03%
coreclr_tests.run.linux.x64.checked.mch +0.03%
libraries.crossgen2.linux.x64.checked.mch +0.03%
benchmarks.run.linux.x64.checked.mch +0.04%
libraries_tests.run.linux.x64.Release.mch +0.04%
benchmarks.run_pgo.linux.x64.checked.mch +0.05%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.04%
benchmarks.run_tiered.linux.x64.checked.mch +0.04%
MinOpts (+0.02% to +0.12%)
Collection PDIFF
libraries.pmi.linux.x64.checked.mch +0.08%
smoke_tests.nativeaot.linux.x64.checked.mch +0.04%
realworld.run.linux.x64.checked.mch +0.12%
coreclr_tests.run.linux.x64.checked.mch +0.02%
libraries.crossgen2.linux.x64.checked.mch +0.05%
benchmarks.run.linux.x64.checked.mch +0.03%
libraries_tests.run.linux.x64.Release.mch +0.04%
benchmarks.run_pgo.linux.x64.checked.mch +0.04%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.04%
benchmarks.run_tiered.linux.x64.checked.mch +0.04%
FullOpts (+0.03% to +0.05%)
Collection PDIFF
libraries.pmi.linux.x64.checked.mch +0.03%
smoke_tests.nativeaot.linux.x64.checked.mch +0.04%
realworld.run.linux.x64.checked.mch +0.03%
coreclr_tests.run.linux.x64.checked.mch +0.03%
libraries.crossgen2.linux.x64.checked.mch +0.03%
benchmarks.run.linux.x64.checked.mch +0.04%
libraries_tests.run.linux.x64.Release.mch +0.04%
benchmarks.run_pgo.linux.x64.checked.mch +0.05%
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch +0.04%
benchmarks.run_tiered.linux.x64.checked.mch +0.04%

Details here


@jakobbotsch
Copy link
Member

By the way, do you know if there's a way to view which contexts in a collection had the largest TP diffs, kind of like what we can do with asmdiffs? I wonder if the largest TP regressions in MinOpts are driven by just a few outliers, considering the relatively low impact in other collections.

Currently this requires a somewhat manual process (#85755 is about automatically including examples in the generated report).

To do it manually you can pass --skip_cleanup to your superpmi.py tpdiff invocation. After that you can look at the .csv file that is saved in the temp folder (look for Temp Location: in the SPMI run log file). You can open that in Excel and find the outliers based on the "Base instructions"/"Diff instructions" columns.

@amanasifkhalid
Copy link
Member Author

To do it manually you can pass --skip_cleanup to your superpmi.py tpdiff invocation. After that you can look at the .csv file that is saved in the temp folder (look for Temp Location: in the SPMI run log file). You can open that in Excel and find the outliers based on the "Base instructions"/"Diff instructions" columns.

Thanks for this!

amanasifkhalid added a commit that referenced this pull request Feb 9, 2024
Part of #93020. Per discussion on #98054, set "naive" edge likelihoods (in other words, assume every successor edge is equally likely to be taken) in fgAddRefPred when initializing preds.
amanasifkhalid added a commit that referenced this pull request Feb 10, 2024
Part of #93020. Per conversation in #98054, I'm going to try to replace BasicBlock's block successor pointers (bbTarget, bbFalseTarget, etc) with FlowEdge pointers to simplify access to successor edges. To do this, each edge is going to need access to its destination block, so that access to successor blocks is still simple. As a first step, add a destination block member to FlowEdge.
@github-actions github-actions bot locked and limited conversation to collaborators Mar 12, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Projects
None yet
Development

Successfully merging this pull request may close these issues.