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

[BasicBlockSections] Allow mixing of -basic-block-sections with MFS. #117076

Merged
merged 1 commit into from
Nov 23, 2024

Conversation

rlavaee
Copy link
Contributor

@rlavaee rlavaee commented Nov 20, 2024

This PR allows mixing -basic-block-sections with -enable-machine-function-splitter. The strategy is to let -basic-block-sections take precedence over functions with profiles.

llvm/lib/CodeGen/MachineFunctionSplitter.cpp Outdated Show resolved Hide resolved
llvm/lib/CodeGen/MachineFunctionSplitter.cpp Outdated Show resolved Hide resolved
Comment on lines +132 to +134
// Do not split functions when -basic-block-sections=all is specified.
if (MF.getTarget().getBBSectionsType() == llvm::BasicBlockSection::All)
return false;
Copy link
Contributor

Choose a reason for hiding this comment

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

Do you intend to support this combination in the future? I think basic block sections is useful for mapping in general beyond it's use in Propeller. If I recall correctly @boomanaiden154 mentioned this type of usage.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes. This applies for AutoFDO builds. The idea is to apply Propeller for functions whose BasicBlockAddressMap structure doesn't change since the profile was collected (even though those functions may have been optimized by autofdo).

Copy link
Contributor

Choose a reason for hiding this comment

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

For mapping, we just use the basic block address map rather than basic block sections as we only need to know where blocks are and their size rather than any ability to rearrange/GC them in the linker.

llvm/test/CodeGen/Generic/machine-function-splitter.ll Outdated Show resolved Hide resolved
llvm/test/CodeGen/Generic/machine-function-splitter.ll Outdated Show resolved Hide resolved
@rlavaee rlavaee force-pushed the propeller-mfs branch 3 times, most recently from 7bf6b0d to 39d8195 Compare November 21, 2024 23:00
@rlavaee
Copy link
Contributor Author

rlavaee commented Nov 21, 2024

Thanks for the quick review!

Copy link
Contributor

@snehasish snehasish left a comment

Choose a reason for hiding this comment

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

lgtm

llvm/test/CodeGen/Generic/machine-function-splitter.ll Outdated Show resolved Hide resolved
llvm/test/CodeGen/Generic/machine-function-splitter.ll Outdated Show resolved Hide resolved
@rlavaee rlavaee merged commit 68f7b07 into llvm:main Nov 23, 2024
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants