d: Recognize pragma(inline) in the code generator.
Pragma inline affects whether functions are inlined or not. If at the declaration level, it affects the functions declared in the block it controls. If inside a function, it affects the function it is enclosed by. Support has been in the front-end for some time, but the information was not leveraged by the code generation pass. gcc/d/ChangeLog: * decl.cc (get_symbol_decl): Set DECL_DECLARED_INLINE_P or DECL_UNINLINABLE for declarations with pragma(inline). * toir.cc (IRVisitor::visit (GccAsmStatement *)): Set ASM_INLINE_P if in function decorated with pragma(inline).
This commit is contained in:
parent
50929dd318
commit
67e3020b21
2 changed files with 14 additions and 1 deletions
|
@ -1277,6 +1277,13 @@ get_symbol_decl (Declaration *decl)
|
|||
DECL_NO_INLINE_WARNING_P (decl->csym) = 1;
|
||||
}
|
||||
|
||||
/* In [pragma/inline], functions decorated with 'pragma(inline)' affects
|
||||
whether they are inlined or not. */
|
||||
if (fd->inlining == PINLINEalways)
|
||||
DECL_DECLARED_INLINE_P (decl->csym) = 1;
|
||||
else if (fd->inlining == PINLINEnever)
|
||||
DECL_UNINLINABLE (decl->csym) = 1;
|
||||
|
||||
/* Function was declared 'naked'. */
|
||||
if (fd->naked)
|
||||
{
|
||||
|
|
|
@ -1423,7 +1423,8 @@ public:
|
|||
outputs, inputs, clobbers, labels);
|
||||
SET_EXPR_LOCATION (exp, make_location_t (s->loc));
|
||||
|
||||
/* If the extended syntax was not used, mark the ASM_EXPR. */
|
||||
/* If the extended syntax was not used, mark the ASM_EXPR as being an
|
||||
ASM_INPUT expression instead of an ASM_OPERAND with no operands. */
|
||||
if (s->args == NULL && s->clobbers == NULL)
|
||||
ASM_INPUT_P (exp) = 1;
|
||||
|
||||
|
@ -1431,6 +1432,11 @@ public:
|
|||
optimization, this could be unset when building in release mode. */
|
||||
ASM_VOLATILE_P (exp) = 1;
|
||||
|
||||
/* If the function has been annotated with 'pragma(inline)', then mark
|
||||
the asm expression as being inline as well. */
|
||||
if (this->func_->inlining == PINLINEalways)
|
||||
ASM_INLINE_P (exp) = 1;
|
||||
|
||||
add_stmt (exp);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue