GCC: Difference between revisions

Useful flags: mention 10.1's -fanalyzer
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Useful flags==
* <tt>-fmax-errors=n</tt> print a maximum of n errors, 0 (the default) being unbounded
* <tt>-E</tt> to generate preprocessor output, <tt>-s</tt> to generate assembly output
* <tt>-fanalyzer</tt> (since 10.1) to do rich static analysis [https://clearlinux.org/blogs-news/major-improvements-gcc-101 ClearLinux blog]
==Optimization==
* Use '''-Q -Ox --help=optimizers''' to determine which optimization flags are enabled for a given -Ox setting (or read the info pages).
* [[Compiler Design|Dataflow analysis]] is only performed at -O2 or above, and thus at least this level of optimization is necessary for use-of-uninitialized-variable warnings and such.
==Extensions to [[C]]==
==Extensions to [[C]]==
Extensions to the [[C]] language are documented at the [http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions online gcc docs], and in the Info pages distributed with gcc.
Extensions to the [[C]] language are documented at the [http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions online gcc docs], and in the Info pages distributed with gcc.
Line 29: Line 37:
* outputs, inputs and clobbers are expressed in a colon-delimited list of comma-delimited lists of the form [''asmsymbol''] "''constraints''" (''c symbol'')
* outputs, inputs and clobbers are expressed in a colon-delimited list of comma-delimited lists of the form [''asmsymbol''] "''constraints''" (''c symbol'')
** operand constraints are properties of the assembly code, not the values
** operand constraints are properties of the assembly code, not the values
** without "=" or "+" constraint modifier, operands are assumed to be read-only
** compiler verifies that all outputs are lvalues. types of operands are '''not''' checked.
** compiler verifies that all outputs are lvalues. types of operands are '''not''' checked.
** "cc" logical register ought be listed as a clobber if the conditional code register is changed
** "memory" must be listed as clobbered if memory is touched in an unpredictable fashion
* constraint modifiers:
** "=": operand is write-only (previous value needn't be preserved until write)
** "+": operand is read-write (can't be arbitrarily used)
** "&": operand is clobbered early (prior to use of all inputs), and thus can't be placed atop an input operand's


==Intermediate Representations==
==Intermediate Representations==
Line 43: Line 58:
* "[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)
* [http://gcc.gnu.org/onlinedocs/gccint/ GNU Compiler Collection Internals]
* [http://gcc.gnu.org/onlinedocs/gccint/ GNU Compiler Collection Internals]
* [[Core]] files
* [[Questions]]