llvm-project
7bdca287 - [InlineCost] Never inline functions with incompatible target features (#205113)

Commit
2 days ago
[InlineCost] Never inline functions with incompatible target features (#205113) If inlining is unsound due to incompatible target feature attributes, we should not inline the call even if alwaysinline is set. This will likely result in a crash during instruction selection. We tried this previously in https://github.com/llvm/llvm-project/commit/d6f994acb3d545b80161e24ab742c9c69d4bbf33, but the change had to be reverted because the quality of our areInlineCompatible() hooks was very bad at the time, which resulted in inlining not happening in many cases where it was safe. I think we're in a much better position now. Most notably, we now have a default areInlineCompatible() implementation that actually does something sensible (https://github.com/llvm/llvm-project/pull/117493), inlining compatibility for target features is now specified in TableGen (https://github.com/llvm/llvm-project/pull/205348). Various target-specific issues have been fixed as well, e.g. ARM's overly strict feature whitelist (https://github.com/llvm/llvm-project/pull/205763) and X86's overly conservative ABI compatibility checks (https://github.com/llvm/llvm-project/pull/205106).
Author
Parents
Loading