mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 20:29:53 +00:00
Add an 'inline hint' attribute to represent source
code hints that it would be a good idea to inline a function ("inline" keyword). No functional change yet; FEs do not emit this and inliner does not use it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80063 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8af76bdb74
commit
de86d473fc
@ -1042,6 +1042,11 @@ define void @f() optsize
|
||||
function into callers whenever possible, ignoring any active inlining size
|
||||
threshold for this caller.</dd>
|
||||
|
||||
<dt><tt>inlinehint</tt></dt>
|
||||
<dd>This attribute indicates that the source code contained a hint that inlining
|
||||
this function is desirable (such as the "inline" keyword in C/C++). It
|
||||
is just a hint; it imposes no requirements on the inliner.</dd>
|
||||
|
||||
<dt><tt>noinline</tt></dt>
|
||||
<dd>This attribute indicates that the inliner should never inline this
|
||||
function in any situation. This attribute may not be used together with
|
||||
|
@ -109,7 +109,8 @@ typedef enum {
|
||||
LLVMNoCaptureAttribute = 1<<21,
|
||||
LLVMNoRedZoneAttribute = 1<<22,
|
||||
LLVMNoImplicitFloatAttribute = 1<<23,
|
||||
LLVMNakedAttribute = 1<<24
|
||||
LLVMNakedAttribute = 1<<24,
|
||||
LLVMInlineHintAttribute = 1<<25
|
||||
} LLVMAttribute;
|
||||
|
||||
typedef enum {
|
||||
|
@ -57,7 +57,8 @@ const Attributes NoCapture = 1<<21; ///< Function creates no aliases of pointer
|
||||
const Attributes NoRedZone = 1<<22; /// disable redzone
|
||||
const Attributes NoImplicitFloat = 1<<23; /// disable implicit floating point
|
||||
/// instructions.
|
||||
const Attributes Naked = 1<<24; ///< Naked function
|
||||
const Attributes Naked = 1<<24; ///< Naked function
|
||||
const Attributes InlineHint = 1<<25; ///< source said inlining was desirable
|
||||
|
||||
/// @brief Attributes that only apply to function parameters.
|
||||
const Attributes ParameterOnly = ByVal | Nest | StructRet | NoCapture;
|
||||
@ -66,7 +67,7 @@ const Attributes ParameterOnly = ByVal | Nest | StructRet | NoCapture;
|
||||
/// be used on return values or function parameters.
|
||||
const Attributes FunctionOnly = NoReturn | NoUnwind | ReadNone | ReadOnly |
|
||||
NoInline | AlwaysInline | OptimizeForSize | StackProtect | StackProtectReq |
|
||||
NoRedZone | NoImplicitFloat | Naked;
|
||||
NoRedZone | NoImplicitFloat | Naked | InlineHint;
|
||||
|
||||
/// @brief Parameter attributes that do not apply to vararg call arguments.
|
||||
const Attributes VarArgsIncompatible = StructRet;
|
||||
|
@ -556,6 +556,7 @@ lltok::Kind LLLexer::LexIdentifier() {
|
||||
KEYWORD(readnone);
|
||||
KEYWORD(readonly);
|
||||
|
||||
KEYWORD(inlinehint);
|
||||
KEYWORD(noinline);
|
||||
KEYWORD(alwaysinline);
|
||||
KEYWORD(optsize);
|
||||
|
@ -907,6 +907,7 @@ bool LLParser::ParseOptionalAttrs(unsigned &Attrs, unsigned AttrKind) {
|
||||
case lltok::kw_noinline: Attrs |= Attribute::NoInline; break;
|
||||
case lltok::kw_readnone: Attrs |= Attribute::ReadNone; break;
|
||||
case lltok::kw_readonly: Attrs |= Attribute::ReadOnly; break;
|
||||
case lltok::kw_inlinehint: Attrs |= Attribute::InlineHint; break;
|
||||
case lltok::kw_alwaysinline: Attrs |= Attribute::AlwaysInline; break;
|
||||
case lltok::kw_optsize: Attrs |= Attribute::OptimizeForSize; break;
|
||||
case lltok::kw_ssp: Attrs |= Attribute::StackProtect; break;
|
||||
|
@ -82,6 +82,7 @@ namespace lltok {
|
||||
kw_readnone,
|
||||
kw_readonly,
|
||||
|
||||
kw_inlinehint,
|
||||
kw_noinline,
|
||||
kw_alwaysinline,
|
||||
kw_optsize,
|
||||
|
@ -472,6 +472,7 @@ namespace {
|
||||
HANDLE_ATTR(Nest);
|
||||
HANDLE_ATTR(ReadNone);
|
||||
HANDLE_ATTR(ReadOnly);
|
||||
HANDLE_ATTR(InlineHint);
|
||||
HANDLE_ATTR(NoInline);
|
||||
HANDLE_ATTR(AlwaysInline);
|
||||
HANDLE_ATTR(OptimizeForSize);
|
||||
|
@ -55,6 +55,8 @@ std::string Attribute::getAsString(Attributes Attrs) {
|
||||
Result += "optsize ";
|
||||
if (Attrs & Attribute::NoInline)
|
||||
Result += "noinline ";
|
||||
if (Attrs & Attribute::InlineHint)
|
||||
Result += "inlinehint ";
|
||||
if (Attrs & Attribute::AlwaysInline)
|
||||
Result += "alwaysinline ";
|
||||
if (Attrs & Attribute::StackProtect)
|
||||
|
@ -161,6 +161,7 @@ FuncAttr ::= noreturn
|
||||
| signext
|
||||
| readnone
|
||||
| readonly
|
||||
| inlinehint
|
||||
| noinline
|
||||
| alwaysinline
|
||||
| optsize
|
||||
|
@ -51,7 +51,7 @@ syn keyword llvmKeyword volatile fastcc coldcc cc ccc
|
||||
syn keyword llvmKeyword x86_stdcallcc x86_fastcallcc
|
||||
syn keyword llvmKeyword signext zeroext inreg sret nounwind noreturn
|
||||
syn keyword llvmKeyword nocapture byval nest readnone readonly noalias
|
||||
syn keyword llvmKeyword noinline alwaysinline optsize ssp sspreq
|
||||
syn keyword llvmKeyword inlinehint noinline alwaysinline optsize ssp sspreq
|
||||
syn keyword llvmKeyword noredzone noimplicitfloat naked
|
||||
syn keyword llvmKeyword module asm align tail to
|
||||
syn keyword llvmKeyword addrspace section alias sideeffect c gc
|
||||
|
Loading…
Reference in New Issue
Block a user