summaryrefslogtreecommitdiff
path: root/share/doc/gcc-linaro-aarch64-linux-gnu/html/gcc/Optimize-Options.html
diff options
context:
space:
mode:
Diffstat (limited to 'share/doc/gcc-linaro-aarch64-linux-gnu/html/gcc/Optimize-Options.html')
-rw-r--r--share/doc/gcc-linaro-aarch64-linux-gnu/html/gcc/Optimize-Options.html395
1 files changed, 199 insertions, 196 deletions
diff --git a/share/doc/gcc-linaro-aarch64-linux-gnu/html/gcc/Optimize-Options.html b/share/doc/gcc-linaro-aarch64-linux-gnu/html/gcc/Optimize-Options.html
index fe813f7..51d63d8 100644
--- a/share/doc/gcc-linaro-aarch64-linux-gnu/html/gcc/Optimize-Options.html
+++ b/share/doc/gcc-linaro-aarch64-linux-gnu/html/gcc/Optimize-Options.html
@@ -56,7 +56,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="Invoking-GCC.html#Invoking-GCC">Invokin
<h3 class="section">3.10 Options That Control Optimization</h3>
-<p><a name="index-optimize-options-701"></a><a name="index-options_002c-optimization-702"></a>
+<p><a name="index-optimize-options-702"></a><a name="index-options_002c-optimization-703"></a>
These options control various sorts of optimizations.
<p>Without any optimization option, the compiler's goal is to reduce the
@@ -90,7 +90,7 @@ to find out the exact set of optimizations that are enabled at each level.
See <a href="Overall-Options.html#Overall-Options">Overall Options</a>, for examples.
<dl>
-<dt><code>-O</code><dt><code>-O1</code><dd><a name="index-O-703"></a><a name="index-O1-704"></a>Optimize. Optimizing compilation takes somewhat more time, and a lot
+<dt><code>-O</code><dt><code>-O1</code><dd><a name="index-O-704"></a><a name="index-O1-705"></a>Optimize. Optimizing compilation takes somewhat more time, and a lot
more memory for a large function.
<p>With <samp><span class="option">-O</span></samp>, the compiler tries to reduce code size and execution
@@ -132,7 +132,7 @@ compilation time.
<p><samp><span class="option">-O</span></samp> also turns on <samp><span class="option">-fomit-frame-pointer</span></samp> on machines
where doing so does not interfere with debugging.
- <br><dt><code>-O2</code><dd><a name="index-O2-705"></a>Optimize even more. GCC performs nearly all supported optimizations
+ <br><dt><code>-O2</code><dd><a name="index-O2-706"></a>Optimize even more. GCC performs nearly all supported optimizations
that do not involve a space-speed tradeoff.
As compared to <samp><span class="option">-O</span></samp>, this option increases both compilation time
and the performance of the generated code.
@@ -168,16 +168,16 @@ also turns on the following optimization flags:
<p>Please note the warning under <samp><span class="option">-fgcse</span></samp> about
invoking <samp><span class="option">-O2</span></samp> on programs that use computed gotos.
- <br><dt><code>-O3</code><dd><a name="index-O3-706"></a>Optimize yet more. <samp><span class="option">-O3</span></samp> turns on all optimizations specified
+ <br><dt><code>-O3</code><dd><a name="index-O3-707"></a>Optimize yet more. <samp><span class="option">-O3</span></samp> turns on all optimizations specified
by <samp><span class="option">-O2</span></samp> and also turns on the <samp><span class="option">-finline-functions</span></samp>,
<samp><span class="option">-funswitch-loops</span></samp>, <samp><span class="option">-fpredictive-commoning</span></samp>,
-<samp><span class="option">-fgcse-after-reload</span></samp>, <samp><span class="option">-ftree-vectorize</span></samp> and
-<samp><span class="option">-fipa-cp-clone</span></samp> options.
+<samp><span class="option">-fgcse-after-reload</span></samp>, <samp><span class="option">-ftree-vectorize</span></samp>,
+<samp><span class="option">-ftree-partial-pre</span></samp> and <samp><span class="option">-fipa-cp-clone</span></samp> options.
- <br><dt><code>-O0</code><dd><a name="index-O0-707"></a>Reduce compilation time and make debugging produce the expected
+ <br><dt><code>-O0</code><dd><a name="index-O0-708"></a>Reduce compilation time and make debugging produce the expected
results. This is the default.
- <br><dt><code>-Os</code><dd><a name="index-Os-708"></a>Optimize for size. <samp><span class="option">-Os</span></samp> enables all <samp><span class="option">-O2</span></samp> optimizations that
+ <br><dt><code>-Os</code><dd><a name="index-Os-709"></a>Optimize for size. <samp><span class="option">-Os</span></samp> enables all <samp><span class="option">-O2</span></samp> optimizations that
do not typically increase code size. It also performs further
optimizations designed to reduce code size.
@@ -186,7 +186,7 @@ optimizations designed to reduce code size.
-falign-labels -freorder-blocks -freorder-blocks-and-partition
-fprefetch-loop-arrays -ftree-vect-loop-version
</pre>
- <br><dt><code>-Ofast</code><dd><a name="index-Ofast-709"></a>Disregard strict standards compliance. <samp><span class="option">-Ofast</span></samp> enables all
+ <br><dt><code>-Ofast</code><dd><a name="index-Ofast-710"></a>Disregard strict standards compliance. <samp><span class="option">-Ofast</span></samp> enables all
<samp><span class="option">-O3</span></samp> optimizations. It also enables optimizations that are not
valid for all standard compliant programs.
It turns on <samp><span class="option">-ffast-math</span></samp> and the Fortran-specific
@@ -209,20 +209,20 @@ can use the following flags in the rare cases when &ldquo;fine-tuning&rdquo; of
optimizations to be performed is desired.
<dl>
-<dt><code>-fno-default-inline</code><dd><a name="index-fno_002ddefault_002dinline-710"></a>Do not make member functions inline by default merely because they are
+<dt><code>-fno-default-inline</code><dd><a name="index-fno_002ddefault_002dinline-711"></a>Do not make member functions inline by default merely because they are
defined inside the class scope (C++ only). Otherwise, when you specify
<samp><span class="option">-O</span></samp><!-- /@w -->, member functions defined inside class scope are compiled
inline by default; i.e., you don't need to add &lsquo;<samp><span class="samp">inline</span></samp>&rsquo; in front of
the member function name.
- <br><dt><code>-fno-defer-pop</code><dd><a name="index-fno_002ddefer_002dpop-711"></a>Always pop the arguments to each function call as soon as that function
+ <br><dt><code>-fno-defer-pop</code><dd><a name="index-fno_002ddefer_002dpop-712"></a>Always pop the arguments to each function call as soon as that function
returns. For machines that must pop arguments after a function call,
the compiler normally lets arguments accumulate on the stack for several
function calls and pops them all at once.
<p>Disabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fforward-propagate</code><dd><a name="index-fforward_002dpropagate-712"></a>Perform a forward propagation pass on RTL. The pass tries to combine two
+ <br><dt><code>-fforward-propagate</code><dd><a name="index-fforward_002dpropagate-713"></a>Perform a forward propagation pass on RTL. The pass tries to combine two
instructions and checks if the result can be simplified. If loop unrolling
is active, two passes are performed and the second is scheduled after
loop unrolling.
@@ -230,7 +230,7 @@ loop unrolling.
<p>This option is enabled by default at optimization levels <samp><span class="option">-O</span></samp>,
<samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-ffp-contract=</code><var>style</var><dd><a name="index-ffp_002dcontract-713"></a><samp><span class="option">-ffp-contract=off</span></samp> disables floating-point expression contraction.
+ <br><dt><code>-ffp-contract=</code><var>style</var><dd><a name="index-ffp_002dcontract-714"></a><samp><span class="option">-ffp-contract=off</span></samp> disables floating-point expression contraction.
<samp><span class="option">-ffp-contract=fast</span></samp> enables floating-point expression contraction
such as forming of fused multiply-add operations if the target has
native support for them.
@@ -240,7 +240,7 @@ and treated equal to <samp><span class="option">-ffp-contract=off</span></samp>.
<p>The default is <samp><span class="option">-ffp-contract=fast</span></samp>.
- <br><dt><code>-fomit-frame-pointer</code><dd><a name="index-fomit_002dframe_002dpointer-714"></a>Don't keep the frame pointer in a register for functions that
+ <br><dt><code>-fomit-frame-pointer</code><dd><a name="index-fomit_002dframe_002dpointer-715"></a>Don't keep the frame pointer in a register for functions that
don't need one. This avoids the instructions to save, set up and
restore frame pointers; it also makes an extra register available
in many functions. <strong>It also makes debugging impossible on
@@ -260,18 +260,18 @@ size) for 32-bit Linux x86 and 32-bit Darwin x86 targets has been changed to
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-foptimize-sibling-calls</code><dd><a name="index-foptimize_002dsibling_002dcalls-715"></a>Optimize sibling and tail recursive calls.
+ <br><dt><code>-foptimize-sibling-calls</code><dd><a name="index-foptimize_002dsibling_002dcalls-716"></a>Optimize sibling and tail recursive calls.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fno-inline</code><dd><a name="index-fno_002dinline-716"></a>Do not expand any functions inline apart from those marked with
+ <br><dt><code>-fno-inline</code><dd><a name="index-fno_002dinline-717"></a>Do not expand any functions inline apart from those marked with
the <code>always_inline</code> attribute. This is the default when not
optimizing.
<p>Single functions can be exempted from inlining by marking them
with the <code>noinline</code> attribute.
- <br><dt><code>-finline-small-functions</code><dd><a name="index-finline_002dsmall_002dfunctions-717"></a>Integrate functions into their callers when their body is smaller than expected
+ <br><dt><code>-finline-small-functions</code><dd><a name="index-finline_002dsmall_002dfunctions-718"></a>Integrate functions into their callers when their body is smaller than expected
function call code (so overall size of program gets smaller). The compiler
heuristically decides which functions are simple enough to be worth integrating
in this way. This inlining applies to all functions, even those not declared
@@ -279,14 +279,14 @@ inline.
<p>Enabled at level <samp><span class="option">-O2</span></samp>.
- <br><dt><code>-findirect-inlining</code><dd><a name="index-findirect_002dinlining-718"></a>Inline also indirect calls that are discovered to be known at compile
+ <br><dt><code>-findirect-inlining</code><dd><a name="index-findirect_002dinlining-719"></a>Inline also indirect calls that are discovered to be known at compile
time thanks to previous inlining. This option has any effect only
when inlining itself is turned on by the <samp><span class="option">-finline-functions</span></samp>
or <samp><span class="option">-finline-small-functions</span></samp> options.
<p>Enabled at level <samp><span class="option">-O2</span></samp>.
- <br><dt><code>-finline-functions</code><dd><a name="index-finline_002dfunctions-719"></a>Consider all functions for inlining, even if they are not declared inline.
+ <br><dt><code>-finline-functions</code><dd><a name="index-finline_002dfunctions-720"></a>Consider all functions for inlining, even if they are not declared inline.
The compiler heuristically decides which functions are worth integrating
in this way.
@@ -296,14 +296,14 @@ assembler code in its own right.
<p>Enabled at level <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-finline-functions-called-once</code><dd><a name="index-finline_002dfunctions_002dcalled_002donce-720"></a>Consider all <code>static</code> functions called once for inlining into their
+ <br><dt><code>-finline-functions-called-once</code><dd><a name="index-finline_002dfunctions_002dcalled_002donce-721"></a>Consider all <code>static</code> functions called once for inlining into their
caller even if they are not marked <code>inline</code>. If a call to a given
function is integrated, then the function is not output as assembler code
in its own right.
<p>Enabled at levels <samp><span class="option">-O1</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp> and <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fearly-inlining</code><dd><a name="index-fearly_002dinlining-721"></a>Inline functions marked by <code>always_inline</code> and functions whose body seems
+ <br><dt><code>-fearly-inlining</code><dd><a name="index-fearly_002dinlining-722"></a>Inline functions marked by <code>always_inline</code> and functions whose body seems
smaller than the function call overhead early before doing
<samp><span class="option">-fprofile-generate</span></samp> instrumentation and real inlining pass. Doing so
makes profiling significantly cheaper and usually inlining faster on programs
@@ -311,13 +311,13 @@ having large chains of nested wrapper functions.
<p>Enabled by default.
- <br><dt><code>-fipa-sra</code><dd><a name="index-fipa_002dsra-722"></a>Perform interprocedural scalar replacement of aggregates, removal of
+ <br><dt><code>-fipa-sra</code><dd><a name="index-fipa_002dsra-723"></a>Perform interprocedural scalar replacement of aggregates, removal of
unused parameters and replacement of parameters passed by reference
by parameters passed by value.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp> and <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-finline-limit=</code><var>n</var><dd><a name="index-finline_002dlimit-723"></a>By default, GCC limits the size of functions that can be inlined. This flag
+ <br><dt><code>-finline-limit=</code><var>n</var><dd><a name="index-finline_002dlimit-724"></a>By default, GCC limits the size of functions that can be inlined. This flag
allows coarse control of this limit. <var>n</var> is the size of functions that
can be inlined in number of pseudo instructions.
@@ -342,24 +342,24 @@ abstract measurement of function's size. In no way does it represent a count
of assembly instructions and as such its exact meaning might change from one
release to an another.
- <br><dt><code>-fno-keep-inline-dllexport</code><dd><a name="index-g_t_002dfno_002dkeep_002dinline_002ddllexport-724"></a>This is a more fine-grained version of <samp><span class="option">-fkeep-inline-functions</span></samp>,
+ <br><dt><code>-fno-keep-inline-dllexport</code><dd><a name="index-g_t_002dfno_002dkeep_002dinline_002ddllexport-725"></a>This is a more fine-grained version of <samp><span class="option">-fkeep-inline-functions</span></samp>,
which applies only to functions that are declared using the <code>dllexport</code>
attribute or declspec (See <a href="Function-Attributes.html#Function-Attributes">Declaring Attributes of Functions</a>.)
- <br><dt><code>-fkeep-inline-functions</code><dd><a name="index-fkeep_002dinline_002dfunctions-725"></a>In C, emit <code>static</code> functions that are declared <code>inline</code>
+ <br><dt><code>-fkeep-inline-functions</code><dd><a name="index-fkeep_002dinline_002dfunctions-726"></a>In C, emit <code>static</code> functions that are declared <code>inline</code>
into the object file, even if the function has been inlined into all
of its callers. This switch does not affect functions using the
<code>extern inline</code> extension in GNU C90. In C++, emit any and all
inline functions into the object file.
- <br><dt><code>-fkeep-static-consts</code><dd><a name="index-fkeep_002dstatic_002dconsts-726"></a>Emit variables declared <code>static const</code> when optimization isn't turned
+ <br><dt><code>-fkeep-static-consts</code><dd><a name="index-fkeep_002dstatic_002dconsts-727"></a>Emit variables declared <code>static const</code> when optimization isn't turned
on, even if the variables aren't referenced.
<p>GCC enables this option by default. If you want to force the compiler to
check if the variable was referenced, regardless of whether or not
optimization is turned on, use the <samp><span class="option">-fno-keep-static-consts</span></samp> option.
- <br><dt><code>-fmerge-constants</code><dd><a name="index-fmerge_002dconstants-727"></a>Attempt to merge identical constants (string constants and floating-point
+ <br><dt><code>-fmerge-constants</code><dd><a name="index-fmerge_002dconstants-728"></a>Attempt to merge identical constants (string constants and floating-point
constants) across compilation units.
<p>This option is the default for optimized compilation if the assembler and
@@ -368,7 +368,7 @@ behavior.
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fmerge-all-constants</code><dd><a name="index-fmerge_002dall_002dconstants-728"></a>Attempt to merge identical constants and identical variables.
+ <br><dt><code>-fmerge-all-constants</code><dd><a name="index-fmerge_002dall_002dconstants-729"></a>Attempt to merge identical constants and identical variables.
<p>This option implies <samp><span class="option">-fmerge-constants</span></samp>. In addition to
<samp><span class="option">-fmerge-constants</span></samp> this considers e.g. even constant initialized
@@ -378,17 +378,17 @@ instances of the same variable in recursive calls, to have distinct locations,
so using this option will result in non-conforming
behavior.
- <br><dt><code>-fmodulo-sched</code><dd><a name="index-fmodulo_002dsched-729"></a>Perform swing modulo scheduling immediately before the first scheduling
+ <br><dt><code>-fmodulo-sched</code><dd><a name="index-fmodulo_002dsched-730"></a>Perform swing modulo scheduling immediately before the first scheduling
pass. This pass looks at innermost loops and reorders their
instructions by overlapping different iterations.
- <br><dt><code>-fmodulo-sched-allow-regmoves</code><dd><a name="index-fmodulo_002dsched_002dallow_002dregmoves-730"></a>Perform more aggressive SMS based modulo scheduling with register moves
+ <br><dt><code>-fmodulo-sched-allow-regmoves</code><dd><a name="index-fmodulo_002dsched_002dallow_002dregmoves-731"></a>Perform more aggressive SMS based modulo scheduling with register moves
allowed. By setting this flag certain anti-dependences edges will be
deleted which will trigger the generation of reg-moves based on the
life-range analysis. This option is effective only with
<samp><span class="option">-fmodulo-sched</span></samp> enabled.
- <br><dt><code>-fno-branch-count-reg</code><dd><a name="index-fno_002dbranch_002dcount_002dreg-731"></a>Do not use &ldquo;decrement and branch&rdquo; instructions on a count register,
+ <br><dt><code>-fno-branch-count-reg</code><dd><a name="index-fno_002dbranch_002dcount_002dreg-732"></a>Do not use &ldquo;decrement and branch&rdquo; instructions on a count register,
but instead generate a sequence of instructions that decrement a
register, compare it against zero, then branch based upon the result.
This option is only meaningful on architectures that support such
@@ -396,7 +396,7 @@ instructions, which include x86, PowerPC, IA-64 and S/390.
<p>The default is <samp><span class="option">-fbranch-count-reg</span></samp>.
- <br><dt><code>-fno-function-cse</code><dd><a name="index-fno_002dfunction_002dcse-732"></a>Do not put function addresses in registers; make each instruction that
+ <br><dt><code>-fno-function-cse</code><dd><a name="index-fno_002dfunction_002dcse-733"></a>Do not put function addresses in registers; make each instruction that
calls a constant function contain the function's address explicitly.
<p>This option results in less efficient code, but some strange hacks
@@ -405,7 +405,7 @@ performed when this option is not used.
<p>The default is <samp><span class="option">-ffunction-cse</span></samp>
- <br><dt><code>-fno-zero-initialized-in-bss</code><dd><a name="index-fno_002dzero_002dinitialized_002din_002dbss-733"></a>If the target supports a BSS section, GCC by default puts variables that
+ <br><dt><code>-fno-zero-initialized-in-bss</code><dd><a name="index-fno_002dzero_002dinitialized_002din_002dbss-734"></a>If the target supports a BSS section, GCC by default puts variables that
are initialized to zero into BSS. This can save space in the resulting
code.
@@ -416,7 +416,7 @@ assumptions based on that.
<p>The default is <samp><span class="option">-fzero-initialized-in-bss</span></samp>.
- <br><dt><code>-fmudflap -fmudflapth -fmudflapir</code><dd><a name="index-fmudflap-734"></a><a name="index-fmudflapth-735"></a><a name="index-fmudflapir-736"></a><a name="index-bounds-checking-737"></a><a name="index-mudflap-738"></a>For front-ends that support it (C and C++), instrument all risky
+ <br><dt><code>-fmudflap -fmudflapth -fmudflapir</code><dd><a name="index-fmudflap-735"></a><a name="index-fmudflapth-736"></a><a name="index-fmudflapir-737"></a><a name="index-bounds-checking-738"></a><a name="index-mudflap-739"></a>For front-ends that support it (C and C++), instrument all risky
pointer/array dereferencing operations, some standard library
string/heap functions, and some other associated constructs with
range/validity tests. Modules so instrumented should be immune to
@@ -436,7 +436,7 @@ instrumentation (and therefore faster execution) and still provides
some protection against outright memory corrupting writes, but allows
erroneously read data to propagate within a program.
- <br><dt><code>-fthread-jumps</code><dd><a name="index-fthread_002djumps-739"></a>Perform optimizations where we check to see if a jump branches to a
+ <br><dt><code>-fthread-jumps</code><dd><a name="index-fthread_002djumps-740"></a>Perform optimizations where we check to see if a jump branches to a
location where another comparison subsumed by the first is found. If
so, the first branch is redirected to either the destination of the
second branch or a point immediately following it, depending on whether
@@ -444,7 +444,7 @@ the condition is known to be true or false.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fsplit-wide-types</code><dd><a name="index-fsplit_002dwide_002dtypes-740"></a>When using a type that occupies multiple registers, such as <code>long
+ <br><dt><code>-fsplit-wide-types</code><dd><a name="index-fsplit_002dwide_002dtypes-741"></a>When using a type that occupies multiple registers, such as <code>long
long</code> on a 32-bit system, split the registers apart and allocate them
independently. This normally generates better code for those types,
but may make debugging more difficult.
@@ -452,7 +452,7 @@ but may make debugging more difficult.
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>,
<samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fcse-follow-jumps</code><dd><a name="index-fcse_002dfollow_002djumps-741"></a>In common subexpression elimination (CSE), scan through jump instructions
+ <br><dt><code>-fcse-follow-jumps</code><dd><a name="index-fcse_002dfollow_002djumps-742"></a>In common subexpression elimination (CSE), scan through jump instructions
when the target of the jump is not reached by any other path. For
example, when CSE encounters an <code>if</code> statement with an
<code>else</code> clause, CSE will follow the jump when the condition
@@ -460,7 +460,7 @@ tested is false.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fcse-skip-blocks</code><dd><a name="index-fcse_002dskip_002dblocks-742"></a>This is similar to <samp><span class="option">-fcse-follow-jumps</span></samp>, but causes CSE to
+ <br><dt><code>-fcse-skip-blocks</code><dd><a name="index-fcse_002dskip_002dblocks-743"></a>This is similar to <samp><span class="option">-fcse-follow-jumps</span></samp>, but causes CSE to
follow jumps that conditionally skip over blocks. When CSE
encounters a simple <code>if</code> statement with no else clause,
<samp><span class="option">-fcse-skip-blocks</span></samp> causes CSE to follow the jump around the
@@ -468,12 +468,12 @@ body of the <code>if</code>.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-frerun-cse-after-loop</code><dd><a name="index-frerun_002dcse_002dafter_002dloop-743"></a>Re-run common subexpression elimination after loop optimizations has been
+ <br><dt><code>-frerun-cse-after-loop</code><dd><a name="index-frerun_002dcse_002dafter_002dloop-744"></a>Re-run common subexpression elimination after loop optimizations has been
performed.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fgcse</code><dd><a name="index-fgcse-744"></a>Perform a global common subexpression elimination pass.
+ <br><dt><code>-fgcse</code><dd><a name="index-fgcse-745"></a>Perform a global common subexpression elimination pass.
This pass also performs global constant and copy propagation.
<p><em>Note:</em> When compiling a program using computed gotos, a GCC
@@ -483,14 +483,14 @@ the global common subexpression elimination pass by adding
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fgcse-lm</code><dd><a name="index-fgcse_002dlm-745"></a>When <samp><span class="option">-fgcse-lm</span></samp> is enabled, global common subexpression elimination will
+ <br><dt><code>-fgcse-lm</code><dd><a name="index-fgcse_002dlm-746"></a>When <samp><span class="option">-fgcse-lm</span></samp> is enabled, global common subexpression elimination will
attempt to move loads that are only killed by stores into themselves. This
allows a loop containing a load/store sequence to be changed to a load outside
the loop, and a copy/store within the loop.
<p>Enabled by default when gcse is enabled.
- <br><dt><code>-fgcse-sm</code><dd><a name="index-fgcse_002dsm-746"></a>When <samp><span class="option">-fgcse-sm</span></samp> is enabled, a store motion pass is run after
+ <br><dt><code>-fgcse-sm</code><dd><a name="index-fgcse_002dsm-747"></a>When <samp><span class="option">-fgcse-sm</span></samp> is enabled, a store motion pass is run after
global common subexpression elimination. This pass will attempt to move
stores out of loops. When used in conjunction with <samp><span class="option">-fgcse-lm</span></samp>,
loops containing a load/store sequence can be changed to a load before
@@ -498,52 +498,52 @@ the loop and a store after the loop.
<p>Not enabled at any optimization level.
- <br><dt><code>-fgcse-las</code><dd><a name="index-fgcse_002dlas-747"></a>When <samp><span class="option">-fgcse-las</span></samp> is enabled, the global common subexpression
+ <br><dt><code>-fgcse-las</code><dd><a name="index-fgcse_002dlas-748"></a>When <samp><span class="option">-fgcse-las</span></samp> is enabled, the global common subexpression
elimination pass eliminates redundant loads that come after stores to the
same memory location (both partial and full redundancies).
<p>Not enabled at any optimization level.
- <br><dt><code>-fgcse-after-reload</code><dd><a name="index-fgcse_002dafter_002dreload-748"></a>When <samp><span class="option">-fgcse-after-reload</span></samp> is enabled, a redundant load elimination
+ <br><dt><code>-fgcse-after-reload</code><dd><a name="index-fgcse_002dafter_002dreload-749"></a>When <samp><span class="option">-fgcse-after-reload</span></samp> is enabled, a redundant load elimination
pass is performed after reload. The purpose of this pass is to cleanup
redundant spilling.
- <br><dt><code>-funsafe-loop-optimizations</code><dd><a name="index-funsafe_002dloop_002doptimizations-749"></a>If given, the loop optimizer will assume that loop indices do not
+ <br><dt><code>-funsafe-loop-optimizations</code><dd><a name="index-funsafe_002dloop_002doptimizations-750"></a>If given, the loop optimizer will assume that loop indices do not
overflow, and that the loops with nontrivial exit condition are not
infinite. This enables a wider range of loop optimizations even if
the loop optimizer itself cannot prove that these assumptions are valid.
Using <samp><span class="option">-Wunsafe-loop-optimizations</span></samp>, the compiler will warn you
if it finds this kind of loop.
- <br><dt><code>-fcrossjumping</code><dd><a name="index-fcrossjumping-750"></a>Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
+ <br><dt><code>-fcrossjumping</code><dd><a name="index-fcrossjumping-751"></a>Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
resulting code may or may not perform better than without cross-jumping.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fauto-inc-dec</code><dd><a name="index-fauto_002dinc_002ddec-751"></a>Combine increments or decrements of addresses with memory accesses.
+ <br><dt><code>-fauto-inc-dec</code><dd><a name="index-fauto_002dinc_002ddec-752"></a>Combine increments or decrements of addresses with memory accesses.
This pass is always skipped on architectures that do not have
instructions to support this. Enabled by default at <samp><span class="option">-O</span></samp> and
higher on architectures that support this.
- <br><dt><code>-fdce</code><dd><a name="index-fdce-752"></a>Perform dead code elimination (DCE) on RTL.
+ <br><dt><code>-fdce</code><dd><a name="index-fdce-753"></a>Perform dead code elimination (DCE) on RTL.
Enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-fdse</code><dd><a name="index-fdse-753"></a>Perform dead store elimination (DSE) on RTL.
+ <br><dt><code>-fdse</code><dd><a name="index-fdse-754"></a>Perform dead store elimination (DSE) on RTL.
Enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-fif-conversion</code><dd><a name="index-fif_002dconversion-754"></a>Attempt to transform conditional jumps into branch-less equivalents. This
+ <br><dt><code>-fif-conversion</code><dd><a name="index-fif_002dconversion-755"></a>Attempt to transform conditional jumps into branch-less equivalents. This
include use of conditional moves, min, max, set flags and abs instructions, and
some tricks doable by standard arithmetics. The use of conditional execution
on chips where it is available is controlled by <code>if-conversion2</code>.
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fif-conversion2</code><dd><a name="index-fif_002dconversion2-755"></a>Use conditional execution (where available) to transform conditional jumps into
+ <br><dt><code>-fif-conversion2</code><dd><a name="index-fif_002dconversion2-756"></a>Use conditional execution (where available) to transform conditional jumps into
branch-less equivalents.
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fdelete-null-pointer-checks</code><dd><a name="index-fdelete_002dnull_002dpointer_002dchecks-756"></a>Assume that programs cannot safely dereference null pointers, and that
+ <br><dt><code>-fdelete-null-pointer-checks</code><dd><a name="index-fdelete_002dnull_002dpointer_002dchecks-757"></a>Assume that programs cannot safely dereference null pointers, and that
no code or data element resides there. This enables simple constant
folding optimizations at all optimization levels. In addition, other
optimization passes in GCC use this flag to control global dataflow
@@ -560,23 +560,23 @@ Otherwise it is enabled at all levels: <samp><span class="option">-O0</span></sa
<samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>. Passes that use the information
are enabled independently at different optimization levels.
- <br><dt><code>-fdevirtualize</code><dd><a name="index-fdevirtualize-757"></a>Attempt to convert calls to virtual functions to direct calls. This
+ <br><dt><code>-fdevirtualize</code><dd><a name="index-fdevirtualize-758"></a>Attempt to convert calls to virtual functions to direct calls. This
is done both within a procedure and interprocedurally as part of
indirect inlining (<code>-findirect-inlining</code>) and interprocedural constant
propagation (<samp><span class="option">-fipa-cp</span></samp>).
Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fexpensive-optimizations</code><dd><a name="index-fexpensive_002doptimizations-758"></a>Perform a number of minor optimizations that are relatively expensive.
+ <br><dt><code>-fexpensive-optimizations</code><dd><a name="index-fexpensive_002doptimizations-759"></a>Perform a number of minor optimizations that are relatively expensive.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-free</code><dd><a name="index-free-759"></a>Attempt to remove redundant extension instructions. This is especially
+ <br><dt><code>-free</code><dd><a name="index-free-760"></a>Attempt to remove redundant extension instructions. This is especially
helpful for the x86-64 architecture which implicitly zero-extends in 64-bit
registers after writing to their lower 32-bit half.
<p>Enabled for x86 at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-foptimize-register-move</code><dt><code>-fregmove</code><dd><a name="index-foptimize_002dregister_002dmove-760"></a><a name="index-fregmove-761"></a>Attempt to reassign register numbers in move instructions and as
+ <br><dt><code>-foptimize-register-move</code><dt><code>-fregmove</code><dd><a name="index-foptimize_002dregister_002dmove-761"></a><a name="index-fregmove-762"></a>Attempt to reassign register numbers in move instructions and as
operands of other simple instructions in order to maximize the amount of
register tying. This is especially helpful on machines with two-operand
instructions.
@@ -613,33 +613,33 @@ This typically results in the smallest code size, and is enabled by default for
</dl>
- <br><dt><code>-fira-loop-pressure</code><dd><a name="index-fira_002dloop_002dpressure-762"></a>Use IRA to evaluate register pressure in loops for decisions to move
+ <br><dt><code>-fira-loop-pressure</code><dd><a name="index-fira_002dloop_002dpressure-763"></a>Use IRA to evaluate register pressure in loops for decisions to move
loop invariants. This option usually results in generation
of faster and smaller code on machines with large register files (&gt;= 32
registers), but it can slow the compiler down.
<p>This option is enabled at level <samp><span class="option">-O3</span></samp> for some targets.
- <br><dt><code>-fno-ira-share-save-slots</code><dd><a name="index-fno_002dira_002dshare_002dsave_002dslots-763"></a>Disable sharing of stack slots used for saving call-used hard
+ <br><dt><code>-fno-ira-share-save-slots</code><dd><a name="index-fno_002dira_002dshare_002dsave_002dslots-764"></a>Disable sharing of stack slots used for saving call-used hard
registers living through a call. Each hard register gets a
separate stack slot, and as a result function stack frames are
larger.
- <br><dt><code>-fno-ira-share-spill-slots</code><dd><a name="index-fno_002dira_002dshare_002dspill_002dslots-764"></a>Disable sharing of stack slots allocated for pseudo-registers. Each
+ <br><dt><code>-fno-ira-share-spill-slots</code><dd><a name="index-fno_002dira_002dshare_002dspill_002dslots-765"></a>Disable sharing of stack slots allocated for pseudo-registers. Each
pseudo-register that does not get a hard register gets a separate
stack slot, and as a result function stack frames are larger.
- <br><dt><code>-fira-verbose=</code><var>n</var><dd><a name="index-fira_002dverbose-765"></a>Control the verbosity of the dump file for the integrated register allocator.
+ <br><dt><code>-fira-verbose=</code><var>n</var><dd><a name="index-fira_002dverbose-766"></a>Control the verbosity of the dump file for the integrated register allocator.
The default value is 5. If the value <var>n</var> is greater or equal to 10,
the dump output is sent to stderr using the same format as <var>n</var> minus 10.
- <br><dt><code>-fdelayed-branch</code><dd><a name="index-fdelayed_002dbranch-766"></a>If supported for the target machine, attempt to reorder instructions
+ <br><dt><code>-fdelayed-branch</code><dd><a name="index-fdelayed_002dbranch-767"></a>If supported for the target machine, attempt to reorder instructions
to exploit instruction slots available after delayed branch
instructions.
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fschedule-insns</code><dd><a name="index-fschedule_002dinsns-767"></a>If supported for the target machine, attempt to reorder instructions to
+ <br><dt><code>-fschedule-insns</code><dd><a name="index-fschedule_002dinsns-768"></a>If supported for the target machine, attempt to reorder instructions to
eliminate execution stalls due to required data being unavailable. This
helps machines that have slow floating point or memory load instructions
by allowing other instructions to be issued until the result of the load
@@ -647,22 +647,22 @@ or floating-point instruction is required.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-fschedule-insns2</code><dd><a name="index-fschedule_002dinsns2-768"></a>Similar to <samp><span class="option">-fschedule-insns</span></samp>, but requests an additional pass of
+ <br><dt><code>-fschedule-insns2</code><dd><a name="index-fschedule_002dinsns2-769"></a>Similar to <samp><span class="option">-fschedule-insns</span></samp>, but requests an additional pass of
instruction scheduling after register allocation has been done. This is
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fno-sched-interblock</code><dd><a name="index-fno_002dsched_002dinterblock-769"></a>Don't schedule instructions across basic blocks. This is normally
+ <br><dt><code>-fno-sched-interblock</code><dd><a name="index-fno_002dsched_002dinterblock-770"></a>Don't schedule instructions across basic blocks. This is normally
enabled by default when scheduling before register allocation, i.e.
with <samp><span class="option">-fschedule-insns</span></samp> or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fno-sched-spec</code><dd><a name="index-fno_002dsched_002dspec-770"></a>Don't allow speculative motion of non-load instructions. This is normally
+ <br><dt><code>-fno-sched-spec</code><dd><a name="index-fno_002dsched_002dspec-771"></a>Don't allow speculative motion of non-load instructions. This is normally
enabled by default when scheduling before register allocation, i.e.
with <samp><span class="option">-fschedule-insns</span></samp> or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-pressure</code><dd><a name="index-fsched_002dpressure-771"></a>Enable register pressure sensitive insn scheduling before the register
+ <br><dt><code>-fsched-pressure</code><dd><a name="index-fsched_002dpressure-772"></a>Enable register pressure sensitive insn scheduling before the register
allocation. This only makes sense when scheduling before register
allocation is enabled, i.e. with <samp><span class="option">-fschedule-insns</span></samp> or at
<samp><span class="option">-O2</span></samp> or higher. Usage of this option can improve the
@@ -670,15 +670,15 @@ generated code and decrease its size by preventing register pressure
increase above the number of available hard registers and as a
consequence register spills in the register allocation.
- <br><dt><code>-fsched-spec-load</code><dd><a name="index-fsched_002dspec_002dload-772"></a>Allow speculative motion of some load instructions. This only makes
+ <br><dt><code>-fsched-spec-load</code><dd><a name="index-fsched_002dspec_002dload-773"></a>Allow speculative motion of some load instructions. This only makes
sense when scheduling before register allocation, i.e. with
<samp><span class="option">-fschedule-insns</span></samp> or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-spec-load-dangerous</code><dd><a name="index-fsched_002dspec_002dload_002ddangerous-773"></a>Allow speculative motion of more load instructions. This only makes
+ <br><dt><code>-fsched-spec-load-dangerous</code><dd><a name="index-fsched_002dspec_002dload_002ddangerous-774"></a>Allow speculative motion of more load instructions. This only makes
sense when scheduling before register allocation, i.e. with
<samp><span class="option">-fschedule-insns</span></samp> or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-stalled-insns</code><dt><code>-fsched-stalled-insns=</code><var>n</var><dd><a name="index-fsched_002dstalled_002dinsns-774"></a>Define how many insns (if any) can be moved prematurely from the queue
+ <br><dt><code>-fsched-stalled-insns</code><dt><code>-fsched-stalled-insns=</code><var>n</var><dd><a name="index-fsched_002dstalled_002dinsns-775"></a>Define how many insns (if any) can be moved prematurely from the queue
of stalled insns into the ready list, during the second scheduling pass.
<samp><span class="option">-fno-sched-stalled-insns</span></samp> means that no insns will be moved
prematurely, <samp><span class="option">-fsched-stalled-insns=0</span></samp> means there is no limit
@@ -686,7 +686,7 @@ on how many queued insns can be moved prematurely.
<samp><span class="option">-fsched-stalled-insns</span></samp> without a value is equivalent to
<samp><span class="option">-fsched-stalled-insns=1</span></samp>.
- <br><dt><code>-fsched-stalled-insns-dep</code><dt><code>-fsched-stalled-insns-dep=</code><var>n</var><dd><a name="index-fsched_002dstalled_002dinsns_002ddep-775"></a>Define how many insn groups (cycles) will be examined for a dependency
+ <br><dt><code>-fsched-stalled-insns-dep</code><dt><code>-fsched-stalled-insns-dep=</code><var>n</var><dd><a name="index-fsched_002dstalled_002dinsns_002ddep-776"></a>Define how many insn groups (cycles) will be examined for a dependency
on a stalled insn that is candidate for premature removal from the queue
of stalled insns. This has an effect only during the second scheduling pass,
and only if <samp><span class="option">-fsched-stalled-insns</span></samp> is used.
@@ -695,7 +695,7 @@ and only if <samp><span class="option">-fsched-stalled-insns</span></samp> is us
<samp><span class="option">-fsched-stalled-insns-dep</span></samp> without a value is equivalent to
<samp><span class="option">-fsched-stalled-insns-dep=1</span></samp>.
- <br><dt><code>-fsched2-use-superblocks</code><dd><a name="index-fsched2_002duse_002dsuperblocks-776"></a>When scheduling after register allocation, do use superblock scheduling
+ <br><dt><code>-fsched2-use-superblocks</code><dd><a name="index-fsched2_002duse_002dsuperblocks-777"></a>When scheduling after register allocation, do use superblock scheduling
algorithm. Superblock scheduling allows motion across basic block boundaries
resulting on faster schedules. This option is experimental, as not all machine
descriptions used by GCC model the CPU closely enough to avoid unreliable
@@ -704,62 +704,62 @@ results from the algorithm.
<p>This only makes sense when scheduling after register allocation, i.e. with
<samp><span class="option">-fschedule-insns2</span></samp> or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-group-heuristic</code><dd><a name="index-fsched_002dgroup_002dheuristic-777"></a>Enable the group heuristic in the scheduler. This heuristic favors
+ <br><dt><code>-fsched-group-heuristic</code><dd><a name="index-fsched_002dgroup_002dheuristic-778"></a>Enable the group heuristic in the scheduler. This heuristic favors
the instruction that belongs to a schedule group. This is enabled
by default when scheduling is enabled, i.e. with <samp><span class="option">-fschedule-insns</span></samp>
or <samp><span class="option">-fschedule-insns2</span></samp> or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-critical-path-heuristic</code><dd><a name="index-fsched_002dcritical_002dpath_002dheuristic-778"></a>Enable the critical-path heuristic in the scheduler. This heuristic favors
+ <br><dt><code>-fsched-critical-path-heuristic</code><dd><a name="index-fsched_002dcritical_002dpath_002dheuristic-779"></a>Enable the critical-path heuristic in the scheduler. This heuristic favors
instructions on the critical path. This is enabled by default when
scheduling is enabled, i.e. with <samp><span class="option">-fschedule-insns</span></samp>
or <samp><span class="option">-fschedule-insns2</span></samp> or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-spec-insn-heuristic</code><dd><a name="index-fsched_002dspec_002dinsn_002dheuristic-779"></a>Enable the speculative instruction heuristic in the scheduler. This
+ <br><dt><code>-fsched-spec-insn-heuristic</code><dd><a name="index-fsched_002dspec_002dinsn_002dheuristic-780"></a>Enable the speculative instruction heuristic in the scheduler. This
heuristic favors speculative instructions with greater dependency weakness.
This is enabled by default when scheduling is enabled, i.e.
with <samp><span class="option">-fschedule-insns</span></samp> or <samp><span class="option">-fschedule-insns2</span></samp>
or at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-rank-heuristic</code><dd><a name="index-fsched_002drank_002dheuristic-780"></a>Enable the rank heuristic in the scheduler. This heuristic favors
+ <br><dt><code>-fsched-rank-heuristic</code><dd><a name="index-fsched_002drank_002dheuristic-781"></a>Enable the rank heuristic in the scheduler. This heuristic favors
the instruction belonging to a basic block with greater size or frequency.
This is enabled by default when scheduling is enabled, i.e.
with <samp><span class="option">-fschedule-insns</span></samp> or <samp><span class="option">-fschedule-insns2</span></samp> or
at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-last-insn-heuristic</code><dd><a name="index-fsched_002dlast_002dinsn_002dheuristic-781"></a>Enable the last-instruction heuristic in the scheduler. This heuristic
+ <br><dt><code>-fsched-last-insn-heuristic</code><dd><a name="index-fsched_002dlast_002dinsn_002dheuristic-782"></a>Enable the last-instruction heuristic in the scheduler. This heuristic
favors the instruction that is less dependent on the last instruction
scheduled. This is enabled by default when scheduling is enabled,
i.e. with <samp><span class="option">-fschedule-insns</span></samp> or <samp><span class="option">-fschedule-insns2</span></samp> or
at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-fsched-dep-count-heuristic</code><dd><a name="index-fsched_002ddep_002dcount_002dheuristic-782"></a>Enable the dependent-count heuristic in the scheduler. This heuristic
+ <br><dt><code>-fsched-dep-count-heuristic</code><dd><a name="index-fsched_002ddep_002dcount_002dheuristic-783"></a>Enable the dependent-count heuristic in the scheduler. This heuristic
favors the instruction that has more instructions depending on it.
This is enabled by default when scheduling is enabled, i.e.
with <samp><span class="option">-fschedule-insns</span></samp> or <samp><span class="option">-fschedule-insns2</span></samp> or
at <samp><span class="option">-O2</span></samp> or higher.
- <br><dt><code>-freschedule-modulo-scheduled-loops</code><dd><a name="index-freschedule_002dmodulo_002dscheduled_002dloops-783"></a>The modulo scheduling comes before the traditional scheduling, if a loop
+ <br><dt><code>-freschedule-modulo-scheduled-loops</code><dd><a name="index-freschedule_002dmodulo_002dscheduled_002dloops-784"></a>The modulo scheduling comes before the traditional scheduling, if a loop
was modulo scheduled we may want to prevent the later scheduling passes
from changing its schedule, we use this option to control that.
- <br><dt><code>-fselective-scheduling</code><dd><a name="index-fselective_002dscheduling-784"></a>Schedule instructions using selective scheduling algorithm. Selective
+ <br><dt><code>-fselective-scheduling</code><dd><a name="index-fselective_002dscheduling-785"></a>Schedule instructions using selective scheduling algorithm. Selective
scheduling runs instead of the first scheduler pass.
- <br><dt><code>-fselective-scheduling2</code><dd><a name="index-fselective_002dscheduling2-785"></a>Schedule instructions using selective scheduling algorithm. Selective
+ <br><dt><code>-fselective-scheduling2</code><dd><a name="index-fselective_002dscheduling2-786"></a>Schedule instructions using selective scheduling algorithm. Selective
scheduling runs instead of the second scheduler pass.
- <br><dt><code>-fsel-sched-pipelining</code><dd><a name="index-fsel_002dsched_002dpipelining-786"></a>Enable software pipelining of innermost loops during selective scheduling.
+ <br><dt><code>-fsel-sched-pipelining</code><dd><a name="index-fsel_002dsched_002dpipelining-787"></a>Enable software pipelining of innermost loops during selective scheduling.
This option has no effect until one of <samp><span class="option">-fselective-scheduling</span></samp> or
<samp><span class="option">-fselective-scheduling2</span></samp> is turned on.
- <br><dt><code>-fsel-sched-pipelining-outer-loops</code><dd><a name="index-fsel_002dsched_002dpipelining_002douter_002dloops-787"></a>When pipelining loops during selective scheduling, also pipeline outer loops.
+ <br><dt><code>-fsel-sched-pipelining-outer-loops</code><dd><a name="index-fsel_002dsched_002dpipelining_002douter_002dloops-788"></a>When pipelining loops during selective scheduling, also pipeline outer loops.
This option has no effect until <samp><span class="option">-fsel-sched-pipelining</span></samp> is turned on.
- <br><dt><code>-fshrink-wrap</code><dd><a name="index-fshrink_002dwrap-788"></a>Emit function prologues only before parts of the function that need it,
+ <br><dt><code>-fshrink-wrap</code><dd><a name="index-fshrink_002dwrap-789"></a>Emit function prologues only before parts of the function that need it,
rather than at the top of the function. This flag is enabled by default at
<samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-fcaller-saves</code><dd><a name="index-fcaller_002dsaves-789"></a>Enable values to be allocated in registers that will be clobbered by
+ <br><dt><code>-fcaller-saves</code><dd><a name="index-fcaller_002dsaves-790"></a>Enable values to be allocated in registers that will be clobbered by
function calls, by emitting extra instructions to save and restore the
registers around such calls. Such allocation is done only when it
seems to result in better code than would otherwise be produced.
@@ -769,65 +769,68 @@ those which have no call-preserved registers to use instead.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fcombine-stack-adjustments</code><dd><a name="index-fcombine_002dstack_002dadjustments-790"></a>Tracks stack adjustments (pushes and pops) and stack memory references
+ <br><dt><code>-fcombine-stack-adjustments</code><dd><a name="index-fcombine_002dstack_002dadjustments-791"></a>Tracks stack adjustments (pushes and pops) and stack memory references
and then tries to find ways to combine them.
<p>Enabled by default at <samp><span class="option">-O1</span></samp> and higher.
- <br><dt><code>-fconserve-stack</code><dd><a name="index-fconserve_002dstack-791"></a>Attempt to minimize stack usage. The compiler will attempt to use less
+ <br><dt><code>-fconserve-stack</code><dd><a name="index-fconserve_002dstack-792"></a>Attempt to minimize stack usage. The compiler will attempt to use less
stack space, even if that makes the program slower. This option
implies setting the <samp><span class="option">large-stack-frame</span></samp> parameter to 100
and the <samp><span class="option">large-stack-frame-growth</span></samp> parameter to 400.
- <br><dt><code>-ftree-reassoc</code><dd><a name="index-ftree_002dreassoc-792"></a>Perform reassociation on trees. This flag is enabled by default
+ <br><dt><code>-ftree-reassoc</code><dd><a name="index-ftree_002dreassoc-793"></a>Perform reassociation on trees. This flag is enabled by default
at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-pre</code><dd><a name="index-ftree_002dpre-793"></a>Perform partial redundancy elimination (PRE) on trees. This flag is
+ <br><dt><code>-ftree-pre</code><dd><a name="index-ftree_002dpre-794"></a>Perform partial redundancy elimination (PRE) on trees. This flag is
enabled by default at <samp><span class="option">-O2</span></samp> and <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-ftree-forwprop</code><dd><a name="index-ftree_002dforwprop-794"></a>Perform forward propagation on trees. This flag is enabled by default
+ <br><dt><code>-ftree-partial-pre</code><dd><a name="index-ftree_002dpartial_002dpre-795"></a>Make partial redundancy elimination (PRE) more aggressive. This flag is
+enabled by default at <samp><span class="option">-O3</span></samp>.
+
+ <br><dt><code>-ftree-forwprop</code><dd><a name="index-ftree_002dforwprop-796"></a>Perform forward propagation on trees. This flag is enabled by default
at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-fre</code><dd><a name="index-ftree_002dfre-795"></a>Perform full redundancy elimination (FRE) on trees. The difference
+ <br><dt><code>-ftree-fre</code><dd><a name="index-ftree_002dfre-797"></a>Perform full redundancy elimination (FRE) on trees. The difference
between FRE and PRE is that FRE only considers expressions
that are computed on all paths leading to the redundant computation.
This analysis is faster than PRE, though it exposes fewer redundancies.
This flag is enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-phiprop</code><dd><a name="index-ftree_002dphiprop-796"></a>Perform hoisting of loads from conditional pointers on trees. This
+ <br><dt><code>-ftree-phiprop</code><dd><a name="index-ftree_002dphiprop-798"></a>Perform hoisting of loads from conditional pointers on trees. This
pass is enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-copy-prop</code><dd><a name="index-ftree_002dcopy_002dprop-797"></a>Perform copy propagation on trees. This pass eliminates unnecessary
+ <br><dt><code>-ftree-copy-prop</code><dd><a name="index-ftree_002dcopy_002dprop-799"></a>Perform copy propagation on trees. This pass eliminates unnecessary
copy operations. This flag is enabled by default at <samp><span class="option">-O</span></samp> and
higher.
- <br><dt><code>-fipa-pure-const</code><dd><a name="index-fipa_002dpure_002dconst-798"></a>Discover which functions are pure or constant.
+ <br><dt><code>-fipa-pure-const</code><dd><a name="index-fipa_002dpure_002dconst-800"></a>Discover which functions are pure or constant.
Enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-fipa-reference</code><dd><a name="index-fipa_002dreference-799"></a>Discover which static variables do not escape cannot escape the
+ <br><dt><code>-fipa-reference</code><dd><a name="index-fipa_002dreference-801"></a>Discover which static variables do not escape cannot escape the
compilation unit.
Enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-fipa-pta</code><dd><a name="index-fipa_002dpta-800"></a>Perform interprocedural pointer analysis and interprocedural modification
+ <br><dt><code>-fipa-pta</code><dd><a name="index-fipa_002dpta-802"></a>Perform interprocedural pointer analysis and interprocedural modification
and reference analysis. This option can cause excessive memory and
compile-time usage on large compilation units. It is not enabled by
default at any optimization level.
- <br><dt><code>-fipa-profile</code><dd><a name="index-fipa_002dprofile-801"></a>Perform interprocedural profile propagation. The functions called only from
+ <br><dt><code>-fipa-profile</code><dd><a name="index-fipa_002dprofile-803"></a>Perform interprocedural profile propagation. The functions called only from
cold functions are marked as cold. Also functions executed once (such as
<code>cold</code>, <code>noreturn</code>, static constructors or destructors) are identified. Cold
functions and loop less parts of functions executed once are then optimized for
size.
Enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-fipa-cp</code><dd><a name="index-fipa_002dcp-802"></a>Perform interprocedural constant propagation.
+ <br><dt><code>-fipa-cp</code><dd><a name="index-fipa_002dcp-804"></a>Perform interprocedural constant propagation.
This optimization analyzes the program to determine when values passed
to functions are constants and then optimizes accordingly.
This optimization can substantially increase performance
if the application has constants passed to functions.
This flag is enabled by default at <samp><span class="option">-O2</span></samp>, <samp><span class="option">-Os</span></samp> and <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-fipa-cp-clone</code><dd><a name="index-fipa_002dcp_002dclone-803"></a>Perform function cloning to make interprocedural constant propagation stronger.
+ <br><dt><code>-fipa-cp-clone</code><dd><a name="index-fipa_002dcp_002dclone-805"></a>Perform function cloning to make interprocedural constant propagation stronger.
When enabled, interprocedural constant propagation will perform function cloning
when externally visible function can be called with constant arguments.
Because this optimization can create multiple copies of functions,
@@ -835,7 +838,7 @@ it may significantly increase code size
(see <samp><span class="option">--param ipcp-unit-growth=</span><var>value</var></samp>).
This flag is enabled by default at <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-fipa-matrix-reorg</code><dd><a name="index-fipa_002dmatrix_002dreorg-804"></a>Perform matrix flattening and transposing.
+ <br><dt><code>-fipa-matrix-reorg</code><dd><a name="index-fipa_002dmatrix_002dreorg-806"></a>Perform matrix flattening and transposing.
Matrix flattening tries to replace an m-dimensional matrix
with its equivalent n-dimensional matrix, where n &lt; m.
This reduces the level of indirection needed for accessing the elements
@@ -845,15 +848,15 @@ improve cache locality.
Both optimizations need the <samp><span class="option">-fwhole-program</span></samp> flag.
Transposing is enabled only if profiling information is available.
- <br><dt><code>-ftree-sink</code><dd><a name="index-ftree_002dsink-805"></a>Perform forward store motion on trees. This flag is
+ <br><dt><code>-ftree-sink</code><dd><a name="index-ftree_002dsink-807"></a>Perform forward store motion on trees. This flag is
enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-bit-ccp</code><dd><a name="index-ftree_002dbit_002dccp-806"></a>Perform sparse conditional bit constant propagation on trees and propagate
+ <br><dt><code>-ftree-bit-ccp</code><dd><a name="index-ftree_002dbit_002dccp-808"></a>Perform sparse conditional bit constant propagation on trees and propagate
pointer alignment information.
This pass only operates on local scalar variables and is enabled by default
at <samp><span class="option">-O</span></samp> and higher. It requires that <samp><span class="option">-ftree-ccp</span></samp> is enabled.
- <br><dt><code>-ftree-ccp</code><dd><a name="index-ftree_002dccp-807"></a>Perform sparse conditional constant propagation (CCP) on trees. This
+ <br><dt><code>-ftree-ccp</code><dd><a name="index-ftree_002dccp-809"></a>Perform sparse conditional constant propagation (CCP) on trees. This
pass only operates on local scalar variables and is enabled by default
at <samp><span class="option">-O</span></samp> and higher.
@@ -868,39 +871,39 @@ in this pass can
be limited using <samp><span class="option">max-tail-merge-comparisons</span></samp> parameter and
<samp><span class="option">max-tail-merge-iterations</span></samp> parameter.
- <br><dt><code>-ftree-dce</code><dd><a name="index-ftree_002ddce-808"></a>Perform dead code elimination (DCE) on trees. This flag is enabled by
+ <br><dt><code>-ftree-dce</code><dd><a name="index-ftree_002ddce-810"></a>Perform dead code elimination (DCE) on trees. This flag is enabled by
default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-builtin-call-dce</code><dd><a name="index-ftree_002dbuiltin_002dcall_002ddce-809"></a>Perform conditional dead code elimination (DCE) for calls to builtin functions
+ <br><dt><code>-ftree-builtin-call-dce</code><dd><a name="index-ftree_002dbuiltin_002dcall_002ddce-811"></a>Perform conditional dead code elimination (DCE) for calls to builtin functions
that may set <code>errno</code> but are otherwise side-effect free. This flag is
enabled by default at <samp><span class="option">-O2</span></samp> and higher if <samp><span class="option">-Os</span></samp> is not also
specified.
- <br><dt><code>-ftree-dominator-opts</code><dd><a name="index-ftree_002ddominator_002dopts-810"></a>Perform a variety of simple scalar cleanups (constant/copy
+ <br><dt><code>-ftree-dominator-opts</code><dd><a name="index-ftree_002ddominator_002dopts-812"></a>Perform a variety of simple scalar cleanups (constant/copy
propagation, redundancy elimination, range propagation and expression
simplification) based on a dominator tree traversal. This also
performs jump threading (to reduce jumps to jumps). This flag is
enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-dse</code><dd><a name="index-ftree_002ddse-811"></a>Perform dead store elimination (DSE) on trees. A dead store is a store into
+ <br><dt><code>-ftree-dse</code><dd><a name="index-ftree_002ddse-813"></a>Perform dead store elimination (DSE) on trees. A dead store is a store into
a memory location that is later overwritten by another store without
any intervening loads. In this case the earlier store can be deleted. This
flag is enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-ch</code><dd><a name="index-ftree_002dch-812"></a>Perform loop header copying on trees. This is beneficial since it increases
+ <br><dt><code>-ftree-ch</code><dd><a name="index-ftree_002dch-814"></a>Perform loop header copying on trees. This is beneficial since it increases
effectiveness of code motion optimizations. It also saves one jump. This flag
is enabled by default at <samp><span class="option">-O</span></samp> and higher. It is not enabled
for <samp><span class="option">-Os</span></samp>, since it usually increases code size.
- <br><dt><code>-ftree-loop-optimize</code><dd><a name="index-ftree_002dloop_002doptimize-813"></a>Perform loop optimizations on trees. This flag is enabled by default
+ <br><dt><code>-ftree-loop-optimize</code><dd><a name="index-ftree_002dloop_002doptimize-815"></a>Perform loop optimizations on trees. This flag is enabled by default
at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-loop-linear</code><dd><a name="index-ftree_002dloop_002dlinear-814"></a>Perform loop interchange transformations on tree. Same as
+ <br><dt><code>-ftree-loop-linear</code><dd><a name="index-ftree_002dloop_002dlinear-816"></a>Perform loop interchange transformations on tree. Same as
<samp><span class="option">-floop-interchange</span></samp>. To use this code transformation, GCC has
to be configured with <samp><span class="option">--with-ppl</span></samp> and <samp><span class="option">--with-cloog</span></samp> to
enable the Graphite loop transformation infrastructure.
- <br><dt><code>-floop-interchange</code><dd><a name="index-floop_002dinterchange-815"></a>Perform loop interchange transformations on loops. Interchanging two
+ <br><dt><code>-floop-interchange</code><dd><a name="index-floop_002dinterchange-817"></a>Perform loop interchange transformations on loops. Interchanging two
nested loops switches the inner and outer loops. For example, given a
loop like:
<pre class="smallexample"> DO J = 1, M
@@ -925,7 +928,7 @@ Fortran. To use this code transformation, GCC has to be configured
with <samp><span class="option">--with-ppl</span></samp> and <samp><span class="option">--with-cloog</span></samp> to enable the
Graphite loop transformation infrastructure.
- <br><dt><code>-floop-strip-mine</code><dd><a name="index-floop_002dstrip_002dmine-816"></a>Perform loop strip mining transformations on loops. Strip mining
+ <br><dt><code>-floop-strip-mine</code><dd><a name="index-floop_002dstrip_002dmine-818"></a>Perform loop strip mining transformations on loops. Strip mining
splits a loop into two nested loops. The outer loop has strides
equal to the strip size and the inner loop has strides of the
original loop within a strip. The strip length can be changed
@@ -947,7 +950,7 @@ not limited to Fortran. To use this code transformation, GCC has to
be configured with <samp><span class="option">--with-ppl</span></samp> and <samp><span class="option">--with-cloog</span></samp> to
enable the Graphite loop transformation infrastructure.
- <br><dt><code>-floop-block</code><dd><a name="index-floop_002dblock-817"></a>Perform loop blocking transformations on loops. Blocking strip mines
+ <br><dt><code>-floop-block</code><dd><a name="index-floop_002dblock-819"></a>Perform loop blocking transformations on loops. Blocking strip mines
each loop in the loop nest such that the memory accesses of the
element loops fit inside caches. The strip length can be changed
using the <samp><span class="option">loop-block-tile-size</span></samp> parameter. For example, given
@@ -977,14 +980,14 @@ code transformation, GCC has to be configured with <samp><span class="option">--
and <samp><span class="option">--with-cloog</span></samp> to enable the Graphite loop transformation
infrastructure.
- <br><dt><code>-fgraphite-identity</code><dd><a name="index-fgraphite_002didentity-818"></a>Enable the identity transformation for graphite. For every SCoP we generate
+ <br><dt><code>-fgraphite-identity</code><dd><a name="index-fgraphite_002didentity-820"></a>Enable the identity transformation for graphite. For every SCoP we generate
the polyhedral representation and transform it back to gimple. Using
<samp><span class="option">-fgraphite-identity</span></samp> we can check the costs or benefits of the
GIMPLE -&gt; GRAPHITE -&gt; GIMPLE transformation. Some minimal optimizations
are also performed by the code generator CLooG, like index splitting and
dead code elimination in loops.
- <br><dt><code>-floop-flatten</code><dd><a name="index-floop_002dflatten-819"></a>Removes the loop nesting structure: transforms the loop nest into a
+ <br><dt><code>-floop-flatten</code><dd><a name="index-floop_002dflatten-821"></a>Removes the loop nesting structure: transforms the loop nest into a
single loop. This transformation can be useful as an enablement
transform for vectorization and parallelization. This feature
is experimental.
@@ -992,12 +995,12 @@ To use this code transformation, GCC has to be configured
with <samp><span class="option">--with-ppl</span></samp> and <samp><span class="option">--with-cloog</span></samp> to enable the
Graphite loop transformation infrastructure.
- <br><dt><code>-floop-parallelize-all</code><dd><a name="index-floop_002dparallelize_002dall-820"></a>Use the Graphite data dependence analysis to identify loops that can
+ <br><dt><code>-floop-parallelize-all</code><dd><a name="index-floop_002dparallelize_002dall-822"></a>Use the Graphite data dependence analysis to identify loops that can
be parallelized. Parallelize all the loops that can be analyzed to
not contain loop carried dependences without checking that it is
profitable to parallelize the loops.
- <br><dt><code>-fcheck-data-deps</code><dd><a name="index-fcheck_002ddata_002ddeps-821"></a>Compare the results of several data dependence analyzers. This option
+ <br><dt><code>-fcheck-data-deps</code><dd><a name="index-fcheck_002ddata_002ddeps-823"></a>Compare the results of several data dependence analyzers. This option
is used for debugging the data dependence analyzers.
<br><dt><code>-ftree-loop-if-convert</code><dd>Attempt to transform conditional jumps in the innermost loops to
@@ -1056,22 +1059,22 @@ memset zero. For example, the loop
</pre>
<p>and the initialization loop is transformed into a call to memset zero.
- <br><dt><code>-ftree-loop-im</code><dd><a name="index-ftree_002dloop_002dim-822"></a>Perform loop invariant motion on trees. This pass moves only invariants that
+ <br><dt><code>-ftree-loop-im</code><dd><a name="index-ftree_002dloop_002dim-824"></a>Perform loop invariant motion on trees. This pass moves only invariants that
would be hard to handle at RTL level (function calls, operations that expand to
nontrivial sequences of insns). With <samp><span class="option">-funswitch-loops</span></samp> it also moves
operands of conditions that are invariant out of the loop, so that we can use
just trivial invariantness analysis in loop unswitching. The pass also includes
store motion.
- <br><dt><code>-ftree-loop-ivcanon</code><dd><a name="index-ftree_002dloop_002divcanon-823"></a>Create a canonical counter for number of iterations in loops for which
+ <br><dt><code>-ftree-loop-ivcanon</code><dd><a name="index-ftree_002dloop_002divcanon-825"></a>Create a canonical counter for number of iterations in loops for which
determining number of iterations requires complicated analysis. Later
optimizations then may determine the number easily. Useful especially
in connection with unrolling.
- <br><dt><code>-fivopts</code><dd><a name="index-fivopts-824"></a>Perform induction variable optimizations (strength reduction, induction
+ <br><dt><code>-fivopts</code><dd><a name="index-fivopts-826"></a>Perform induction variable optimizations (strength reduction, induction
variable merging and induction variable elimination) on trees.
- <br><dt><code>-ftree-parallelize-loops=n</code><dd><a name="index-ftree_002dparallelize_002dloops-825"></a>Parallelize loops, i.e., split their iteration space to run in n threads.
+ <br><dt><code>-ftree-parallelize-loops=n</code><dd><a name="index-ftree_002dparallelize_002dloops-827"></a>Parallelize loops, i.e., split their iteration space to run in n threads.
This is only possible for loops whose iterations are independent
and can be arbitrarily reordered. The optimization is only
profitable on multiprocessor machines, for loops that are CPU-intensive,
@@ -1079,40 +1082,40 @@ rather than constrained e.g. by memory bandwidth. This option
implies <samp><span class="option">-pthread</span></samp>, and thus is only supported on targets
that have support for <samp><span class="option">-pthread</span></samp>.
- <br><dt><code>-ftree-pta</code><dd><a name="index-ftree_002dpta-826"></a>Perform function-local points-to analysis on trees. This flag is
+ <br><dt><code>-ftree-pta</code><dd><a name="index-ftree_002dpta-828"></a>Perform function-local points-to analysis on trees. This flag is
enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-sra</code><dd><a name="index-ftree_002dsra-827"></a>Perform scalar replacement of aggregates. This pass replaces structure
+ <br><dt><code>-ftree-sra</code><dd><a name="index-ftree_002dsra-829"></a>Perform scalar replacement of aggregates. This pass replaces structure
references with scalars to prevent committing structures to memory too
early. This flag is enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-copyrename</code><dd><a name="index-ftree_002dcopyrename-828"></a>Perform copy renaming on trees. This pass attempts to rename compiler
+ <br><dt><code>-ftree-copyrename</code><dd><a name="index-ftree_002dcopyrename-830"></a>Perform copy renaming on trees. This pass attempts to rename compiler
temporaries to other variables at copy locations, usually resulting in
variable names which more closely resemble the original variables. This flag
is enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-ter</code><dd><a name="index-ftree_002dter-829"></a>Perform temporary expression replacement during the SSA-&gt;normal phase. Single
+ <br><dt><code>-ftree-ter</code><dd><a name="index-ftree_002dter-831"></a>Perform temporary expression replacement during the SSA-&gt;normal phase. Single
use/single def temporaries are replaced at their use location with their
defining expression. This results in non-GIMPLE code, but gives the expanders
much more complex trees to work on resulting in better RTL generation. This is
enabled by default at <samp><span class="option">-O</span></samp> and higher.
- <br><dt><code>-ftree-vectorize</code><dd><a name="index-ftree_002dvectorize-830"></a>Perform loop vectorization on trees. This flag is enabled by default at
+ <br><dt><code>-ftree-vectorize</code><dd><a name="index-ftree_002dvectorize-832"></a>Perform loop vectorization on trees. This flag is enabled by default at
<samp><span class="option">-O3</span></samp>.
- <br><dt><code>-ftree-slp-vectorize</code><dd><a name="index-ftree_002dslp_002dvectorize-831"></a>Perform basic block vectorization on trees. This flag is enabled by default at
+ <br><dt><code>-ftree-slp-vectorize</code><dd><a name="index-ftree_002dslp_002dvectorize-833"></a>Perform basic block vectorization on trees. This flag is enabled by default at
<samp><span class="option">-O3</span></samp> and when <samp><span class="option">-ftree-vectorize</span></samp> is enabled.
- <br><dt><code>-ftree-vect-loop-version</code><dd><a name="index-ftree_002dvect_002dloop_002dversion-832"></a>Perform loop versioning when doing loop vectorization on trees. When a loop
+ <br><dt><code>-ftree-vect-loop-version</code><dd><a name="index-ftree_002dvect_002dloop_002dversion-834"></a>Perform loop versioning when doing loop vectorization on trees. When a loop
appears to be vectorizable except that data alignment or data dependence cannot
be determined at compile time, then vectorized and non-vectorized versions of
the loop are generated along with run-time checks for alignment or dependence
to control which version is executed. This option is enabled by default
except at level <samp><span class="option">-Os</span></samp> where it is disabled.
- <br><dt><code>-fvect-cost-model</code><dd><a name="index-fvect_002dcost_002dmodel-833"></a>Enable cost model for vectorization.
+ <br><dt><code>-fvect-cost-model</code><dd><a name="index-fvect_002dcost_002dmodel-835"></a>Enable cost model for vectorization.
- <br><dt><code>-ftree-vrp</code><dd><a name="index-ftree_002dvrp-834"></a>Perform Value Range Propagation on trees. This is similar to the
+ <br><dt><code>-ftree-vrp</code><dd><a name="index-ftree_002dvrp-836"></a>Perform Value Range Propagation on trees. This is similar to the
constant propagation pass, but instead of values, ranges of values are
propagated. This allows the optimizers to remove unnecessary range
checks like array bound checks and null pointer checks. This is
@@ -1120,21 +1123,21 @@ enabled by default at <samp><span class="option">-O2</span></samp> and higher.
elimination is only done if <samp><span class="option">-fdelete-null-pointer-checks</span></samp> is
enabled.
- <br><dt><code>-ftracer</code><dd><a name="index-ftracer-835"></a>Perform tail duplication to enlarge superblock size. This transformation
+ <br><dt><code>-ftracer</code><dd><a name="index-ftracer-837"></a>Perform tail duplication to enlarge superblock size. This transformation
simplifies the control flow of the function allowing other optimizations to do
better job.
- <br><dt><code>-funroll-loops</code><dd><a name="index-funroll_002dloops-836"></a>Unroll loops whose number of iterations can be determined at compile
+ <br><dt><code>-funroll-loops</code><dd><a name="index-funroll_002dloops-838"></a>Unroll loops whose number of iterations can be determined at compile
time or upon entry to the loop. <samp><span class="option">-funroll-loops</span></samp> implies
<samp><span class="option">-frerun-cse-after-loop</span></samp>. This option makes code larger,
and may or may not make it run faster.
- <br><dt><code>-funroll-all-loops</code><dd><a name="index-funroll_002dall_002dloops-837"></a>Unroll all loops, even if their number of iterations is uncertain when
+ <br><dt><code>-funroll-all-loops</code><dd><a name="index-funroll_002dall_002dloops-839"></a>Unroll all loops, even if their number of iterations is uncertain when
the loop is entered. This usually makes programs run more slowly.
<samp><span class="option">-funroll-all-loops</span></samp> implies the same options as
<samp><span class="option">-funroll-loops</span></samp>,
- <br><dt><code>-fsplit-ivs-in-unroller</code><dd><a name="index-fsplit_002divs_002din_002dunroller-838"></a>Enables expressing of values of induction variables in later iterations
+ <br><dt><code>-fsplit-ivs-in-unroller</code><dd><a name="index-fsplit_002divs_002din_002dunroller-840"></a>Enables expressing of values of induction variables in later iterations
of the unrolled loop using the value in the first iteration. This breaks
long dependency chains, thus improving efficiency of the scheduling passes.
@@ -1145,22 +1148,22 @@ on some of the architectures due to restrictions in the CSE pass.
<p>This optimization is enabled by default.
- <br><dt><code>-fvariable-expansion-in-unroller</code><dd><a name="index-fvariable_002dexpansion_002din_002dunroller-839"></a>With this option, the compiler will create multiple copies of some
+ <br><dt><code>-fvariable-expansion-in-unroller</code><dd><a name="index-fvariable_002dexpansion_002din_002dunroller-841"></a>With this option, the compiler will create multiple copies of some
local variables when unrolling a loop which can result in superior code.
- <br><dt><code>-fpartial-inlining</code><dd><a name="index-fpartial_002dinlining-840"></a>Inline parts of functions. This option has any effect only
+ <br><dt><code>-fpartial-inlining</code><dd><a name="index-fpartial_002dinlining-842"></a>Inline parts of functions. This option has any effect only
when inlining itself is turned on by the <samp><span class="option">-finline-functions</span></samp>
or <samp><span class="option">-finline-small-functions</span></samp> options.
<p>Enabled at level <samp><span class="option">-O2</span></samp>.
- <br><dt><code>-fpredictive-commoning</code><dd><a name="index-fpredictive_002dcommoning-841"></a>Perform predictive commoning optimization, i.e., reusing computations
+ <br><dt><code>-fpredictive-commoning</code><dd><a name="index-fpredictive_002dcommoning-843"></a>Perform predictive commoning optimization, i.e., reusing computations
(especially memory loads and stores) performed in previous
iterations of loops.
<p>This option is enabled at level <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-fprefetch-loop-arrays</code><dd><a name="index-fprefetch_002dloop_002darrays-842"></a>If supported by the target machine, generate instructions to prefetch
+ <br><dt><code>-fprefetch-loop-arrays</code><dd><a name="index-fprefetch_002dloop_002darrays-844"></a>If supported by the target machine, generate instructions to prefetch
memory to improve the performance of loops that access large arrays.
<p>This option may generate better or worse code; results are highly
@@ -1168,7 +1171,7 @@ dependent on the structure of loops within the source code.
<p>Disabled at level <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fno-peephole</code><dt><code>-fno-peephole2</code><dd><a name="index-fno_002dpeephole-843"></a><a name="index-fno_002dpeephole2-844"></a>Disable any machine-specific peephole optimizations. The difference
+ <br><dt><code>-fno-peephole</code><dt><code>-fno-peephole2</code><dd><a name="index-fno_002dpeephole-845"></a><a name="index-fno_002dpeephole2-846"></a>Disable any machine-specific peephole optimizations. The difference
between <samp><span class="option">-fno-peephole</span></samp> and <samp><span class="option">-fno-peephole2</span></samp> is in how they
are implemented in the compiler; some targets use one, some use the
other, a few use both.
@@ -1176,7 +1179,7 @@ other, a few use both.
<p><samp><span class="option">-fpeephole</span></samp> is enabled by default.
<samp><span class="option">-fpeephole2</span></samp> enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fno-guess-branch-probability</code><dd><a name="index-fno_002dguess_002dbranch_002dprobability-845"></a>Do not guess branch probabilities using heuristics.
+ <br><dt><code>-fno-guess-branch-probability</code><dd><a name="index-fno_002dguess_002dbranch_002dprobability-847"></a>Do not guess branch probabilities using heuristics.
<p>GCC will use heuristics to guess branch probabilities if they are
not provided by profiling feedback (<samp><span class="option">-fprofile-arcs</span></samp>). These
@@ -1191,12 +1194,12 @@ of &lsquo;<samp><span class="samp">__builtin_expect</span></samp>&rsquo; are eas
<p>The default is <samp><span class="option">-fguess-branch-probability</span></samp> at levels
<samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-freorder-blocks</code><dd><a name="index-freorder_002dblocks-846"></a>Reorder basic blocks in the compiled function in order to reduce number of
+ <br><dt><code>-freorder-blocks</code><dd><a name="index-freorder_002dblocks-848"></a>Reorder basic blocks in the compiled function in order to reduce number of
taken branches and improve code locality.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-freorder-blocks-and-partition</code><dd><a name="index-freorder_002dblocks_002dand_002dpartition-847"></a>In addition to reordering basic blocks in the compiled function, in order
+ <br><dt><code>-freorder-blocks-and-partition</code><dd><a name="index-freorder_002dblocks_002dand_002dpartition-849"></a>In addition to reordering basic blocks in the compiled function, in order
to reduce number of taken branches, partitions hot and cold basic blocks
into separate sections of the assembly and .o files, to improve
paging and cache locality performance.
@@ -1206,7 +1209,7 @@ exception handling, for linkonce sections, for functions with a user-defined
section attribute and on any architecture that does not support named
sections.
- <br><dt><code>-freorder-functions</code><dd><a name="index-freorder_002dfunctions-848"></a>Reorder functions in the object file in order to
+ <br><dt><code>-freorder-functions</code><dd><a name="index-freorder_002dfunctions-850"></a>Reorder functions in the object file in order to
improve code locality. This is implemented by using special
subsections <code>.text.hot</code> for most frequently executed functions and
<code>.text.unlikely</code> for unlikely executed functions. Reordering is done by
@@ -1218,7 +1221,7 @@ place them in a reasonable way.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fstrict-aliasing</code><dd><a name="index-fstrict_002daliasing-849"></a>Allow the compiler to assume the strictest aliasing rules applicable to
+ <br><dt><code>-fstrict-aliasing</code><dd><a name="index-fstrict_002daliasing-851"></a>Allow the compiler to assume the strictest aliasing rules applicable to
the language being compiled. For C (and C++), this activates
optimizations based on the type of expressions. In particular, an
object of one type is assumed never to reside at the same address as an
@@ -1263,7 +1266,7 @@ uses a union type, e.g.:
<p>The <samp><span class="option">-fstrict-aliasing</span></samp> option is enabled at levels
<samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fstrict-overflow</code><dd><a name="index-fstrict_002doverflow-850"></a>Allow the compiler to assume strict signed overflow rules, depending
+ <br><dt><code>-fstrict-overflow</code><dd><a name="index-fstrict_002doverflow-852"></a>Allow the compiler to assume strict signed overflow rules, depending
on the language being compiled. For C (and C++) this means that
overflow when doing arithmetic with signed numbers is undefined, which
means that the compiler may assume that it will not happen. This
@@ -1296,7 +1299,7 @@ arithmetic on constants, the overflowed value can still be used with
<p>The <samp><span class="option">-fstrict-overflow</span></samp> option is enabled at levels
<samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-falign-functions</code><dt><code>-falign-functions=</code><var>n</var><dd><a name="index-falign_002dfunctions-851"></a>Align the start of functions to the next power-of-two greater than
+ <br><dt><code>-falign-functions</code><dt><code>-falign-functions=</code><var>n</var><dd><a name="index-falign_002dfunctions-853"></a>Align the start of functions to the next power-of-two greater than
<var>n</var>, skipping up to <var>n</var> bytes. For instance,
<samp><span class="option">-falign-functions=32</span></samp> aligns functions to the next 32-byte
boundary, but <samp><span class="option">-falign-functions=24</span></samp> would align to the next
@@ -1312,7 +1315,7 @@ in that case, it is rounded up.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-falign-labels</code><dt><code>-falign-labels=</code><var>n</var><dd><a name="index-falign_002dlabels-852"></a>Align all branch targets to a power-of-two boundary, skipping up to
+ <br><dt><code>-falign-labels</code><dt><code>-falign-labels=</code><var>n</var><dd><a name="index-falign_002dlabels-854"></a>Align all branch targets to a power-of-two boundary, skipping up to
<var>n</var> bytes like <samp><span class="option">-falign-functions</span></samp>. This option can easily
make code slower, because it must insert dummy operations for when the
branch target is reached in the usual flow of the code.
@@ -1328,7 +1331,7 @@ which is very likely to be &lsquo;<samp><span class="samp">1</span></samp>&rsquo
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-falign-loops</code><dt><code>-falign-loops=</code><var>n</var><dd><a name="index-falign_002dloops-853"></a>Align loops to a power-of-two boundary, skipping up to <var>n</var> bytes
+ <br><dt><code>-falign-loops</code><dt><code>-falign-loops=</code><var>n</var><dd><a name="index-falign_002dloops-855"></a>Align loops to a power-of-two boundary, skipping up to <var>n</var> bytes
like <samp><span class="option">-falign-functions</span></samp>. The hope is that the loop will be
executed many times, which will make up for any execution of the dummy
operations.
@@ -1340,7 +1343,7 @@ equivalent and mean that loops will not be aligned.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-falign-jumps</code><dt><code>-falign-jumps=</code><var>n</var><dd><a name="index-falign_002djumps-854"></a>Align branch targets to a power-of-two boundary, for branch targets
+ <br><dt><code>-falign-jumps</code><dt><code>-falign-jumps=</code><var>n</var><dd><a name="index-falign_002djumps-856"></a>Align branch targets to a power-of-two boundary, for branch targets
where the targets can only be reached by jumping, skipping up to <var>n</var>
bytes like <samp><span class="option">-falign-functions</span></samp>. In this case, no dummy operations
need be executed.
@@ -1352,13 +1355,13 @@ equivalent and mean that loops will not be aligned.
<p>Enabled at levels <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>.
- <br><dt><code>-funit-at-a-time</code><dd><a name="index-funit_002dat_002da_002dtime-855"></a>This option is left for compatibility reasons. <samp><span class="option">-funit-at-a-time</span></samp>
+ <br><dt><code>-funit-at-a-time</code><dd><a name="index-funit_002dat_002da_002dtime-857"></a>This option is left for compatibility reasons. <samp><span class="option">-funit-at-a-time</span></samp>
has no effect, while <samp><span class="option">-fno-unit-at-a-time</span></samp> implies
<samp><span class="option">-fno-toplevel-reorder</span></samp> and <samp><span class="option">-fno-section-anchors</span></samp>.
<p>Enabled by default.
- <br><dt><code>-fno-toplevel-reorder</code><dd><a name="index-fno_002dtoplevel_002dreorder-856"></a>Do not reorder top-level functions, variables, and <code>asm</code>
+ <br><dt><code>-fno-toplevel-reorder</code><dd><a name="index-fno_002dtoplevel_002dreorder-858"></a>Do not reorder top-level functions, variables, and <code>asm</code>
statements. Output them in the same order that they appear in the
input file. When this option is used, unreferenced static variables
will not be removed. This option is intended to support existing code
@@ -1369,7 +1372,7 @@ use attributes.
<samp><span class="option">-fno-section-anchors</span></samp>, which is otherwise enabled at <samp><span class="option">-O0</span></samp> on some
targets.
- <br><dt><code>-fweb</code><dd><a name="index-fweb-857"></a>Constructs webs as commonly used for register allocation purposes and assign
+ <br><dt><code>-fweb</code><dd><a name="index-fweb-859"></a>Constructs webs as commonly used for register allocation purposes and assign
each web individual pseudo register. This allows the register allocation pass
to operate on pseudos directly, but also strengthens several other optimization
passes, such as CSE, loop optimizer and trivial dead code remover. It can,
@@ -1378,7 +1381,7 @@ however, make debugging impossible, since variables will no longer stay in a
<p>Enabled by default with <samp><span class="option">-funroll-loops</span></samp>.
- <br><dt><code>-fwhole-program</code><dd><a name="index-fwhole_002dprogram-858"></a>Assume that the current compilation unit represents the whole program being
+ <br><dt><code>-fwhole-program</code><dd><a name="index-fwhole_002dprogram-860"></a>Assume that the current compilation unit represents the whole program being
compiled. All public functions and variables with the exception of <code>main</code>
and those merged by attribute <code>externally_visible</code> become static functions
and in effect are optimized more aggressively by interprocedural optimizers. If <samp><span class="command">gold</span></samp> is used as the linker plugin, <code>externally_visible</code> attributes are automatically added to functions (not variable yet due to a current <samp><span class="command">gold</span></samp> issue) that are accessed outside of LTO objects according to resolution file produced by <samp><span class="command">gold</span></samp>. For other linkers that cannot generate resolution file, explicit <code>externally_visible</code> attributes are still necessary.
@@ -1391,7 +1394,7 @@ itself.
<p>This option implies <samp><span class="option">-fwhole-file</span></samp> for Fortran programs.
- <br><dt><code>-flto[=</code><var>n</var><code>]</code><dd><a name="index-flto-859"></a>This option runs the standard link-time optimizer. When invoked
+ <br><dt><code>-flto[=</code><var>n</var><code>]</code><dd><a name="index-flto-861"></a>This option runs the standard link-time optimizer. When invoked
with source code, it generates GIMPLE (one of GCC's internal
representations) and writes it to special ELF sections in the object
file. When the object files are linked together, all the function
@@ -1551,7 +1554,7 @@ GNU make.
<p>This option is disabled by default
- <br><dt><code>-flto-partition=</code><var>alg</var><dd><a name="index-flto_002dpartition-860"></a>Specify the partitioning algorithm used by the link-time optimizer.
+ <br><dt><code>-flto-partition=</code><var>alg</var><dd><a name="index-flto_002dpartition-862"></a>Specify the partitioning algorithm used by the link-time optimizer.
The value is either <code>1to1</code> to specify a partitioning mirroring
the original source files or <code>balanced</code> to specify partitioning
into equally sized chunks (whenever possible). Specifying <code>none</code>
@@ -1589,7 +1592,7 @@ use it.
and GCC was configured for use with
a linker supporting plugins (GNU ld 2.21 or newer or gold).
- <br><dt><code>-ffat-lto-objects</code><dd><a name="index-ffat_002dlto_002dobjects-861"></a>Fat LTO objects are object files that contain both the intermediate language
+ <br><dt><code>-ffat-lto-objects</code><dd><a name="index-ffat_002dlto_002dobjects-863"></a>Fat LTO objects are object files that contain both the intermediate language
and the object code. This makes them usable for both LTO linking and normal
linking. This option is effective only when compiling with <samp><span class="option">-flto</span></samp>
and is ignored at link time.
@@ -1604,7 +1607,7 @@ need to support linker plugins to allow a full-featured build environment
change in future releases when linker plugin enabled environments become more
common.
- <br><dt><code>-fcompare-elim</code><dd><a name="index-fcompare_002delim-862"></a>After register allocation and post-register allocation instruction splitting,
+ <br><dt><code>-fcompare-elim</code><dd><a name="index-fcompare_002delim-864"></a>After register allocation and post-register allocation instruction splitting,
identify arithmetic instructions that compute processor flags similar to a
comparison operation based on that arithmetic. If possible, eliminate the
explicit comparison operation.
@@ -1614,18 +1617,18 @@ the comparison operation before register allocation is complete.
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fcprop-registers</code><dd><a name="index-fcprop_002dregisters-863"></a>After register allocation and post-register allocation instruction splitting,
+ <br><dt><code>-fcprop-registers</code><dd><a name="index-fcprop_002dregisters-865"></a>After register allocation and post-register allocation instruction splitting,
we perform a copy-propagation pass to try to reduce scheduling dependencies
and occasionally eliminate the copy.
<p>Enabled at levels <samp><span class="option">-O</span></samp>, <samp><span class="option">-O2</span></samp>, <samp><span class="option">-O3</span></samp>, <samp><span class="option">-Os</span></samp>.
- <br><dt><code>-fprofile-correction</code><dd><a name="index-fprofile_002dcorrection-864"></a>Profiles collected using an instrumented binary for multi-threaded programs may
+ <br><dt><code>-fprofile-correction</code><dd><a name="index-fprofile_002dcorrection-866"></a>Profiles collected using an instrumented binary for multi-threaded programs may
be inconsistent due to missed counter updates. When this option is specified,
GCC will use heuristics to correct or smooth out such inconsistencies. By
default, GCC will emit an error message when an inconsistent profile is detected.
- <br><dt><code>-fprofile-dir=</code><var>path</var><dd><a name="index-fprofile_002ddir-865"></a>
+ <br><dt><code>-fprofile-dir=</code><var>path</var><dd><a name="index-fprofile_002ddir-867"></a>
Set the directory to search for the profile data files in to <var>path</var>.
This option affects only the profile data generated by
<samp><span class="option">-fprofile-generate</span></samp>, <samp><span class="option">-ftest-coverage</span></samp>, <samp><span class="option">-fprofile-arcs</span></samp>
@@ -1634,7 +1637,7 @@ and its related options. Both absolute and relative paths can be used.
By default, GCC will use the current directory as <var>path</var>, thus the
profile data file will appear in the same directory as the object file.
- <br><dt><code>-fprofile-generate</code><dt><code>-fprofile-generate=</code><var>path</var><dd><a name="index-fprofile_002dgenerate-866"></a>
+ <br><dt><code>-fprofile-generate</code><dt><code>-fprofile-generate=</code><var>path</var><dd><a name="index-fprofile_002dgenerate-868"></a>
Enable options usually used for instrumenting application to produce
profile useful for later recompilation with profile feedback based
optimization. You must use <samp><span class="option">-fprofile-generate</span></samp> both when
@@ -1645,7 +1648,7 @@ compiling and when linking your program.
<p>If <var>path</var> is specified, GCC will look at the <var>path</var> to find
the profile feedback data files. See <samp><span class="option">-fprofile-dir</span></samp>.
- <br><dt><code>-fprofile-use</code><dt><code>-fprofile-use=</code><var>path</var><dd><a name="index-fprofile_002duse-867"></a>Enable profile feedback directed optimizations, and optimizations
+ <br><dt><code>-fprofile-use</code><dt><code>-fprofile-use=</code><var>path</var><dd><a name="index-fprofile_002duse-869"></a>Enable profile feedback directed optimizations, and optimizations
generally profitable only with profile feedback available.
<p>The following options are enabled: <code>-fbranch-probabilities</code>, <code>-fvpt</code>,
@@ -1665,11 +1668,11 @@ arithmetic. These options trade off between speed and
correctness. All must be specifically enabled.
<dl>
-<dt><code>-ffloat-store</code><dd><a name="index-ffloat_002dstore-868"></a>Do not store floating-point variables in registers, and inhibit other
+<dt><code>-ffloat-store</code><dd><a name="index-ffloat_002dstore-870"></a>Do not store floating-point variables in registers, and inhibit other
options that might change whether a floating-point value is taken from a
register or memory.
- <p><a name="index-floating_002dpoint-precision-869"></a>This option prevents undesirable excess precision on machines such as
+ <p><a name="index-floating_002dpoint-precision-871"></a>This option prevents undesirable excess precision on machines such as
the 68000 where the floating registers (of the 68881) keep more
precision than a <code>double</code> is supposed to have. Similarly for the
x86 architecture. For most programs, the excess precision does only
@@ -1677,7 +1680,7 @@ good, but a few programs rely on the precise definition of IEEE floating
point. Use <samp><span class="option">-ffloat-store</span></samp> for such programs, after modifying
them to store all pertinent intermediate computations into variables.
- <br><dt><code>-fexcess-precision=</code><var>style</var><dd><a name="index-fexcess_002dprecision-870"></a>This option allows further control over excess precision on machines
+ <br><dt><code>-fexcess-precision=</code><var>style</var><dd><a name="index-fexcess_002dprecision-872"></a>This option allows further control over excess precision on machines
where floating-point registers have more precision than the IEEE
<code>float</code> and <code>double</code> types and the processor does not
support operations rounding to those types. By default,
@@ -1692,7 +1695,7 @@ semantic types (whereas <samp><span class="option">-ffloat-store</span></samp> o
assignments). This option is enabled by default for C if a strict
conformance option such as <samp><span class="option">-std=c99</span></samp> is used.
- <p><a name="index-mfpmath-871"></a><samp><span class="option">-fexcess-precision=standard</span></samp> is not implemented for languages
+ <p><a name="index-mfpmath-873"></a><samp><span class="option">-fexcess-precision=standard</span></samp> is not implemented for languages
other than C, and has no effect if
<samp><span class="option">-funsafe-math-optimizations</span></samp> or <samp><span class="option">-ffast-math</span></samp> is
specified. On the x86, it also has no effect if <samp><span class="option">-mfpmath=sse</span></samp>
@@ -1700,7 +1703,7 @@ or <samp><span class="option">-mfpmath=sse+387</span></samp> is specified; in th
semantics apply without excess precision, and in the latter, rounding
is unpredictable.
- <br><dt><code>-ffast-math</code><dd><a name="index-ffast_002dmath-872"></a>Sets <samp><span class="option">-fno-math-errno</span></samp>, <samp><span class="option">-funsafe-math-optimizations</span></samp>,
+ <br><dt><code>-ffast-math</code><dd><a name="index-ffast_002dmath-874"></a>Sets <samp><span class="option">-fno-math-errno</span></samp>, <samp><span class="option">-funsafe-math-optimizations</span></samp>,
<samp><span class="option">-ffinite-math-only</span></samp>, <samp><span class="option">-fno-rounding-math</span></samp>,
<samp><span class="option">-fno-signaling-nans</span></samp> and <samp><span class="option">-fcx-limited-range</span></samp>.
@@ -1712,7 +1715,7 @@ that depend on an exact implementation of IEEE or ISO rules/specifications
for math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.
- <br><dt><code>-fno-math-errno</code><dd><a name="index-fno_002dmath_002derrno-873"></a>Do not set ERRNO after calling math functions that are executed
+ <br><dt><code>-fno-math-errno</code><dd><a name="index-fno_002dmath_002derrno-875"></a>Do not set ERRNO after calling math functions that are executed
with a single instruction, e.g., sqrt. A program that relies on
IEEE exceptions for math error handling may want to use this flag
for speed while maintaining IEEE arithmetic compatibility.
@@ -1729,7 +1732,7 @@ that do not require the guarantees of these specifications.
therefore no reason for the compiler to consider the possibility that
it might, and <samp><span class="option">-fno-math-errno</span></samp> is the default.
- <br><dt><code>-funsafe-math-optimizations</code><dd><a name="index-funsafe_002dmath_002doptimizations-874"></a>
+ <br><dt><code>-funsafe-math-optimizations</code><dd><a name="index-funsafe_002dmath_002doptimizations-876"></a>
Allow optimizations for floating-point arithmetic that (a) assume
that arguments and results are valid and (b) may violate IEEE or
ANSI standards. When used at link-time, it may include libraries
@@ -1746,7 +1749,7 @@ Enables <samp><span class="option">-fno-signed-zeros</span></samp>, <samp><span
<p>The default is <samp><span class="option">-fno-unsafe-math-optimizations</span></samp>.
- <br><dt><code>-fassociative-math</code><dd><a name="index-fassociative_002dmath-875"></a>
+ <br><dt><code>-fassociative-math</code><dd><a name="index-fassociative_002dmath-877"></a>
Allow re-association of operands in series of floating-point operations.
This violates the ISO C and C++ language standard by possibly changing
computation result. NOTE: re-ordering may change the sign of zero as
@@ -1762,7 +1765,7 @@ is automatically enabled when both <samp><span class="option">-fno-signed-zeros<
<p>The default is <samp><span class="option">-fno-associative-math</span></samp>.
- <br><dt><code>-freciprocal-math</code><dd><a name="index-freciprocal_002dmath-876"></a>
+ <br><dt><code>-freciprocal-math</code><dd><a name="index-freciprocal_002dmath-878"></a>
Allow the reciprocal of a value to be used instead of dividing by
the value if this enables optimizations. For example <code>x / y</code>
can be replaced with <code>x * (1/y)</code>, which is useful if <code>(1/y)</code>
@@ -1771,7 +1774,7 @@ precision and increases the number of flops operating on the value.
<p>The default is <samp><span class="option">-fno-reciprocal-math</span></samp>.
- <br><dt><code>-ffinite-math-only</code><dd><a name="index-ffinite_002dmath_002donly-877"></a>Allow optimizations for floating-point arithmetic that assume
+ <br><dt><code>-ffinite-math-only</code><dd><a name="index-ffinite_002dmath_002donly-879"></a>Allow optimizations for floating-point arithmetic that assume
that arguments and results are not NaNs or +-Infs.
<p>This option is not turned on by any <samp><span class="option">-O</span></samp> option since
@@ -1782,7 +1785,7 @@ that do not require the guarantees of these specifications.
<p>The default is <samp><span class="option">-fno-finite-math-only</span></samp>.
- <br><dt><code>-fno-signed-zeros</code><dd><a name="index-fno_002dsigned_002dzeros-878"></a>Allow optimizations for floating-point arithmetic that ignore the
+ <br><dt><code>-fno-signed-zeros</code><dd><a name="index-fno_002dsigned_002dzeros-880"></a>Allow optimizations for floating-point arithmetic that ignore the
signedness of zero. IEEE arithmetic specifies the behavior of
distinct +0.0 and &minus;0.0 values, which then prohibits simplification
of expressions such as x+0.0 or 0.0*x (even with <samp><span class="option">-ffinite-math-only</span></samp>).
@@ -1790,7 +1793,7 @@ This option implies that the sign of a zero result isn't significant.
<p>The default is <samp><span class="option">-fsigned-zeros</span></samp>.
- <br><dt><code>-fno-trapping-math</code><dd><a name="index-fno_002dtrapping_002dmath-879"></a>Compile code assuming that floating-point operations cannot generate
+ <br><dt><code>-fno-trapping-math</code><dd><a name="index-fno_002dtrapping_002dmath-881"></a>Compile code assuming that floating-point operations cannot generate
user-visible traps. These traps include division by zero, overflow,
underflow, inexact result and invalid operation. This option requires
that <samp><span class="option">-fno-signaling-nans</span></samp> be in effect. Setting this option may
@@ -1803,7 +1806,7 @@ math functions.
<p>The default is <samp><span class="option">-ftrapping-math</span></samp>.
- <br><dt><code>-frounding-math</code><dd><a name="index-frounding_002dmath-880"></a>Disable transformations and optimizations that assume default floating-point
+ <br><dt><code>-frounding-math</code><dd><a name="index-frounding_002dmath-882"></a>Disable transformations and optimizations that assume default floating-point
rounding behavior. This is round-to-zero for all floating point
to integer conversions, and round-to-nearest for all other arithmetic
truncations. This option should be specified for programs that change
@@ -1821,7 +1824,7 @@ Future versions of GCC may provide finer control of this setting
using C99's <code>FENV_ACCESS</code> pragma. This command-line option
will be used to specify the default state for <code>FENV_ACCESS</code>.
- <br><dt><code>-fsignaling-nans</code><dd><a name="index-fsignaling_002dnans-881"></a>Compile code assuming that IEEE signaling NaNs may generate user-visible
+ <br><dt><code>-fsignaling-nans</code><dd><a name="index-fsignaling_002dnans-883"></a>Compile code assuming that IEEE signaling NaNs may generate user-visible
traps during floating-point operations. Setting this option disables
optimizations that may change the number of exceptions visible with
signaling NaNs. This option implies <samp><span class="option">-ftrapping-math</span></samp>.
@@ -1834,10 +1837,10 @@ be defined.
<p>This option is experimental and does not currently guarantee to
disable all GCC optimizations that affect signaling NaN behavior.
- <br><dt><code>-fsingle-precision-constant</code><dd><a name="index-fsingle_002dprecision_002dconstant-882"></a>Treat floating-point constants as single precision instead of
+ <br><dt><code>-fsingle-precision-constant</code><dd><a name="index-fsingle_002dprecision_002dconstant-884"></a>Treat floating-point constants as single precision instead of
implicitly converting them to double-precision constants.
- <br><dt><code>-fcx-limited-range</code><dd><a name="index-fcx_002dlimited_002drange-883"></a>When enabled, this option states that a range reduction step is not
+ <br><dt><code>-fcx-limited-range</code><dd><a name="index-fcx_002dlimited_002drange-885"></a>When enabled, this option states that a range reduction step is not
needed when performing complex division. Also, there is no checking
whether the result of a complex multiplication or division is <code>NaN
+ I*NaN</code>, with an attempt to rescue the situation in that case. The
@@ -1848,7 +1851,7 @@ default is <samp><span class="option">-fno-cx-limited-range</span></samp>, but i
<code>CX_LIMITED_RANGE</code> pragma. Nevertheless, the option applies to
all languages.
- <br><dt><code>-fcx-fortran-rules</code><dd><a name="index-fcx_002dfortran_002drules-884"></a>Complex multiplication and division follow Fortran rules. Range
+ <br><dt><code>-fcx-fortran-rules</code><dd><a name="index-fcx_002dfortran_002drules-886"></a>Complex multiplication and division follow Fortran rules. Range
reduction is done as part of complex division, but there is no checking
whether the result of a complex multiplication or division is <code>NaN
+ I*NaN</code>, with an attempt to rescue the situation in that case.
@@ -1862,7 +1865,7 @@ performance, but are not enabled by any <samp><span class="option">-O</span></sa
section includes experimental options that may produce broken code.
<dl>
-<dt><code>-fbranch-probabilities</code><dd><a name="index-fbranch_002dprobabilities-885"></a>After running a program compiled with <samp><span class="option">-fprofile-arcs</span></samp>
+<dt><code>-fbranch-probabilities</code><dd><a name="index-fbranch_002dprobabilities-887"></a>After running a program compiled with <samp><span class="option">-fprofile-arcs</span></samp>
(see <a href="Debugging-Options.html#Debugging-Options">Options for Debugging Your Program or <samp><span class="command">gcc</span></samp></a>), you can compile it a second time using
<samp><span class="option">-fbranch-probabilities</span></samp>, to improve optimizations based on
the number of times each branch was taken. When the program
@@ -1879,7 +1882,7 @@ used in one place: in <samp><span class="file">reorg.c</span></samp>, instead of
branch is most likely to take, the &lsquo;<samp><span class="samp">REG_BR_PROB</span></samp>&rsquo; values are used to
exactly determine which path is taken more often.
- <br><dt><code>-fprofile-values</code><dd><a name="index-fprofile_002dvalues-886"></a>If combined with <samp><span class="option">-fprofile-arcs</span></samp>, it adds code so that some
+ <br><dt><code>-fprofile-values</code><dd><a name="index-fprofile_002dvalues-888"></a>If combined with <samp><span class="option">-fprofile-arcs</span></samp>, it adds code so that some
data about values of expressions in the program is gathered.
<p>With <samp><span class="option">-fbranch-probabilities</span></samp>, it reads back the data gathered
@@ -1887,7 +1890,7 @@ from profiling values of expressions for usage in optimizations.
<p>Enabled with <samp><span class="option">-fprofile-generate</span></samp> and <samp><span class="option">-fprofile-use</span></samp>.
- <br><dt><code>-fvpt</code><dd><a name="index-fvpt-887"></a>If combined with <samp><span class="option">-fprofile-arcs</span></samp>, it instructs the compiler to add
+ <br><dt><code>-fvpt</code><dd><a name="index-fvpt-889"></a>If combined with <samp><span class="option">-fprofile-arcs</span></samp>, it instructs the compiler to add
a code to gather information about values of expressions.
<p>With <samp><span class="option">-fbranch-probabilities</span></samp>, it reads back the data gathered
@@ -1895,7 +1898,7 @@ and actually performs the optimizations based on them.
Currently the optimizations include specialization of division operation
using the knowledge about the value of the denominator.
- <br><dt><code>-frename-registers</code><dd><a name="index-frename_002dregisters-888"></a>Attempt to avoid false dependencies in scheduled code by making use
+ <br><dt><code>-frename-registers</code><dd><a name="index-frename_002dregisters-890"></a>Attempt to avoid false dependencies in scheduled code by making use
of registers left over after register allocation. This optimization
will most benefit processors with lots of registers. Depending on the
debug information format adopted by the target, however, it can
@@ -1904,13 +1907,13 @@ a &ldquo;home register&rdquo;.
<p>Enabled by default with <samp><span class="option">-funroll-loops</span></samp> and <samp><span class="option">-fpeel-loops</span></samp>.
- <br><dt><code>-ftracer</code><dd><a name="index-ftracer-889"></a>Perform tail duplication to enlarge superblock size. This transformation
+ <br><dt><code>-ftracer</code><dd><a name="index-ftracer-891"></a>Perform tail duplication to enlarge superblock size. This transformation
simplifies the control flow of the function allowing other optimizations to do
better job.
<p>Enabled with <samp><span class="option">-fprofile-use</span></samp>.
- <br><dt><code>-funroll-loops</code><dd><a name="index-funroll_002dloops-890"></a>Unroll loops whose number of iterations can be determined at compile time or
+ <br><dt><code>-funroll-loops</code><dd><a name="index-funroll_002dloops-892"></a>Unroll loops whose number of iterations can be determined at compile time or
upon entry to the loop. <samp><span class="option">-funroll-loops</span></samp> implies
<samp><span class="option">-frerun-cse-after-loop</span></samp>, <samp><span class="option">-fweb</span></samp> and <samp><span class="option">-frename-registers</span></samp>.
It also turns on complete loop peeling (i.e. complete removal of loops with
@@ -1919,24 +1922,24 @@ or may not make it run faster.
<p>Enabled with <samp><span class="option">-fprofile-use</span></samp>.
- <br><dt><code>-funroll-all-loops</code><dd><a name="index-funroll_002dall_002dloops-891"></a>Unroll all loops, even if their number of iterations is uncertain when
+ <br><dt><code>-funroll-all-loops</code><dd><a name="index-funroll_002dall_002dloops-893"></a>Unroll all loops, even if their number of iterations is uncertain when
the loop is entered. This usually makes programs run more slowly.
<samp><span class="option">-funroll-all-loops</span></samp> implies the same options as
<samp><span class="option">-funroll-loops</span></samp>.
- <br><dt><code>-fpeel-loops</code><dd><a name="index-fpeel_002dloops-892"></a>Peels loops for which there is enough information that they do not
+ <br><dt><code>-fpeel-loops</code><dd><a name="index-fpeel_002dloops-894"></a>Peels loops for which there is enough information that they do not
roll much (from profile feedback). It also turns on complete loop peeling
(i.e. complete removal of loops with small constant number of iterations).
<p>Enabled with <samp><span class="option">-fprofile-use</span></samp>.
- <br><dt><code>-fmove-loop-invariants</code><dd><a name="index-fmove_002dloop_002dinvariants-893"></a>Enables the loop invariant motion pass in the RTL loop optimizer. Enabled
+ <br><dt><code>-fmove-loop-invariants</code><dd><a name="index-fmove_002dloop_002dinvariants-895"></a>Enables the loop invariant motion pass in the RTL loop optimizer. Enabled
at level <samp><span class="option">-O1</span></samp>
- <br><dt><code>-funswitch-loops</code><dd><a name="index-funswitch_002dloops-894"></a>Move branches with loop invariant conditions out of the loop, with duplicates
+ <br><dt><code>-funswitch-loops</code><dd><a name="index-funswitch_002dloops-896"></a>Move branches with loop invariant conditions out of the loop, with duplicates
of the loop on both branches (modified according to result of the condition).
- <br><dt><code>-ffunction-sections</code><dt><code>-fdata-sections</code><dd><a name="index-ffunction_002dsections-895"></a><a name="index-fdata_002dsections-896"></a>Place each function or data item into its own section in the output
+ <br><dt><code>-ffunction-sections</code><dt><code>-fdata-sections</code><dd><a name="index-ffunction_002dsections-897"></a><a name="index-fdata_002dsections-898"></a>Place each function or data item into its own section in the output
file if the target supports arbitrary sections. The name of the
function or the name of the data item determines the section's name
in the output file.
@@ -1954,28 +1957,28 @@ You will not be able to use <code>gprof</code> on all systems if you
specify this option and you may have problems with debugging if
you specify both this option and <samp><span class="option">-g</span></samp>.
- <br><dt><code>-fbranch-target-load-optimize</code><dd><a name="index-fbranch_002dtarget_002dload_002doptimize-897"></a>Perform branch target register load optimization before prologue / epilogue
+ <br><dt><code>-fbranch-target-load-optimize</code><dd><a name="index-fbranch_002dtarget_002dload_002doptimize-899"></a>Perform branch target register load optimization before prologue / epilogue
threading.
The use of target registers can typically be exposed only during reload,
thus hoisting loads out of loops and doing inter-block scheduling needs
a separate optimization pass.
- <br><dt><code>-fbranch-target-load-optimize2</code><dd><a name="index-fbranch_002dtarget_002dload_002doptimize2-898"></a>Perform branch target register load optimization after prologue / epilogue
+ <br><dt><code>-fbranch-target-load-optimize2</code><dd><a name="index-fbranch_002dtarget_002dload_002doptimize2-900"></a>Perform branch target register load optimization after prologue / epilogue
threading.
- <br><dt><code>-fbtr-bb-exclusive</code><dd><a name="index-fbtr_002dbb_002dexclusive-899"></a>When performing branch target register load optimization, don't reuse
+ <br><dt><code>-fbtr-bb-exclusive</code><dd><a name="index-fbtr_002dbb_002dexclusive-901"></a>When performing branch target register load optimization, don't reuse
branch target registers in within any basic block.
- <br><dt><code>-fstack-protector</code><dd><a name="index-fstack_002dprotector-900"></a>Emit extra code to check for buffer overflows, such as stack smashing
+ <br><dt><code>-fstack-protector</code><dd><a name="index-fstack_002dprotector-902"></a>Emit extra code to check for buffer overflows, such as stack smashing
attacks. This is done by adding a guard variable to functions with
vulnerable objects. This includes functions that call alloca, and
functions with buffers larger than 8 bytes. The guards are initialized
when a function is entered and then checked when the function exits.
If a guard check fails, an error message is printed and the program exits.
- <br><dt><code>-fstack-protector-all</code><dd><a name="index-fstack_002dprotector_002dall-901"></a>Like <samp><span class="option">-fstack-protector</span></samp> except that all functions are protected.
+ <br><dt><code>-fstack-protector-all</code><dd><a name="index-fstack_002dprotector_002dall-903"></a>Like <samp><span class="option">-fstack-protector</span></samp> except that all functions are protected.
- <br><dt><code>-fsection-anchors</code><dd><a name="index-fsection_002danchors-902"></a>Try to reduce the number of symbolic address calculations by using
+ <br><dt><code>-fsection-anchors</code><dd><a name="index-fsection_002danchors-904"></a>Try to reduce the number of symbolic address calculations by using
shared &ldquo;anchor&rdquo; symbols to address nearby objects. This transformation
can help to reduce the number of GOT entries and GOT accesses on some
targets.
@@ -1998,7 +2001,7 @@ following pseudocode (which isn't valid C):
</pre>
<p>Not all targets support this option.
- <br><dt><code>--param </code><var>name</var><code>=</code><var>value</var><dd><a name="index-param-903"></a>In some places, GCC uses various constants to control the amount of
+ <br><dt><code>--param </code><var>name</var><code>=</code><var>value</var><dd><a name="index-param-905"></a>In some places, GCC uses various constants to control the amount of
optimization that is done. For example, GCC will not inline functions
that contain more than a certain number of instructions. You can
control some of these constants on the command line using the