Difference between revisions of "GCC"

From dankwiki
Jump to navigation Jump to search
(Intermediate Representations)
(See also)
Line 25: Line 25:
  
 
==See also==
 
==See also==
* [[Compiler design]]
+
* [[Compiler Design]]
 
* [[Working with libraries#Building libraries|Building Libraries]]
 
* [[Working with libraries#Building libraries|Building Libraries]]
 
* [http://nickclifton.livejournal.com/ Nick Clifton] keeps a good monthly-or-so livejournal regarding the GNU toolchain
 
* [http://nickclifton.livejournal.com/ Nick Clifton] keeps a good monthly-or-so livejournal regarding the GNU toolchain
 
* "[http://www.cs.lth.se/home/Jonas_Skeppstedt/kongstad.pdf An Implementation of Global Value Numbering in the GNU Compiler Collection, with Performance Measurements]" (Kongstad 2004)
 
* "[http://www.cs.lth.se/home/Jonas_Skeppstedt/kongstad.pdf An Implementation of Global Value Numbering in the GNU Compiler Collection, with Performance Measurements]" (Kongstad 2004)
 
* [gcc.gnu.org/onlinedocs/gccint/ GNU Compiler Collection Internals]
 
* [gcc.gnu.org/onlinedocs/gccint/ GNU Compiler Collection Internals]

Revision as of 06:47, 29 April 2009

Extensions to C

Extensions to the C language are documented at http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions and in the Info pages distributed with gcc.

__builtin_ functions

  • __builtin_expect(expr,expectedp) - Instruct gcc that expr is or is not likely to be true (0 for unlikely), affecting generation of conditional code (normally, gcc assumes that if conditionals are taken in most/all cases).

Attributes

Attributes are preceded by the keyword __attribute__ and in some cases followed by a parenthesized argument list; the attribute name and any argument list are both then enclosed within double parentheses. All are non-standard extensions.

Function Attributes

  • See the gcc documentation at http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
  • alloc_size - takes one or two parameters and indicates that the function will return a pointer to an allocated chunk of memory having either the size provided by a single argument, or the product of two arguments. This is necessary for the __builtin_object_size's correct functioning.
  • pure (2.96) - indicates that the function has no side-effects save its return value, which is based only on calls to other pure functions, the function's own parameters and/or non-volatile global memory.
  • const (2.5) - stronger than pure, a pure function which does not dereference any pointer parameters, use global memory or call non-const functions.
  • warn_unused_result - warn if the return value is not used, for instance in a wrapper to open(2) or malloc(3)
  • cold (4.3) - indicates the code does not lie on any hotpaths, resulting in optimization for size, location within the .text section, and automatic application of __builtin_expect((x),0) to conditionals on a calling path. Disabled by -fprofile-use.
  • hot (4.3) - opposite of cold.
  • nothrow (3.3) - marks the function as never throwing an exception, for optimization purposes.
  • noreturn (2.5) - marks the function as never normally returning (longjmp(3) and exceptions may still be used).

Intermediate Representations

  • RTL: The Register Transfer Language, GCC's older IR (still used for late optimization passes)
  • GENERIC: A loose IR to which frontends must now compile
  • GIMPLE: A restricted subset of GENERIC, on which most optimizations are performed

See also