Difference between revisions of "DIP56"

From D Wiki
Jump to: navigation, search
(Description)
(generate warning if inlining fails)
Line 16: Line 16:
 
|-
 
|-
 
|Last Modified:
 
|Last Modified:
|2014-02-23
+
|2015-02-23
 
|-
 
|-
 
|Author:
 
|Author:
Line 25: Line 25:
  
 
== Abstract ==
 
== Abstract ==
This proposal uses pragmas to add hints to the compiler.
+
This proposal uses pragmas to add inlining instructions to the compiler.
  
 
== Rationale ==
 
== Rationale ==
Line 45: Line 45:
 
If the pragma is versioned out or in a false static if conditional, it is ignored.
 
If the pragma is versioned out or in a false static if conditional, it is ignored.
  
If a pragma specifies always inline, whether or not the target function(s) are actually inlined is implementation defined,
+
If a pragma specifies always inline, and the compiler cannot inline it, a warning will be generated.
although the implementation will be expected to inline it if practical.
 
 
Implementations will likely vary in their ability to inline.
 
Implementations will likely vary in their ability to inline.
  

Revision as of 22:26, 3 February 2015

Title: Provide pragma to control function inlining
DIP: 56
Version: 0
Status: Draft
Created: 2014-02-23
Last Modified: 2015-02-23
Author: Walter Bright
Links:

Abstract

This proposal uses pragmas to add inlining instructions to the compiler.

Rationale

Sometimes generating better code requires runtime profile information. But being a static compiler, not a JIT, the compiler could use such hints from the programmer.

Description

This adds a pragma 'inline' and two values for it: true and false, which influences the inlining of the function they appear in. 'true' means always inline, 'false' means never inline, no argument means default behavior.

If this pragma is outside of a function, it affects the functions in the block it encloses.

Nested pragmas override the outer ones.

If there are multiple pragmas inside a function, the lexically last one that is semantically analyzed controls the behavior.

If the pragma is versioned out or in a false static if conditional, it is ignored.

If a pragma specifies always inline, and the compiler cannot inline it, a warning will be generated. Implementations will likely vary in their ability to inline.

These are not attributes because they should not affect the semantics of the function. In particular, the function signature must not be affected.

Usage

pragma(inline, true);  // always inline
pragma(inline, false); // never inline
pragma(inline);        // revert to default behavior

Copyright

This document has been placed in the Public Domain.