]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/doc/gcc.info-4
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / doc / gcc.info-4
diff --git a/gcc/doc/gcc.info-4 b/gcc/doc/gcc.info-4
deleted file mode 100644 (file)
index aca9293..0000000
+++ /dev/null
@@ -1,1209 +0,0 @@
-This is doc/gcc.info, produced by makeinfo version 4.5 from
-doc/gcc.texi.
-
-INFO-DIR-SECTION Programming
-START-INFO-DIR-ENTRY
-* gcc: (gcc).                  The GNU Compiler Collection.
-END-INFO-DIR-ENTRY
-   This file documents the use of the GNU compilers.
-
-   Published by the Free Software Foundation
-59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
-   Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-
-   Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "GNU General Public License" and "Funding Free
-Software", the Front-Cover texts being (a) (see below), and with the
-Back-Cover Texts being (b) (see below).  A copy of the license is
-included in the section entitled "GNU Free Documentation License".
-
-   (a) The FSF's Front-Cover Text is:
-
-   A GNU Manual
-
-   (b) The FSF's Back-Cover Text is:
-
-   You have freedom to copy and modify this GNU Manual, like GNU
-software.  Copies published by the Free Software Foundation raise
-funds for GNU development.
-
-\1f
-File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
-
-Options for Debugging Your Program or GCC
-=========================================
-
-   GCC has various special options that are used for debugging either
-your program or GCC:
-
-`-g'
-     Produce debugging information in the operating system's native
-     format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
-     debugging information.
-
-     On most systems that use stabs format, `-g' enables use of extra
-     debugging information that only GDB can use; this extra information
-     makes debugging work better in GDB but will probably make other
-     debuggers crash or refuse to read the program.  If you want to
-     control for certain whether to generate the extra information, use
-     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf-1+',
-     `-gdwarf-1', or `-gvms' (see below).
-
-     Unlike most other C compilers, GCC allows you to use `-g' with
-     `-O'.  The shortcuts taken by optimized code may occasionally
-     produce surprising results: some variables you declared may not
-     exist at all; flow of control may briefly move where you did not
-     expect it; some statements may not be executed because they
-     compute constant results or their values were already at hand;
-     some statements may execute in different places because they were
-     moved out of loops.
-
-     Nevertheless it proves possible to debug optimized output.  This
-     makes it reasonable to use the optimizer for programs that might
-     have bugs.
-
-     The following options are useful when GCC is generated with the
-     capability for more than one debugging format.
-
-`-ggdb'
-     Produce debugging information for use by GDB.  This means to use
-     the most expressive format available (DWARF 2, stabs, or the
-     native format if neither of those are supported), including GDB
-     extensions if at all possible.
-
-`-gstabs'
-     Produce debugging information in stabs format (if that is
-     supported), without GDB extensions.  This is the format used by
-     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
-     systems this option produces stabs debugging output which is not
-     understood by DBX or SDB.  On System V Release 4 systems this
-     option requires the GNU assembler.
-
-`-gstabs+'
-     Produce debugging information in stabs format (if that is
-     supported), using GNU extensions understood only by the GNU
-     debugger (GDB).  The use of these extensions is likely to make
-     other debuggers crash or refuse to read the program.
-
-`-gcoff'
-     Produce debugging information in COFF format (if that is
-     supported).  This is the format used by SDB on most System V
-     systems prior to System V Release 4.
-
-`-gxcoff'
-     Produce debugging information in XCOFF format (if that is
-     supported).  This is the format used by the DBX debugger on IBM
-     RS/6000 systems.
-
-`-gxcoff+'
-     Produce debugging information in XCOFF format (if that is
-     supported), using GNU extensions understood only by the GNU
-     debugger (GDB).  The use of these extensions is likely to make
-     other debuggers crash or refuse to read the program, and may cause
-     assemblers other than the GNU assembler (GAS) to fail with an
-     error.
-
-`-gdwarf'
-     Produce debugging information in DWARF version 1 format (if that is
-     supported).  This is the format used by SDB on most System V
-     Release 4 systems.
-
-`-gdwarf+'
-     Produce debugging information in DWARF version 1 format (if that is
-     supported), using GNU extensions understood only by the GNU
-     debugger (GDB).  The use of these extensions is likely to make
-     other debuggers crash or refuse to read the program.
-
-`-gdwarf-2'
-     Produce debugging information in DWARF version 2 format (if that is
-     supported).  This is the format used by DBX on IRIX 6.
-
-`-gvms'
-     Produce debugging information in VMS debug format (if that is
-     supported).  This is the format used by DEBUG on VMS systems.
-
-`-gLEVEL'
-`-ggdbLEVEL'
-`-gstabsLEVEL'
-`-gcoffLEVEL'
-`-gxcoffLEVEL'
-`-gvmsLEVEL'
-     Request debugging information and also use LEVEL to specify how
-     much information.  The default level is 2.
-
-     Level 1 produces minimal information, enough for making backtraces
-     in parts of the program that you don't plan to debug.  This
-     includes descriptions of functions and external variables, but no
-     information about local variables and no line numbers.
-
-     Level 3 includes extra information, such as all the macro
-     definitions present in the program.  Some debuggers support macro
-     expansion when you use `-g3'.
-
-     Note that in order to avoid confusion between DWARF1 debug level 2,
-     and DWARF2, neither `-gdwarf' nor `-gdwarf-2' accept a
-     concatenated debug level.  Instead use an additional `-gLEVEL'
-     option to change the debug level for DWARF1 or DWARF2.
-
-`-p'
-     Generate extra code to write profile information suitable for the
-     analysis program `prof'.  You must use this option when compiling
-     the source files you want data about, and you must also use it when
-     linking.
-
-`-pg'
-     Generate extra code to write profile information suitable for the
-     analysis program `gprof'.  You must use this option when compiling
-     the source files you want data about, and you must also use it when
-     linking.
-
-`-Q'
-     Makes the compiler print out each function name as it is compiled,
-     and print some statistics about each pass when it finishes.
-
-`-ftime-report'
-     Makes the compiler print some statistics about the time consumed
-     by each pass when it finishes.
-
-`-fmem-report'
-     Makes the compiler print some statistics about permanent memory
-     allocation when it finishes.
-
-`-fprofile-arcs'
-     Instrument "arcs" during compilation to generate coverage data or
-     for profile-directed block ordering.  During execution the program
-     records how many times each branch is executed and how many times
-     it is taken.  When the compiled program exits it saves this data
-     to a file called `SOURCENAME.da' for each source file.
-
-     For profile-directed block ordering, compile the program with
-     `-fprofile-arcs' plus optimization and code generation options,
-     generate the arc profile information by running the program on a
-     selected workload, and then compile the program again with the same
-     optimization and code generation options plus
-     `-fbranch-probabilities' (*note Options that Control Optimization:
-     Optimize Options.).
-
-     The other use of `-fprofile-arcs' is for use with `gcov', when it
-     is used with the `-ftest-coverage' option.
-
-     With `-fprofile-arcs', for each function of your program GCC
-     creates a program flow graph, then finds a spanning tree for the
-     graph.  Only arcs that are not on the spanning tree have to be
-     instrumented: the compiler adds code to count the number of times
-     that these arcs are executed.  When an arc is the only exit or
-     only entrance to a block, the instrumentation code can be added to
-     the block; otherwise, a new basic block must be created to hold
-     the instrumentation code.
-
-`-ftest-coverage'
-     Create data files for the `gcov' code-coverage utility (*note
-     `gcov'--a Test Coverage Program: Gcov.).  The data file names
-     begin with the name of your source file:
-
-    `SOURCENAME.bb'
-          A mapping from basic blocks to line numbers, which `gcov'
-          uses to associate basic block execution counts with line
-          numbers.
-
-    `SOURCENAME.bbg'
-          A list of all arcs in the program flow graph.  This allows
-          `gcov' to reconstruct the program flow graph, so that it can
-          compute all basic block and arc execution counts from the
-          information in the `SOURCENAME.da' file.
-
-     Use `-ftest-coverage' with `-fprofile-arcs'; the latter option
-     adds instrumentation to the program, which then writes execution
-     counts to another data file:
-
-    `SOURCENAME.da'
-          Runtime arc execution counts, used in conjunction with the arc
-          information in the file `SOURCENAME.bbg'.
-
-     Coverage data will map better to the source files if
-     `-ftest-coverage' is used without optimization.
-
-`-dLETTERS'
-     Says to make debugging dumps during compilation at times specified
-     by LETTERS.  This is used for debugging the compiler.  The file
-     names for most of the dumps are made by appending a pass number
-     and a word to the source file name (e.g.  `foo.c.00.rtl' or
-     `foo.c.01.sibling').  Here are the possible letters for use in
-     LETTERS, and their meanings:
-
-    `A'
-          Annotate the assembler output with miscellaneous debugging
-          information.
-
-    `b'
-          Dump after computing branch probabilities, to `FILE.14.bp'.
-
-    `B'
-          Dump after block reordering, to `FILE.29.bbro'.
-
-    `c'
-          Dump after instruction combination, to the file
-          `FILE.16.combine'.
-
-    `C'
-          Dump after the first if conversion, to the file `FILE.17.ce'.
-
-    `d'
-          Dump after delayed branch scheduling, to `FILE.31.dbr'.
-
-    `D'
-          Dump all macro definitions, at the end of preprocessing, in
-          addition to normal output.
-
-    `e'
-          Dump after SSA optimizations, to `FILE.04.ssa' and
-          `FILE.07.ussa'.
-
-    `E'
-          Dump after the second if conversion, to `FILE.26.ce2'.
-
-    `f'
-          Dump after life analysis, to `FILE.15.life'.
-
-    `F'
-          Dump after purging `ADDRESSOF' codes, to `FILE.09.addressof'.
-
-    `g'
-          Dump after global register allocation, to `FILE.21.greg'.
-
-    `h'
-          Dump after finalization of EH handling code, to `FILE.02.eh'.
-
-    `k'
-          Dump after reg-to-stack conversion, to `FILE.28.stack'.
-
-    `o'
-          Dump after post-reload optimizations, to `FILE.22.postreload'.
-
-    `G'
-          Dump after GCSE, to `FILE.10.gcse'.
-
-    `i'
-          Dump after sibling call optimizations, to `FILE.01.sibling'.
-
-    `j'
-          Dump after the first jump optimization, to `FILE.03.jump'.
-
-    `k'
-          Dump after conversion from registers to stack, to
-          `FILE.32.stack'.
-
-    `l'
-          Dump after local register allocation, to `FILE.20.lreg'.
-
-    `L'
-          Dump after loop optimization, to `FILE.11.loop'.
-
-    `M'
-          Dump after performing the machine dependent reorganisation
-          pass, to `FILE.30.mach'.
-
-    `n'
-          Dump after register renumbering, to `FILE.25.rnreg'.
-
-    `N'
-          Dump after the register move pass, to `FILE.18.regmove'.
-
-    `r'
-          Dump after RTL generation, to `FILE.00.rtl'.
-
-    `R'
-          Dump after the second scheduling pass, to `FILE.27.sched2'.
-
-    `s'
-          Dump after CSE (including the jump optimization that
-          sometimes follows CSE), to `FILE.08.cse'.
-
-    `S'
-          Dump after the first scheduling pass, to `FILE.19.sched'.
-
-    `t'
-          Dump after the second CSE pass (including the jump
-          optimization that sometimes follows CSE), to `FILE.12.cse2'.
-
-    `w'
-          Dump after the second flow pass, to `FILE.23.flow2'.
-
-    `X'
-          Dump after SSA dead code elimination, to `FILE.06.ssadce'.
-
-    `z'
-          Dump after the peephole pass, to `FILE.24.peephole2'.
-
-    `a'
-          Produce all the dumps listed above.
-
-    `m'
-          Print statistics on memory usage, at the end of the run, to
-          standard error.
-
-    `p'
-          Annotate the assembler output with a comment indicating which
-          pattern and alternative was used.  The length of each
-          instruction is also printed.
-
-    `P'
-          Dump the RTL in the assembler output as a comment before each
-          instruction.  Also turns on `-dp' annotation.
-
-    `v'
-          For each of the other indicated dump files (except for
-          `FILE.00.rtl'), dump a representation of the control flow
-          graph suitable for viewing with VCG to `FILE.PASS.vcg'.
-
-    `x'
-          Just generate RTL for a function instead of compiling it.
-          Usually used with `r'.
-
-    `y'
-          Dump debugging information during parsing, to standard error.
-
-`-fdump-unnumbered'
-     When doing debugging dumps (see `-d' option above), suppress
-     instruction numbers and line number note output.  This makes it
-     more feasible to use diff on debugging dumps for compiler
-     invocations with different options, in particular with and without
-     `-g'.
-
-`-fdump-translation-unit (C and C++ only)'
-`-fdump-translation-unit-OPTIONS (C and C++ only)'
-     Dump a representation of the tree structure for the entire
-     translation unit to a file.  The file name is made by appending
-     `.tu' to the source file name.  If the `-OPTIONS' form is used,
-     OPTIONS controls the details of the dump as described for the
-     `-fdump-tree' options.
-
-`-fdump-class-hierarchy (C++ only)'
-`-fdump-class-hierarchy-OPTIONS (C++ only)'
-     Dump a representation of each class's hierarchy and virtual
-     function table layout to a file.  The file name is made by
-     appending `.class' to the source file name.  If the `-OPTIONS'
-     form is used, OPTIONS controls the details of the dump as
-     described for the `-fdump-tree' options.
-
-`-fdump-tree-SWITCH (C++ only)'
-`-fdump-tree-SWITCH-OPTIONS (C++ only)'
-     Control the dumping at various stages of processing the
-     intermediate language tree to a file.  The file name is generated
-     by appending a switch specific suffix to the source file name.  If
-     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
-     options that control the details of the dump. Not all options are
-     applicable to all dumps, those which are not meaningful will be
-     ignored. The following options are available
-
-    `address'
-          Print the address of each node.  Usually this is not
-          meaningful as it changes according to the environment and
-          source file. Its primary use is for tying up a dump file with
-          a debug environment.
-
-    `slim'
-          Inhibit dumping of members of a scope or body of a function
-          merely because that scope has been reached. Only dump such
-          items when they are directly reachable by some other path.
-
-    `all'
-          Turn on all options.
-
-     The following tree dumps are possible:
-    `original'
-          Dump before any tree based optimization, to `FILE.original'.
-
-    `optimized'
-          Dump after all tree based optimization, to `FILE.optimized'.
-
-    `inlined'
-          Dump after function inlining, to `FILE.inlined'.
-
-`-fsched-verbose=N'
-     On targets that use instruction scheduling, this option controls
-     the amount of debugging output the scheduler prints.  This
-     information is written to standard error, unless `-dS' or `-dR' is
-     specified, in which case it is output to the usual dump listing
-     file, `.sched' or `.sched2' respectively.  However for N greater
-     than nine, the output is always printed to standard error.
-
-     For N greater than zero, `-fsched-verbose' outputs the same
-     information as `-dRS'.  For N greater than one, it also output
-     basic block probabilities, detailed ready list information and
-     unit/insn info.  For N greater than two, it includes RTL at abort
-     point, control-flow and regions info.  And for N over four,
-     `-fsched-verbose' also includes dependence info.
-
-`-fpretend-float'
-     When running a cross-compiler, pretend that the target machine
-     uses the same floating point format as the host machine.  This
-     causes incorrect output of the actual floating constants, but the
-     actual instruction sequence will probably be the same as GCC would
-     make when running on the target machine.
-
-`-save-temps'
-     Store the usual "temporary" intermediate files permanently; place
-     them in the current directory and name them based on the source
-     file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
-     files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
-     preprocessed `foo.i' output file even though the compiler now
-     normally uses an integrated preprocessor.
-
-`-time'
-     Report the CPU time taken by each subprocess in the compilation
-     sequence.  For C source files, this is the compiler proper and
-     assembler (plus the linker if linking is done).  The output looks
-     like this:
-
-          # cc1 0.12 0.01
-          # as 0.00 0.01
-
-     The first number on each line is the "user time," that is time
-     spent executing the program itself.  The second number is "system
-     time," time spent executing operating system routines on behalf of
-     the program.  Both numbers are in seconds.
-
-`-print-file-name=LIBRARY'
-     Print the full absolute name of the library file LIBRARY that
-     would be used when linking--and don't do anything else.  With this
-     option, GCC does not compile or link anything; it just prints the
-     file name.
-
-`-print-multi-directory'
-     Print the directory name corresponding to the multilib selected by
-     any other switches present in the command line.  This directory is
-     supposed to exist in `GCC_EXEC_PREFIX'.
-
-`-print-multi-lib'
-     Print the mapping from multilib directory names to compiler
-     switches that enable them.  The directory name is separated from
-     the switches by `;', and each switch starts with an `@' instead of
-     the `-', without spaces between multiple switches.  This is
-     supposed to ease shell-processing.
-
-`-print-prog-name=PROGRAM'
-     Like `-print-file-name', but searches for a program such as `cpp'.
-
-`-print-libgcc-file-name'
-     Same as `-print-file-name=libgcc.a'.
-
-     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
-     you do want to link with `libgcc.a'.  You can do
-
-          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
-
-`-print-search-dirs'
-     Print the name of the configured installation directory and a list
-     of program and library directories gcc will search--and don't do
-     anything else.
-
-     This is useful when gcc prints the error message `installation
-     problem, cannot exec cpp0: No such file or directory'.  To resolve
-     this you either need to put `cpp0' and the other compiler
-     components where gcc expects to find them, or you can set the
-     environment variable `GCC_EXEC_PREFIX' to the directory where you
-     installed them.  Don't forget the trailing '/'.  *Note Environment
-     Variables::.
-
-`-dumpmachine'
-     Print the compiler's target machine (for example,
-     `i686-pc-linux-gnu')--and don't do anything else.
-
-`-dumpversion'
-     Print the compiler version (for example, `3.0')--and don't do
-     anything else.
-
-`-dumpspecs'
-     Print the compiler's built-in specs--and don't do anything else.
-     (This is used when GCC itself is being built.)  *Note Spec Files::.
-
-\1f
-File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
-
-Options That Control Optimization
-=================================
-
-   These options control various sorts of optimizations:
-
-`-O'
-`-O1'
-     Optimize.  Optimizing compilation takes somewhat more time, and a
-     lot more memory for a large function.
-
-     Without `-O', the compiler's goal is to reduce the cost of
-     compilation and to make debugging produce the expected results.
-     Statements are independent: if you stop the program with a
-     breakpoint between statements, you can then assign a new value to
-     any variable or change the program counter to any other statement
-     in the function and get exactly the results you would expect from
-     the source code.
-
-     With `-O', the compiler tries to reduce code size and execution
-     time, without performing any optimizations that take a great deal
-     of compilation time.
-
-`-O2'
-     Optimize even more.  GCC performs nearly all supported
-     optimizations that do not involve a space-speed tradeoff.  The
-     compiler does not perform loop unrolling or function inlining when
-     you specify `-O2'.  As compared to `-O', this option increases
-     both compilation time and the performance of the generated code.
-
-     `-O2' turns on all optional optimizations except for loop
-     unrolling, function inlining, and register renaming.  It also
-     turns on the `-fforce-mem' option on all machines and frame
-     pointer elimination on machines where doing so does not interfere
-     with debugging.
-
-     Please note the warning under `-fgcse' about invoking `-O2' on
-     programs that use computed gotos.
-
-`-O3'
-     Optimize yet more.  `-O3' turns on all optimizations specified by
-     `-O2' and also turns on the `-finline-functions' and
-     `-frename-registers' options.
-
-`-O0'
-     Do not optimize.
-
-`-Os'
-     Optimize for size.  `-Os' enables all `-O2' optimizations that do
-     not typically increase code size.  It also performs further
-     optimizations designed to reduce code size.
-
-     If you use multiple `-O' options, with or without level numbers,
-     the last such option is the one that is effective.
-
-   Options of the form `-fFLAG' specify machine-independent flags.
-Most flags have both positive and negative forms; the negative form of
-`-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
-is listed--the one which is not the default.  You can figure out the
-other form by either removing `no-' or adding it.
-
-`-ffloat-store'
-     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.
-
-     This option prevents undesirable excess precision on machines such
-     as the 68000 where the floating registers (of the 68881) keep more
-     precision than a `double' is supposed to have.  Similarly for the
-     x86 architecture.  For most programs, the excess precision does
-     only good, but a few programs rely on the precise definition of
-     IEEE floating point.  Use `-ffloat-store' for such programs, after
-     modifying them to store all pertinent intermediate computations
-     into variables.
-
-`-fno-default-inline'
-     Do not make member functions inline by default merely because they
-     are defined inside the class scope (C++ only).  Otherwise, when
-     you specify `-O', member functions defined inside class scope are
-     compiled inline by default; i.e., you don't need to add `inline'
-     in front of the member function name.
-
-`-fno-defer-pop'
-     Always pop the arguments to each function call as soon as that
-     function returns.  For machines which 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.
-
-`-fforce-mem'
-     Force memory operands to be copied into registers before doing
-     arithmetic on them.  This produces better code by making all memory
-     references potential common subexpressions.  When they are not
-     common subexpressions, instruction combination should eliminate
-     the separate register-load.  The `-O2' option turns on this option.
-
-`-fforce-addr'
-     Force memory address constants to be copied into registers before
-     doing arithmetic on them.  This may produce better code just as
-     `-fforce-mem' may.
-
-`-fomit-frame-pointer'
-     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.  *It also makes debugging impossible on some
-     machines.*
-
-     On some machines, such as the VAX, this flag has no effect, because
-     the standard calling sequence automatically handles the frame
-     pointer and nothing is saved by pretending it doesn't exist.  The
-     machine-description macro `FRAME_POINTER_REQUIRED' controls
-     whether a target machine supports this flag.  *Note Register
-     Usage: (gccint)Registers.
-
-`-foptimize-sibling-calls'
-     Optimize sibling and tail recursive calls.
-
-`-ftrapv'
-     This option generates traps for signed overflow on addition,
-     subtraction, multiplication operations.
-
-`-fno-inline'
-     Don't pay attention to the `inline' keyword.  Normally this option
-     is used to keep the compiler from expanding any functions inline.
-     Note that if you are not optimizing, no functions can be expanded
-     inline.
-
-`-finline-functions'
-     Integrate all simple functions into their callers.  The compiler
-     heuristically decides which functions are simple enough to be worth
-     integrating in this way.
-
-     If all calls to a given function are integrated, and the function
-     is declared `static', then the function is normally not output as
-     assembler code in its own right.
-
-`-finline-limit=N'
-     By default, gcc limits the size of functions that can be inlined.
-     This flag allows the control of this limit for functions that are
-     explicitly marked as inline (ie marked with the inline keyword or
-     defined within the class definition in c++).  N is the size of
-     functions that can be inlined in number of pseudo instructions
-     (not counting parameter handling).  The default value of N is 600.
-     Increasing this value can result in more inlined code at the cost
-     of compilation time and memory consumption.  Decreasing usually
-     makes the compilation faster and less code will be inlined (which
-     presumably means slower programs).  This option is particularly
-     useful for programs that use inlining heavily such as those based
-     on recursive templates with C++.
-
-     _Note:_ pseudo instruction represents, in this particular context,
-     an abstract measurement of function's size.  In no way, it
-     represents a count of assembly instructions and as such its exact
-     meaning might change from one release to an another.
-
-`-fkeep-inline-functions'
-     Even if all calls to a given function are integrated, and the
-     function is declared `static', nevertheless output a separate
-     run-time callable version of the function.  This switch does not
-     affect `extern inline' functions.
-
-`-fkeep-static-consts'
-     Emit variables declared `static const' when optimization isn't
-     turned on, even if the variables aren't referenced.
-
-     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
-     `-fno-keep-static-consts' option.
-
-`-fmerge-constants'
-     Attempt to merge identical constants (string constants and
-     floating point constants) accross compilation units.
-
-     This option is default for optimized compilation if assembler and
-     linker support it.  Use `-fno-merge-constants' to inhibit this
-     behavior.
-
-`-fmerge-all-constants'
-     Attempt to merge identical constants and identical variables.
-
-     This option implies `-fmerge-constants'.  In addition to
-     `-fmerge-constants' this considers e.g. even constant initialized
-     arrays or initialized constant variables with integral or floating
-     point types.  Languages like C or C++ require each non-automatic
-     variable to have distinct location, so using this option will
-     result in non-conforming behavior.
-
-`-fno-branch-count-reg'
-     Do not use "decrement and branch" 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 instructions, which include x86, PowerPC, IA-64 and
-     S/390.
-
-`-fno-function-cse'
-     Do not put function addresses in registers; make each instruction
-     that calls a constant function contain the function's address
-     explicitly.
-
-     This option results in less efficient code, but some strange hacks
-     that alter the assembler output may be confused by the
-     optimizations performed when this option is not used.
-
-`-ffast-math'
-     Sets `-fno-math-errno', `-funsafe-math-optimizations', and
-     `-fno-trapping-math'.
-
-     This option causes the preprocessor macro `__FAST_MATH__' to be
-     defined.
-
-     This option should never be turned on by any `-O' option since it
-     can result in incorrect output for programs which depend on an
-     exact implementation of IEEE or ISO rules/specifications for math
-     functions.
-
-`-fno-math-errno'
-     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.
-
-     This option should never be turned on by any `-O' option since it
-     can result in incorrect output for programs which depend on an
-     exact implementation of IEEE or ISO rules/specifications for math
-     functions.
-
-     The default is `-fmath-errno'.
-
-`-funsafe-math-optimizations'
-     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
-     or startup files that change the default FPU control word or other
-     similar optimizations.
-
-     This option should never be turned on by any `-O' option since it
-     can result in incorrect output for programs which depend on an
-     exact implementation of IEEE or ISO rules/specifications for math
-     functions.
-
-     The default is `-fno-unsafe-math-optimizations'.
-
-`-fno-trapping-math'
-     Compile code assuming that floating-point operations cannot
-     generate user-visible traps.  Setting this option may allow faster
-     code if one relies on "non-stop" IEEE arithmetic, for example.
-
-     This option should never be turned on by any `-O' option since it
-     can result in incorrect output for programs which depend on an
-     exact implementation of IEEE or ISO rules/specifications for math
-     functions.
-
-     The default is `-ftrapping-math'.
-
-`-fbounds-check'
-     For front-ends that support it, generate additional code to check
-     that indices used to access arrays are within the declared range.
-     This is currenly only supported by the Java and Fortran 77
-     front-ends, where this option defaults to true and false
-     respectively.
-
-
-   The following options control specific optimizations.  The `-O2'
-option turns on all of these optimizations except `-funroll-loops' and
-`-funroll-all-loops'.  On most machines, the `-O' option turns on the
-`-fthread-jumps' and `-fdelayed-branch' options, but specific machines
-may handle it differently.
-
-   You can use the following flags in the rare cases when "fine-tuning"
-of optimizations to be performed is desired.
-
-   Not all of the optimizations performed by GCC have `-f' options to
-control them.
-
-`-fstrength-reduce'
-     Perform the optimizations of loop strength reduction and
-     elimination of iteration variables.
-
-`-fthread-jumps'
-     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 the condition is known to be true or false.
-
-`-fcse-follow-jumps'
-     In common subexpression elimination, scan through jump instructions
-     when the target of the jump is not reached by any other path.  For
-     example, when CSE encounters an `if' statement with an `else'
-     clause, CSE will follow the jump when the condition tested is
-     false.
-
-`-fcse-skip-blocks'
-     This is similar to `-fcse-follow-jumps', but causes CSE to follow
-     jumps which conditionally skip over blocks.  When CSE encounters a
-     simple `if' statement with no else clause, `-fcse-skip-blocks'
-     causes CSE to follow the jump around the body of the `if'.
-
-`-frerun-cse-after-loop'
-     Re-run common subexpression elimination after loop optimizations
-     has been performed.
-
-`-frerun-loop-opt'
-     Run the loop optimizer twice.
-
-`-fgcse'
-     Perform a global common subexpression elimination pass.  This pass
-     also performs global constant and copy propagation.
-
-     _Note:_ When compiling a program using computed gotos, a GCC
-     extension, you may get better runtime performance if you disable
-     the global common subexpression elmination pass by adding
-     `-fno-gcse' to the command line.
-
-`-fgcse-lm'
-     When `-fgcse-lm' is enabled, global common subexpression
-     elimination will attempt to move loads which 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.
-
-`-fgcse-sm'
-     When `-fgcse-sm' 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
-     `-fgcse-lm', loops containing a load/store sequence can be changed
-     to a load before the loop and a store after the loop.
-
-`-fdelete-null-pointer-checks'
-     Use global dataflow analysis to identify and eliminate useless
-     checks for null pointers.  The compiler assumes that dereferencing
-     a null pointer would have halted the program.  If a pointer is
-     checked after it has already been dereferenced, it cannot be null.
-
-     In some environments, this assumption is not true, and programs can
-     safely dereference null pointers.  Use
-     `-fno-delete-null-pointer-checks' to disable this optimization for
-     programs which depend on that behavior.
-
-`-fexpensive-optimizations'
-     Perform a number of minor optimizations that are relatively
-     expensive.
-
-`-foptimize-register-move'
-`-fregmove'
-     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.  GCC enables this optimization by
-     default with `-O2' or higher.
-
-     Note `-fregmove' and `-foptimize-register-move' are the same
-     optimization.
-
-`-fdelayed-branch'
-     If supported for the target machine, attempt to reorder
-     instructions to exploit instruction slots available after delayed
-     branch instructions.
-
-`-fschedule-insns'
-     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 or floating point
-     instruction is required.
-
-`-fschedule-insns2'
-     Similar to `-fschedule-insns', 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.
-
-`-fno-sched-interblock'
-     Don't schedule instructions across basic blocks.  This is normally
-     enabled by default when scheduling before register allocation, i.e.
-     with `-fschedule-insns' or at `-O2' or higher.
-
-`-fno-sched-spec'
-     Don't allow speculative motion of non-load instructions.  This is
-     normally enabled by default when scheduling before register
-     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
-
-`-fsched-spec-load'
-     Allow speculative motion of some load instructions.  This only
-     makes sense when scheduling before register allocation, i.e. with
-     `-fschedule-insns' or at `-O2' or higher.
-
-`-fsched-spec-load-dangerous'
-     Allow speculative motion of more load instructions.  This only
-     makes sense when scheduling before register allocation, i.e. with
-     `-fschedule-insns' or at `-O2' or higher.
-
-`-ffunction-sections'
-`-fdata-sections'
-     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.
-
-     Use these options on systems where the linker can perform
-     optimizations to improve locality of reference in the instruction
-     space.  HPPA processors running HP-UX and Sparc processors running
-     Solaris 2 have linkers with such optimizations.  Other systems
-     using the ELF object format as well as AIX may have these
-     optimizations in the future.
-
-     Only use these options when there are significant benefits from
-     doing so.  When you specify these options, the assembler and
-     linker will create larger object and executable files and will
-     also be slower.  You will not be able to use `gprof' on all
-     systems if you specify this option and you may have problems with
-     debugging if you specify both this option and `-g'.
-
-`-fcaller-saves'
-     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.
-
-     This option is always enabled by default on certain machines,
-     usually those which have no call-preserved registers to use
-     instead.
-
-     For all machines, optimization level 2 and higher enables this
-     flag by default.
-
-`-funroll-loops'
-     Unroll loops whose number of iterations can be determined at
-     compile time or upon entry to the loop.  `-funroll-loops' implies
-     both `-fstrength-reduce' and `-frerun-cse-after-loop'.  This
-     option makes code larger, and may or may not make it run faster.
-
-`-funroll-all-loops'
-     Unroll all loops, even if their number of iterations is uncertain
-     when the loop is entered.  This usually makes programs run more
-     slowly.  `-funroll-all-loops' implies the same options as
-     `-funroll-loops',
-
-`-fprefetch-loop-arrays'
-     If supported by the target machine, generate instructions to
-     prefetch memory to improve the performance of loops that access
-     large arrays.
-
-`-fmove-all-movables'
-     Forces all invariant computations in loops to be moved outside the
-     loop.
-
-`-freduce-all-givs'
-     Forces all general-induction variables in loops to be
-     strength-reduced.
-
-     _Note:_ When compiling programs written in Fortran,
-     `-fmove-all-movables' and `-freduce-all-givs' are enabled by
-     default when you use the optimizer.
-
-     These options may generate better or worse code; results are highly
-     dependent on the structure of loops within the source code.
-
-     These two options are intended to be removed someday, once they
-     have helped determine the efficacy of various approaches to
-     improving loop optimizations.
-
-     Please let us (<gcc@gcc.gnu.org> and <fortran@gnu.org>) know how
-     use of these options affects the performance of your production
-     code.  We're very interested in code that runs _slower_ when these
-     options are _enabled_.
-
-`-fno-peephole'
-`-fno-peephole2'
-     Disable any machine-specific peephole optimizations.  The
-     difference between `-fno-peephole' and `-fno-peephole2' is in how
-     they are implemented in the compiler; some targets use one, some
-     use the other, a few use both.
-
-`-fbranch-probabilities'
-     After running a program compiled with `-fprofile-arcs' (*note
-     Options for Debugging Your Program or `gcc': Debugging Options.),
-     you can compile it a second time using `-fbranch-probabilities',
-     to improve optimizations based on the number of times each branch
-     was taken.  When the program compiled with `-fprofile-arcs' exits
-     it saves arc execution counts to a file called `SOURCENAME.da' for
-     each source file  The information in this data file is very
-     dependent on the structure of the generated code, so you must use
-     the same source code and the same optimization options for both
-     compilations.
-
-     With `-fbranch-probabilities', GCC puts a `REG_EXEC_COUNT' note on
-     the first instruction of each basic block, and a `REG_BR_PROB'
-     note on each `JUMP_INSN' and `CALL_INSN'.  These can be used to
-     improve optimization.  Currently, they are only used in one place:
-     in `reorg.c', instead of guessing which path a branch is mostly to
-     take, the `REG_BR_PROB' values are used to exactly determine which
-     path is taken more often.
-
-`-fno-guess-branch-probability'
-     Do not guess branch probabilities using a randomized model.
-
-     Sometimes gcc will opt to use a randomized model to guess branch
-     probabilities, when none are available from either profiling
-     feedback (`-fprofile-arcs') or `__builtin_expect'.  This means that
-     different runs of the compiler on the same program may produce
-     different object code.
-
-     In a hard real-time system, people don't want different runs of the
-     compiler to produce code that has different behavior; minimizing
-     non-determinism is of paramount import.  This switch allows users
-     to reduce non-determinism, possibly at the expense of inferior
-     optimization.
-
-`-fstrict-aliasing'
-     Allows 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 object of a different type, unless the
-     types are almost the same.  For example, an `unsigned int' can
-     alias an `int', but not a `void*' or a `double'.  A character type
-     may alias any other type.
-
-     Pay special attention to code like this:
-          union a_union {
-            int i;
-            double d;
-          };
-          
-          int f() {
-            a_union t;
-            t.d = 3.0;
-            return t.i;
-          }
-     The practice of reading from a different union member than the one
-     most recently written to (called "type-punning") is common.  Even
-     with `-fstrict-aliasing', type-punning is allowed, provided the
-     memory is accessed through the union type.  So, the code above
-     will work as expected.  However, this code might not:
-          int f() {
-            a_union t;
-            int* ip;
-            t.d = 3.0;
-            ip = &t.i;
-            return *ip;
-          }
-
-     Every language that wishes to perform language-specific alias
-     analysis should define a function that computes, given an `tree'
-     node, an alias set for the node.  Nodes in different alias sets
-     are not allowed to alias.  For an example, see the C front-end
-     function `c_get_alias_set'.
-
-`-falign-functions'
-`-falign-functions=N'
-     Align the start of functions to the next power-of-two greater than
-     N, skipping up to N bytes.  For instance, `-falign-functions=32'
-     aligns functions to the next 32-byte boundary, but
-     `-falign-functions=24' would align to the next 32-byte boundary
-     only if this can be done by skipping 23 bytes or less.
-
-     `-fno-align-functions' and `-falign-functions=1' are equivalent
-     and mean that functions will not be aligned.
-
-     Some assemblers only support this flag when N is a power of two;
-     in that case, it is rounded up.
-
-     If N is not specified, use a machine-dependent default.
-
-`-falign-labels'
-`-falign-labels=N'
-     Align all branch targets to a power-of-two boundary, skipping up to
-     N bytes like `-falign-functions'.  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.
-
-     If `-falign-loops' or `-falign-jumps' are applicable and are
-     greater than this value, then their values are used instead.
-
-     If N is not specified, use a machine-dependent default which is
-     very likely to be `1', meaning no alignment.
-
-`-falign-loops'
-`-falign-loops=N'
-     Align loops to a power-of-two boundary, skipping up to N bytes
-     like `-falign-functions'.  The hope is that the loop will be
-     executed many times, which will make up for any execution of the
-     dummy operations.
-
-     If N is not specified, use a machine-dependent default.
-
-`-falign-jumps'
-`-falign-jumps=N'
-     Align branch targets to a power-of-two boundary, for branch targets
-     where the targets can only be reached by jumping, skipping up to N
-     bytes like `-falign-functions'.  In this case, no dummy operations
-     need be executed.
-
-     If N is not specified, use a machine-dependent default.
-
-`-fssa'
-     Perform optimizations in static single assignment form.  Each
-     function's flow graph is translated into SSA form, optimizations
-     are performed, and the flow graph is translated back from SSA
-     form.  Users should not specify this option, since it is not yet
-     ready for production use.
-
-`-fssa-ccp'
-     Perform Sparse Conditional Constant Propagation in SSA form.
-     Requires `-fssa'.  Like `-fssa', this is an experimental feature.
-
-`-fssa-dce'
-     Perform aggressive dead-code elimination in SSA form.  Requires
-     `-fssa'.  Like `-fssa', this is an experimental feature.
-
-`-fsingle-precision-constant'
-     Treat floating point constant as single precision constant instead
-     of implicitly converting it to double precision constant.
-
-`-frename-registers'
-     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.
-     It can, however, make debugging impossible, since variables will
-     no longer stay in a "home register".
-
-`-fno-cprop-registers'
-     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.
-
-`--param NAME=VALUE'
-     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 that a certain number of instructions.
-     You can control some of these constants on the command-line using
-     the `--param' option.
-
-     In each case, the VALUE is an integer.  The allowable choices for
-     NAME are given in the following table:
-
-    `max-delay-slot-insn-search'
-          The maximum number of instructions to consider when looking
-          for an instruction to fill a delay slot.  If more than this
-          arbitrary number of instructions is searched, the time
-          savings from filling the delay slot will be minimal so stop
-          searching.  Increasing values mean more aggressive
-          optimization, making the compile time increase with probably
-          small improvement in executable run time.
-
-    `max-delay-slot-live-search'
-          When trying to fill delay slots, the maximum number of
-          instructions to consider when searching for a block with
-          valid live register information.  Increasing this arbitrarily
-          chosen value means more aggressive optimization, increasing
-          the compile time.  This parameter should be removed when the
-          delay slot code is rewritten to maintain the control-flow
-          graph.
-
-    `max-gcse-memory'
-          The approximate maximum amount of memory that will be
-          allocated in order to perform the global common subexpression
-          elimination optimization.  If more memory than specified is
-          required, the optimization will not be done.
-
-    `max-gcse-passes'
-          The maximum number of passes of GCSE to run.
-
-    `max-pending-list-length'
-          The maximum number of pending dependencies scheduling will
-          allow before flushing the current state and starting over.
-          Large functions with few branches or calls can create
-          excessively large lists which needlessly consume memory and
-          resources.
-
-    `max-inline-insns'
-          If an function contains more than this many instructions, it
-          will not be inlined.  This option is precisely equivalent to
-          `-finline-limit'.
-
-