llvm-project
f66bd8e8 - [LLVM] Add flatten function attribute to LLVM IR and implement recursive inlining in AlwaysInliner (#174899)

Commit
41 days ago
[LLVM] Add flatten function attribute to LLVM IR and implement recursive inlining in AlwaysInliner (#174899) This adds a new function-level `flatten` LLVM IR attribute and implements support for it in the AlwaysInliner pass, bringing LLVM's behavior in line with GCC. Previously, the `flatten` attribute only existed as a Clang attribute, which was lowered to `alwaysinline` on individual call sites. Per the RFC discussion [1], the consensus was to match GCC semantics: recursively inline the entire call tree into the flattened function, rather than just immediate call sites. This PR: - Adds the `flatten` function attribute to LLVM IR - Implements recursive inlining of all viable callees in AlwaysInliner - Uses inline history tracking to detect and stop at recursive call cycles - Emits optimization remarks when inlining is skipped due to recursion A follow-up patch will update Clang to emit the LLVM `flatten` attribute on functions instead of marking individual call sites with `alwaysinline`. [1] https://discourse.llvm.org/t/rfc-function-level-flatten-depth-attribute-for-depth-limited-inlining
Author
Parents
Loading