Skip to content

JIT: Remove fgRelocateEHRegions #113330

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

Merged
merged 2 commits into from
Mar 11, 2025

Conversation

amanasifkhalid
Copy link
Member

@amanasifkhalid amanasifkhalid commented Mar 10, 2025

Part of #107749. Block layout will now ensure cold EH regions are moved out of the hot part of the method, so fgRelocateEHRegions is no longer necessary. This isn't a no-diff change, though the changes look inconsequential; for the examples I looked at, the diffs stem from the relative position of cold try regions changing. For example, the baseline JIT will ensure cold try regions are at the very end of the method, like so:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds           weight   IBC [IL range]   [jump]                            [EH region]        [flags]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000]  1                             1    760 [000..017)-> BB03(1),BB02(0)         ( cond )                     i LIR IBC
BB03 [0009]  2       BB01,BB02             1    760 [000..020)-> BB08(1),BB04(0)         ( cond )                     i LIR IBC
BB08 [0005]  3       BB06,BB07,BB03        1    760 [052..053)                           (return)                     i LIR IBC
BB02 [0008]  1       BB01                  0      0 [000..001)-> BB03(1)                 (always)                     i LIR IBC rare hascall gcsafe
BB07 [0004]  1     0                       0.00   0 [04F..052)-> BB08(1)                 (always)    H0   catch { }   i LIR IBC keep hascall xentry
BB04 [0001]  1  0    BB03                  0      0 [020..02B)-> BB06(0.48),BB05(0.52)   ( cond ) T0      try {       i LIR IBC rare keep hascall
BB05 [0002]  1  0    BB04                  0      0 [02B..042)-> BB06(1)                 (always) T0                  i LIR IBC rare hascall newobj
BB06 [0003]  2  0    BB04,BB05             0      0 [042..04F)-> BB08(1)                 (always) T0      }           i LIR IBC rare hascall gcsafe nullcheck
---------------------------------------------------------------------------------------------------------------------------------------------------------------------

Now, the relative ordering of cold code doesn't change:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds           weight   IBC [IL range]   [jump]                            [EH region]        [flags]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000]  1                             1    760 [000..017)-> BB03(1),BB02(0)         ( cond )                     i LIR IBC
BB03 [0009]  2       BB01,BB02             1    760 [000..020)-> BB08(1),BB04(0)         ( cond )                     i LIR IBC
BB08 [0005]  3       BB06,BB07,BB03        1    760 [052..053)                           (return)                     i LIR IBC
BB02 [0008]  1       BB01                  0      0 [000..001)-> BB03(1)                 (always)                     i LIR IBC rare hascall gcsafe
BB04 [0001]  1  0    BB03                  0      0 [020..02B)-> BB06(0.48),BB05(0.52)   ( cond ) T0      try {       i LIR IBC rare keep hascall
BB05 [0002]  1  0    BB04                  0      0 [02B..042)-> BB06(1)                 (always) T0                  i LIR IBC rare hascall newobj
BB06 [0003]  2  0    BB04,BB05             0      0 [042..04F)-> BB08(1)                 (always) T0      }           i LIR IBC rare hascall gcsafe nullcheck
BB07 [0004]  1     0                       0.00   0 [04F..052)-> BB08(1)                 (always)    H0   catch { }   i LIR IBC keep hascall xentry
---------------------------------------------------------------------------------------------------------------------------------------------------------------------

@Copilot Copilot AI review requested due to automatic review settings March 10, 2025 18:13
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

@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 Mar 10, 2025
Copy link
Contributor

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

@amanasifkhalid
Copy link
Member Author

@dotnet/jit-contrib PTAL. Diffs show almost no PerfScore diffs, suggesting the churn is mostly due to cold code moving around. Thanks!

@amanasifkhalid amanasifkhalid merged commit ac04fa3 into dotnet:main Mar 11, 2025
108 of 113 checks passed
@amanasifkhalid amanasifkhalid deleted the remove-fgRelocateEHRegions branch March 11, 2025 17:55
@github-actions github-actions bot locked and limited conversation to collaborators Apr 11, 2025
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