[Inliner] Inlining should honor nobuiltin attributes
Summary: Final patch in series to fix inlining between functions with different nobuiltin attributes/options, which was specifically an issue in LTO. See discussion on D61634 for background. The prior patch in this series (D67923) enabled per-Function TLI construction that identified the nobuiltin attributes. Here I have allowed inlining to proceed if the callee's nobuiltins are a subset of the caller's nobuiltins, but not in the reverse case, which should be conservatively correct. This is controlled by a new option, -inline-caller-superset-nobuiltin, which is enabled by default. Reviewers: hfinkel, gchatelet, chandlerc, davidxl Subscribers: arsenm, jvesely, nhaehnle, mehdi_amini, eraman, hiraditya, haicheng, dexonsmith, kerbowa, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D74162
Showing
- llvm/include/llvm/Analysis/InlineCost.h 3 additions, 0 deletionsllvm/include/llvm/Analysis/InlineCost.h
- llvm/include/llvm/Analysis/TargetLibraryInfo.h 15 additions, 0 deletionsllvm/include/llvm/Analysis/TargetLibraryInfo.h
- llvm/include/llvm/Transforms/IPO/Inliner.h 1 addition, 0 deletionsllvm/include/llvm/Transforms/IPO/Inliner.h
- llvm/lib/Analysis/InlineCost.cpp 21 additions, 5 deletionsllvm/lib/Analysis/InlineCost.cpp
- llvm/lib/Target/AMDGPU/AMDGPUInline.cpp 2 additions, 2 deletionsllvm/lib/Target/AMDGPU/AMDGPUInline.cpp
- llvm/lib/Transforms/IPO/InlineSimple.cpp 1 addition, 1 deletionllvm/lib/Transforms/IPO/InlineSimple.cpp
- llvm/lib/Transforms/IPO/Inliner.cpp 6 additions, 3 deletionsllvm/lib/Transforms/IPO/Inliner.cpp
- llvm/lib/Transforms/IPO/PartialInlining.cpp 19 additions, 5 deletionsllvm/lib/Transforms/IPO/PartialInlining.cpp
- llvm/lib/Transforms/IPO/SampleProfile.cpp 28 additions, 14 deletionsllvm/lib/Transforms/IPO/SampleProfile.cpp
- llvm/test/Transforms/Inline/inline-no-builtin-compatible.ll 94 additions, 0 deletionsllvm/test/Transforms/Inline/inline-no-builtin-compatible.ll
Loading
Please register or sign in to comment