[Inline] prevent inlining on noprofile mismatch
authorNick Desaulniers <ndesaulniers@google.com>
Tue, 29 Jun 2021 17:31:58 +0000 (10:31 -0700)
committerNick Desaulniers <ndesaulniers@google.com>
Tue, 29 Jun 2021 17:32:03 +0000 (10:32 -0700)
commit3999dcae5e763adceb2c3bc1dbc8f2c005c808ef
tree74c09da2d3d519725531a2ad1bedc7382dd91b7e
parentaaba37187fda7f5a7fdc4c1e6129cbaaa1bbf709
[Inline] prevent inlining on noprofile mismatch

Similar to
commit bc044a88ee3c ("[Inline] prevent inlining on stack protector mismatch")

The noprofile function attribute is meant to prevent compiler
instrumentation from being inserted into a function. Inlining may defeat
the developer's intent. If the caller and callee don't either BOTH have
the attribute or BOTH lack the attribute, suppress inline substitution.

This matches behavior being proposed in GCC:
https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573511.html
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80223

Add LangRef entry for noprofile fn attr, similar to text added in D93422
and D104944.

Reviewed By: MaskRay, melver, phosek

Differential Revision: https://reviews.llvm.org/D104810
llvm/docs/LangRef.rst
llvm/include/llvm/IR/Attributes.td
llvm/test/Transforms/Inline/inline_noprofile.ll [new file with mode: 0644]