Skip to content
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: Remove fall-through predecessor checks in redundant branch opts #97724

Closed

Conversation

amanasifkhalid
Copy link
Member

Part of #93020. As we remove the concept of implicit fall-through from the JIT, the redundant branch opts pass shouldn't make assumptions about which predecessors of a block will fall through. This change removes JumpThreadInfo::m_fallThroughPred and the ensuing logic based on its presence.

@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 Jan 30, 2024
@ghost ghost assigned amanasifkhalid Jan 30, 2024
@ghost
Copy link

ghost commented Jan 30, 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. As we remove the concept of implicit fall-through from the JIT, the redundant branch opts pass shouldn't make assumptions about which predecessors of a block will fall through. This change removes JumpThreadInfo::m_fallThroughPred and the ensuing logic based on its presence.

Author: amanasifkhalid
Assignees: -
Labels:

area-CodeGen-coreclr

Milestone: -

@amanasifkhalid
Copy link
Member Author

Closing in favor of #97722.

@ryujit-bot
Copy link

Diff results for #97724

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,507,302 contexts (1,007,092 MinOpts, 1,500,210 FullOpts).

MISSED contexts: base: 8 (0.00%), diff: 16 (0.00%)

Overall (-16,436 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 15,555,200 -468
benchmarks.run_pgo.linux.arm64.checked.mch 80,093,860 +168
benchmarks.run_tiered.linux.arm64.checked.mch 24,598,456 -372
coreclr_tests.run.linux.arm64.checked.mch 508,732,352 -2,216
libraries.crossgen2.linux.arm64.checked.mch 55,844,108 -1,320
libraries.pmi.linux.arm64.checked.mch 76,289,160 -1,424
libraries_tests.run.linux.arm64.Release.mch 395,683,916 -7,804
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 164,998,512 -2,712
realworld.run.linux.arm64.checked.mch 15,903,660 -172
smoke_tests.nativeaot.linux.arm64.checked.mch 2,946,792 -116
FullOpts (-16,436 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 15,250,272 -468
benchmarks.run_pgo.linux.arm64.checked.mch 54,159,076 +168
benchmarks.run_tiered.linux.arm64.checked.mch 4,860,020 -372
coreclr_tests.run.linux.arm64.checked.mch 160,584,200 -2,216
libraries.crossgen2.linux.arm64.checked.mch 55,842,472 -1,320
libraries.pmi.linux.arm64.checked.mch 76,169,176 -1,424
libraries_tests.run.linux.arm64.Release.mch 180,551,964 -7,804
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch 151,501,048 -2,712
realworld.run.linux.arm64.checked.mch 15,322,736 -172
smoke_tests.nativeaot.linux.arm64.checked.mch 2,945,804 -116

Assembly diffs for linux/x64 ran on windows/x64

Diffs are based on 2,517,901 contexts (991,070 MinOpts, 1,526,831 FullOpts).

MISSED contexts: 8 (0.00%)

Overall (-18,892 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.x64.checked.mch 14,336,796 -440
benchmarks.run_pgo.linux.x64.checked.mch 71,590,604 +806
benchmarks.run_tiered.linux.x64.checked.mch 21,435,743 -82
coreclr_tests.run.linux.x64.checked.mch 403,711,067 -1,546
libraries.crossgen2.linux.x64.checked.mch 38,727,192 -1,312
libraries.pmi.linux.x64.checked.mch 60,419,372 -1,419
libraries_tests.run.linux.x64.Release.mch 337,107,943 -13,540
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 132,558,366 -1,230
realworld.run.linux.x64.checked.mch 13,175,050 -42
smoke_tests.nativeaot.linux.x64.checked.mch 4,234,485 -87
FullOpts (-18,892 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.x64.checked.mch 14,037,493 -440
benchmarks.run_pgo.linux.x64.checked.mch 47,790,615 +806
benchmarks.run_tiered.linux.x64.checked.mch 3,694,963 -82
coreclr_tests.run.linux.x64.checked.mch 123,956,365 -1,546
libraries.crossgen2.linux.x64.checked.mch 38,725,994 -1,312
libraries.pmi.linux.x64.checked.mch 60,306,515 -1,419
libraries_tests.run.linux.x64.Release.mch 153,348,250 -13,540
libraries_tests_no_tiered_compilation.run.linux.x64.Release.mch 121,940,598 -1,230
realworld.run.linux.x64.checked.mch 12,789,166 -42
smoke_tests.nativeaot.linux.x64.checked.mch 4,233,536 -87

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,837 contexts (932,669 MinOpts, 1,338,168 FullOpts).

MISSED contexts: base: 9 (0.00%), diff: 33 (0.00%)

Overall (-13,952 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 11,183,964 -460
benchmarks.run_pgo.osx.arm64.checked.mch 34,388,460 +396
benchmarks.run_tiered.osx.arm64.checked.mch 15,513,632 -384
coreclr_tests.run.osx.arm64.checked.mch 486,420,196 -1,700
libraries.crossgen2.osx.arm64.checked.mch 55,725,580 -1,276
libraries.pmi.osx.arm64.checked.mch 80,213,376 -1,636
libraries_tests.run.osx.arm64.Release.mch 324,574,672 -6,144
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch 162,569,128 -2,576
realworld.run.osx.arm64.checked.mch 15,061,040 -172
FullOpts (-13,952 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 11,183,428 -460
benchmarks.run_pgo.osx.arm64.checked.mch 18,087,160 +396
benchmarks.run_tiered.osx.arm64.checked.mch 4,009,148 -384
coreclr_tests.run.osx.arm64.checked.mch 153,807,272 -1,700
libraries.crossgen2.osx.arm64.checked.mch 55,723,952 -1,276
libraries.pmi.osx.arm64.checked.mch 80,092,248 -1,636
libraries_tests.run.osx.arm64.Release.mch 120,858,824 -6,144
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch 149,415,400 -2,576
realworld.run.osx.arm64.checked.mch 14,497,084 -172

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,341,104 contexts (938,449 MinOpts, 1,402,655 FullOpts).

MISSED contexts: base: 8 (0.00%), diff: 13 (0.00%)

Overall (-14,220 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 10,965,984 -408
benchmarks.run_pgo.windows.arm64.checked.mch 45,573,612 +256
benchmarks.run_tiered.windows.arm64.checked.mch 15,586,996 -360
coreclr_tests.run.windows.arm64.checked.mch 495,271,548 -1,956
libraries.crossgen2.windows.arm64.checked.mch 59,070,348 -1,344
libraries.pmi.windows.arm64.checked.mch 79,841,380 -1,472
libraries_tests.run.windows.arm64.Release.mch 330,789,420 -5,652
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch 171,576,132 -2,904
realworld.run.windows.arm64.checked.mch 15,904,740 -176
smoke_tests.nativeaot.windows.arm64.checked.mch 3,970,716 -204
FullOpts (-14,220 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 10,965,448 -408
benchmarks.run_pgo.windows.arm64.checked.mch 29,562,216 +256
benchmarks.run_tiered.windows.arm64.checked.mch 4,409,808 -360
coreclr_tests.run.windows.arm64.checked.mch 156,582,444 -1,956
libraries.crossgen2.windows.arm64.checked.mch 59,068,712 -1,344
libraries.pmi.windows.arm64.checked.mch 79,721,396 -1,472
libraries_tests.run.windows.arm64.Release.mch 127,355,824 -5,652
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch 158,422,384 -2,904
realworld.run.windows.arm64.checked.mch 15,340,760 -176
smoke_tests.nativeaot.windows.arm64.checked.mch 3,969,704 -204

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.00% to +0.02%)
Collection PDIFF
smoke_tests.nativeaot.linux.arm64.checked.mch +0.02%
FullOpts (-0.00% to +0.02%)
Collection PDIFF
smoke_tests.nativeaot.linux.arm64.checked.mch +0.02%

Throughput diffs for linux/x64 ran on windows/x64

Overall (-0.00% to +0.02%)
Collection PDIFF
smoke_tests.nativeaot.linux.x64.checked.mch +0.02%
FullOpts (-0.01% to +0.02%)
Collection PDIFF
benchmarks.run_tiered.linux.x64.checked.mch +0.01%
coreclr_tests.run.linux.x64.checked.mch -0.01%
libraries_tests.run.linux.x64.Release.mch -0.01%
smoke_tests.nativeaot.linux.x64.checked.mch +0.02%

Throughput diffs for osx/arm64 ran on windows/x64

FullOpts (-0.00% to +0.01%)
Collection PDIFF
benchmarks.run_tiered.osx.arm64.checked.mch +0.01%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.01% to +0.02%)
Collection PDIFF
benchmarks.run_pgo.windows.arm64.checked.mch -0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.02%
MinOpts (-0.00% to +0.01%)
Collection PDIFF
libraries.pmi.windows.arm64.checked.mch +0.01%
FullOpts (-0.01% to +0.02%)
Collection PDIFF
benchmarks.run_pgo.windows.arm64.checked.mch -0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch +0.02%

Throughput diffs for windows/x64 ran on windows/x64

Overall (-0.01% to +0.03%)
Collection PDIFF
libraries_tests.run.windows.x64.Release.mch -0.01%
smoke_tests.nativeaot.windows.x64.checked.mch +0.03%
FullOpts (-0.01% to +0.03%)
Collection PDIFF
aspnet.run.windows.x64.checked.mch -0.01%
coreclr_tests.run.windows.x64.checked.mch -0.01%
libraries_tests.run.windows.x64.Release.mch -0.01%
smoke_tests.nativeaot.windows.x64.checked.mch +0.03%

Details here


Throughput diffs for windows/x86 ran on windows/x86

Overall (-0.01% to +0.00%)
Collection PDIFF
benchmarks.run_pgo.windows.x86.checked.mch -0.01%
FullOpts (-0.01% to +0.00%)
Collection PDIFF
benchmarks.run_pgo.windows.x86.checked.mch -0.01%

Details here


Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.00% to +0.02%)
Collection PDIFF
smoke_tests.nativeaot.linux.arm64.checked.mch +0.02%
FullOpts (-0.00% to +0.02%)
Collection PDIFF
smoke_tests.nativeaot.linux.arm64.checked.mch +0.02%

Throughput diffs for linux/x64 ran on linux/x64

Overall (-0.01% to +0.02%)
Collection PDIFF
libraries_tests.run.linux.x64.Release.mch -0.01%
smoke_tests.nativeaot.linux.x64.checked.mch +0.02%
FullOpts (-0.01% to +0.02%)
Collection PDIFF
libraries_tests.run.linux.x64.Release.mch -0.01%
smoke_tests.nativeaot.linux.x64.checked.mch +0.02%
benchmarks.run_pgo.linux.x64.checked.mch +0.01%

Details here


@ryujit-bot
Copy link

Diff results for #97724

Assembly diffs

Assembly diffs for linux/arm ran on windows/x86

Diffs are based on 2,239,382 contexts (829,328 MinOpts, 1,410,054 FullOpts).

MISSED contexts: base: 71,273 (3.08%), diff: 71,282 (3.08%)

Overall (-12,784 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 15,290,340 -314
benchmarks.run_pgo.linux.arm.checked.mch 63,958,726 +404
benchmarks.run_tiered.linux.arm.checked.mch 21,546,378 -312
coreclr_tests.run.linux.arm.checked.mch 321,753,452 -1,118
libraries.crossgen2.linux.arm.checked.mch 34,522,594 -862
libraries.pmi.linux.arm.checked.mch 49,852,844 -1,144
libraries_tests.run.linux.arm.Release.mch 243,854,234 -6,772
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch 94,520,720 -2,552
realworld.run.linux.arm.checked.mch 13,606,688 -114
FullOpts (-12,784 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 14,901,138 -314
benchmarks.run_pgo.linux.arm.checked.mch 52,758,760 +404
benchmarks.run_tiered.linux.arm.checked.mch 12,893,378 -312
coreclr_tests.run.linux.arm.checked.mch 109,275,864 -1,118
libraries.crossgen2.linux.arm.checked.mch 34,521,364 -862
libraries.pmi.linux.arm.checked.mch 49,746,620 -1,144
libraries_tests.run.linux.arm.Release.mch 122,885,102 -6,772
libraries_tests_no_tiered_compilation.run.linux.arm.Release.mch 84,449,984 -2,552
realworld.run.linux.arm.checked.mch 13,171,388 -114

Assembly diffs for windows/x86 ran on windows/x86

Diffs are based on 2,293,439 contexts (839,658 MinOpts, 1,453,781 FullOpts).

MISSED contexts: base: 1 (0.00%), diff: 57 (0.00%)

Overall (-5,227 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 7,121,152 -349
benchmarks.run_pgo.windows.x86.checked.mch 44,984,638 +735
benchmarks.run_tiered.windows.x86.checked.mch 9,468,675 -349
coreclr_tests.run.windows.x86.checked.mch 309,389,409 -268
libraries.crossgen2.windows.x86.checked.mch 31,715,129 -1,087
libraries.pmi.windows.x86.checked.mch 49,281,531 -1,375
libraries_tests.run.windows.x86.Release.mch 186,643,263 -2,175
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch 103,812,160 -579
realworld.run.windows.x86.checked.mch 11,350,878 +220
FullOpts (-5,227 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 7,120,871 -349
benchmarks.run_pgo.windows.x86.checked.mch 38,396,007 +735
benchmarks.run_tiered.windows.x86.checked.mch 5,198,854 -349
coreclr_tests.run.windows.x86.checked.mch 107,601,275 -268
libraries.crossgen2.windows.x86.checked.mch 31,714,069 -1,087
libraries.pmi.windows.x86.checked.mch 49,186,298 -1,375
libraries_tests.run.windows.x86.Release.mch 88,369,563 -2,175
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch 95,132,096 -579
realworld.run.windows.x86.checked.mch 11,055,164 +220

Details here


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.

2 participants