; Options for the language- and target-independent parts of the compiler.

; Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 2, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING.  If not, write to the Free
; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, USA.

; See the GCC internals manual for a description of this file's format.

; Please try to keep this file in ASCII collating order.

-help
Common
Display this information

-param
Common Separate
--param <param>=<value>	Set parameter <param> to value.  See below for a complete list of parameters

-target-help
Common

-version
Common

G
Common Joined Separate UInteger
-G<number>	Put global and static data smaller than <number> bytes into a special section (on some targets)

O
Common JoinedOrMissing
-O<number>	Set optimization level to <number>

Os
Common
Optimize for space rather than speed

W
Common RejectNegative
This switch is deprecated; use -Wextra instead

Waggregate-return
Common Var(warn_aggregate_return)
Warn about returning structures, unions or arrays

Wattributes
Common Var(warn_attributes) Init(1)
Warn about inappropriate attribute usage

Wcast-align
Common Var(warn_cast_align)
Warn about pointer casts which increase alignment

Wdeprecated-declarations
Common Var(warn_deprecated_decl) Init(1)
Warn about uses of __attribute__((deprecated)) declarations

Wdisabled-optimization
Common Var(warn_disabled_optimization)
Warn when an optimization pass is disabled

Werror
Common Var(warnings_are_errors)
Treat all warnings as errors

Werror=
Common Joined
Treat specified warning as error

Wextra
Common
Print extra (possibly unwanted) warnings

Wfatal-errors
Common Var(flag_fatal_errors)
Exit on the first error occurred

Winline
Common Var(warn_inline)
Warn when an inlined function cannot be inlined

Wlarger-than-
Common RejectNegative Joined UInteger
-Wlarger-than-<number>	Warn if an object is larger than <number> bytes

Wunsafe-loop-optimizations
Common Var(warn_unsafe_loop_optimizations)
Warn if the loop cannot be optimized due to nontrivial assumptions.

Wmissing-noreturn
Common Var(warn_missing_noreturn)
Warn about functions which might be candidates for __attribute__((noreturn))

Woverflow
Common Var(warn_overflow) Init(1)
Warn about overflow in arithmetic expressions

Wpacked
Common Var(warn_packed)
Warn when the packed attribute has no effect on struct layout

Wpadded
Common Var(warn_padded)
Warn when padding is required to align structure members

Wshadow
Common Var(warn_shadow)
Warn when one local variable shadows another

Wstack-protector
Common Var(warn_stack_protect)
Warn when not issuing stack smashing protection for some reason

Wstrict-aliasing
Common
Warn about code which might break strict aliasing rules

Wstrict-aliasing=
Common Joined UInteger
Warn about code which might break strict aliasing rules

Wstrict-overflow
Common
Warn about optimizations that assume that signed overflow is undefined

Wstrict-overflow=
Common Joined UInteger
Warn about optimizations that assume that signed overflow is undefined

Wswitch
Common Var(warn_switch)
Warn about enumerated switches, with no default, missing a case

Wswitch-default
Common Var(warn_switch_default)
Warn about enumerated switches missing a \"default:\" statement

Wswitch-enum
Common Var(warn_switch_enum)
Warn about all enumerated switches missing a specific case

Wsystem-headers
Common Var(warn_system_headers)
Do not suppress warnings from system headers

Wuninitialized
Common Var(warn_uninitialized)
Warn about uninitialized automatic variables

Wunreachable-code
Common Var(warn_notreached)
Warn about code that will never be executed

Wunused
Common
Enable all -Wunused- warnings

Wunused-function
Common Var(warn_unused_function)
Warn when a function is unused

Wunused-label
Common Var(warn_unused_label)
Warn when a label is unused

Wunused-parameter
Common Var(warn_unused_parameter)
Warn when a function parameter is unused

Wunused-value
Common Var(warn_unused_value)
Warn when an expression value is unused

Wunused-variable
Common Var(warn_unused_variable)
Warn when a variable is unused

Wvolatile-register-var
Common Var(warn_register_var)
Warn when a register variable is declared volatile

aux-info
Common Separate
-aux-info <file>	Emit declaration information into <file>

aux-info=
Common Joined

auxbase
Common Separate

auxbase-strip
Common Separate

d
Common Joined
-d<letters>	Enable dumps from specific passes of the compiler

dumpbase
Common Separate
-dumpbase <file>	Set the file basename to be used for dumps

; LLVM LOCAL begin
; Emit LLVM assembly to the .s file instead of native code.
emit-llvm
Common Report Var(emit_llvm)
Emit LLVM code to the .s file instead of native machine code.

; Emit LLVM IR to the output file instead of native code.
emit-llvm-bc
Common Report Var(emit_llvm_bc)
Emit LLVM IR to the output file instead of native machine code.

; Calculate log, log2, log10, exp, exp2, pow(10,x) to a limited precision for
; single-precision floating-point numbers.
flimited-precision=
Common RejectNegative Joined UInteger Var(flag_limited_precision) Init(0)
Calculate the approximate value of logf, log2f, log10f, expf, exp2f, and powf(10,x) to the given bit precision.

; Debug pass manager
fdebug-pass-structure
Common Report Var(flag_debug_pass_structure)
Print pass manager structure

fdebug-pass-arguments
Common Report Var(flag_debug_pass_arguments)
Print pass manager arguments

fdebug-llvm-module-opt
Common Report Var(flag_debug_llvm_module_opt)
Help debug llvm module-level optimizer
; LLVM LOCAL end

; The version of the C++ ABI in use.  The following values are allowed:
;
; 0: The version of the ABI believed most conformant with the C++ ABI
;    specification.  This ABI may change as bugs are discovered and fixed.
;    Therefore, 0 will not necessarily indicate the same ABI in different
;    versions of G++.
;
; 1: The version of the ABI first used in G++ 3.2.
;
; Additional positive integers will be assigned as new versions of
; the ABI become the default version of the ABI.
fabi-version=
Common Joined UInteger Var(flag_abi_version) Init(2)

; APPLE LOCAL begin ObjC new abi
fobjc-abi-version=
Common Joined UInteger Var(flag_objc_abi) Init(-1)

fobjc-nilcheck
Common Report Var(flag_objc_nilcheck,1)
; APPLE LOCAL end ObjC new abi

; APPLE LOCAL begin C* warnings to easy porting to new abi 
Wobjc2
Common Report Var(flag_objc2_check)
; APPLE LOCAL end C* warnings to easy porting to new abi 

falign-functions
Common Report Var(align_functions,0)
Align the start of functions

; APPLE LOCAL begin 4096997
falign-functions=
Common RejectNegative Joined UInteger Var(align_functions) VarExists

; APPLE LOCAL end 4096997
; APPLE LOCAL begin optimization pragmas 3124235/3420242
falign-jumps
Common Report Var(align_jumps,0) VarUint PerFunc
Align labels which are only reached by jumping

falign-jumps=
Common RejectNegative Joined UInteger Var(align_jumps) VarExists VarUint PerFunc

; APPLE LOCAL begin 4760857 make align-jumps-max-skip PerFunc
; APPLE LOCAL begin falign-jumps-max-skip

falign-jumps-max-skip
Common Report Var(align_jumps_max_skip,0) VarUint PerFunc

falign-jumps-max-skip=
Common RejectNegative Joined UInteger Var(align_jumps_max_skip) PerFunc VarUint VarExists

; APPLE LOCAL end falign-jumps-max-skip
; APPLE LOCAL end 4760857 make align-jumps-max-skip PerFunc

falign-labels
Common Report Var(align_labels,0) VarUint PerFunc
Align all labels

falign-labels=
Common RejectNegative Joined UInteger Var(align_labels) VarExists PerFunc VarUint

falign-loops
Common Report Var(align_loops) VarUint PerFunc
Align the start of loops

falign-loops=
Common RejectNegative Joined UInteger Var(align_loops) VarExists PerFunc VarUint

; APPLE LOCAL end optimization pragmas 3124235/3420242
; APPLE LOCAL begin 4760857 make align-loops-max-skip PerFunc
; APPLE LOCAL begin falign-loops-max-skip

falign-loops-max-skip
Common Report Var(align_loops_max_skip,0) VarUint PerFunc

falign-loops-max-skip=
Common RejectNegative Joined UInteger Var(align_loops_max_skip) VarExists PerFunc VarUint

; APPLE LOCAL end falign-loops-max-skip
; APPLE LOCAL end 4760857 make align-loops-max-skip PerFunc

; APPLE LOCAL begin predictive compilation
fpredictive-compilation
Common
Predictive Compilation

fpredictive-compilation=
Common RejectNegative Joined UInteger
; APPLE LOCAL end predictive compilation

; This flag is only tested if alias checking is enabled.
; 0 if pointer arguments may alias each other.  True in C.
; 1 if pointer arguments may not alias each other but may alias
;   global variables.
; 2 if pointer arguments may not alias each other and may not
;   alias global variables.
; 3 if pointer arguments may not alias anything.  True in Fortran.
;   Set by the front end.
fargument-alias
Common Report Var(flag_argument_noalias,0)
Specify that arguments may alias each other and globals

fargument-noalias
Common Report Var(flag_argument_noalias,1) VarExists
Assume arguments may alias globals but not each other

fargument-noalias-global
Common Report Var(flag_argument_noalias,2) VarExists
Assume arguments alias neither each other nor globals

fargument-noalias-anything
Common Report Var(flag_argument_noalias,3) VarExists
Assume arguments alias no other storage

fasynchronous-unwind-tables
Common Report Var(flag_asynchronous_unwind_tables)
Generate unwind tables that are exact at each instruction boundary

; -fcheck-bounds causes gcc to generate array bounds checks.
; For C, C++ and ObjC: defaults off.
; For Java: defaults to on.
; For Fortran: defaults to off.
fbounds-check
Common Report Var(flag_bounds_check)
Generate code to check bounds before indexing arrays

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fbranch-count-reg
Common Report Var(flag_branch_on_count_reg) Init(1) PerFunc
Replace add, compare, branch with branch on count register
; APPLE LOCAL end optimization pragmas 3124235/3420242

fbranch-probabilities
Common Report Var(flag_branch_probabilities)
Use profiling information for branch probabilities

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fbranch-target-load-optimize
Common Report Var(flag_branch_target_load_optimize) PerFunc
Perform branch target load optimization before prologue / epilogue threading

fbranch-target-load-optimize2
Common Report Var(flag_branch_target_load_optimize2) PerFunc
Perform branch target load optimization after prologue / epilogue threading

fbtr-bb-exclusive
Common Report Var(flag_btr_bb_exclusive) PerFunc
Restrict target load migration not to re-use registers in any basic block
; APPLE LOCAL end optimization pragmas 3124235/3420242

fcall-saved-
Common Joined RejectNegative
-fcall-saved-<register>	Mark <register> as being preserved across functions

fcall-used-
Common Joined RejectNegative
-fcall-used-<register>	Mark <register> as being corrupted by function calls

; Nonzero for -fcaller-saves: allocate values in regs that need to
; be saved across function calls, if that produces overall better code.
; Optional now, so people can test it.
; APPLE LOCAL begin optimization pragmas 3124235/3420242
fcaller-saves
Common Report Var(flag_caller_saves) PerFunc
Save registers around function calls
; APPLE LOCAL end optimization pragmas 3124235/3420242

fcommon
Common Report Var(flag_no_common,0)
Do not put uninitialized globals in the common section

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fcprop-registers
Common Report Var(flag_cprop_registers) PerFunc
Perform a register copy-propagation optimization pass
; APPLE LOCAL end optimization pragmas 3124235/3420242

; APPLE LOCAL begin new profiling flag
fcreate-profile
Common
Enable common options for generating profile info for profile feedback directed optimizations
; APPLE LOCAL end new profiling flag

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fcrossjumping
Common Report Var(flag_crossjumping) PerFunc
Perform cross-jumping optimization

fcse-follow-jumps
Common Report Var(flag_cse_follow_jumps) PerFunc
When running CSE, follow jumps to their targets

fcse-skip-blocks
Common Report Var(flag_cse_skip_blocks) PerFunc
When running CSE, follow conditional jumps

fcx-limited-range
Common Report Var(flag_cx_limited_range) PerFunc
Omit range reduction step when performing complex division
; APPLE LOCAL end optimization pragmas 3124235/3420242

fdata-sections
Common Report Var(flag_data_sections)
Place data items into their own section

; Nonzero for -fdefer-pop: don't pop args after each function call
; instead save them up to pop many calls' args with one insns.
; APPLE LOCAL begin optimization pragmas 3124235/3420242
fdefer-pop
Common Report Var(flag_defer_pop) PerFunc
Defer popping functions args from stack until later

fdelayed-branch
Common Report Var(flag_delayed_branch) PerFunc
Attempt to fill delay slots of branch instructions

fdelete-null-pointer-checks
Common Report Var(flag_delete_null_pointer_checks) PerFunc
Delete useless null pointer checks
; APPLE LOCAL end optimization pragmas 3124235/3420242

fdiagnostics-show-location=
Common Joined RejectNegative
-fdiagnostics-show-location=[once|every-line]	How often to emit source location at the beginning of line-wrapped diagnostics

fdiagnostics-show-option
Common
Amend appropriate diagnostic messages with the command line option that controls them

fdump-
Common Joined RejectNegative
-fdump-<type>	Dump various compiler internals to a file

fdump-noaddr
Common Report Var(flag_dump_noaddr)
Suppress output of addresses in debugging dumps

fdump-unnumbered
Common Report Var(flag_dump_unnumbered) VarExists
Suppress output of instruction numbers, line number notes and addresses in debugging dumps

; APPLE LOCAL begin 4167759
flimit-debug-info
Common Report Var(flag_limit_debug_info)
Limit debug info for certain type 
; APPLE LOCAL end 4167759

fearly-inlining
Common Report Var(flag_early_inlining) Init(1)
Perform early inlining

feliminate-dwarf2-dups
Common Report Var(flag_eliminate_dwarf2_dups)
Perform DWARF2 duplicate elimination

feliminate-unused-debug-symbols
Common Report Var(flag_debug_only_used_symbols)
Perform unused type elimination in debug info

feliminate-unused-debug-types
Common Report Var(flag_eliminate_unused_debug_types) Init(1)
Perform unused type elimination in debug info

femit-class-debug-always
Common Report Var(flag_emit_class_debug_always) Init(1)
Do not suppress C++ class debug information.

fexceptions
Common Report Var(flag_exceptions)
Enable exception handling

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fexpensive-optimizations
Common Report Var(flag_expensive_optimizations) PerFunc
Perform a number of minor, expensive optimizations
; APPLE LOCAL end optimization pragmas 3124235/3420242

ffast-math
Common

; APPLE LOCAL begin optimization pragmas 3124235/3420242
ffinite-math-only
Common Report Var(flag_finite_math_only) PerFunc
Assume no NaNs or infinities are generated
; APPLE LOCAL end optimization pragmas 3124235/3420242

ffixed-
Common Joined RejectNegative
-ffixed-<register>	Mark <register> as being unavailable to the compiler

; APPLE LOCAL begin optimization pragmas 3124235/3420242
ffloat-store
Common Report Var(flag_float_store) PerFunc
Don't allocate floats and doubles in extended-precision registers

; Nonzero for -fforce-addr: load memory address into a register before
; reference to memory.  This makes better cse but slower compilation.
fforce-addr
Common Report Var(flag_force_addr) PerFunc
Copy memory address constants into registers before use

; Nonzero for -fforce-mem: load memory value into a register
; before arithmetic on it.  This makes better cse but slower compilation.
fforce-mem
Common Report Var(flag_force_mem) PerFunc
Copy memory operands into registers before use

; Nonzero means don't put addresses of constant functions in registers.
; Used for compiling the Unix kernel, where strange substitutions are
; done on the assembly output.
ffunction-cse
Common Report Var(flag_no_function_cse,0) PerFunc
Allow function addresses to be held in registers
; APPLE LOCAL end optimization pragmas 3124235/3420242

ffunction-sections
Common Report Var(flag_function_sections)
Place each function into its own section

;; APPLE LOCAL begin 5695218
fglobal-alloc-prefer-bytes
Common Report Var(flag_global_alloc_prefer_bytes) Init(1) PerFunc
Prefer to allocate byte and short candidates before word candidates (x86_32 only)

;; APPLE LOCAL end 5695218

;; APPLE LOCAL begin ARM conditionally disable local RA
flocal-alloc
Common Report Var(flag_local_alloc) Init(1) PerFunc
Run the local register allocator
;; APPLE LOCAL end ARM conditionally disable local RA

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fgcse
Common Report Var(flag_gcse) PerFunc
Perform global common subexpression elimination

fgcse-lm
Common Report Var(flag_gcse_lm) Init(1) PerFunc
Perform enhanced load motion during global common subexpression elimination

fgcse-sm
Common Report Var(flag_gcse_sm) Init(0) PerFunc
Perform store motion after global common subexpression elimination

fgcse-las
Common Report Var(flag_gcse_las) Init(0) PerFunc
Perform redundant load after store elimination in global common subexpression
elimination

fgcse-after-reload
Common Report Var(flag_gcse_after_reload) PerFunc
Perform global common subexpression elimination after register allocation
has finished

fguess-branch-probability
Common Report Var(flag_guess_branch_prob) PerFunc
Enable guessing of branch probabilities
; APPLE LOCAL end optimization pragmas 3124235/3420242

; Nonzero means ignore `#ident' directives.  0 means handle them.
; Generate position-independent code for executables if possible
; On SVR4 targets, it also controls whether or not to emit a
; string identifying the compiler.
fident
Common Report Var(flag_no_ident,0)
Process #ident directives

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fif-conversion
Common Report Var(flag_if_conversion) PerFunc
Perform conversion of conditional jumps to branchless equivalents

fif-conversion2
Common Report Var(flag_if_conversion2) PerFunc
Perform conversion of conditional jumps to conditional execution
; APPLE LOCAL end optimization pragmas 3124235/3420242

; -finhibit-size-directive inhibits output of .size for ELF.
; This is used only for compiling crtstuff.c,
; and it may be extended to other effects
; needed for crtstuff.c on other systems.
finhibit-size-directive
Common Report Var(flag_inhibit_size_directive)
Do not generate .size directives

; Nonzero means that functions declared `inline' will be treated
; as `static'.  Prevents generation of zillions of copies of unused
; static inline functions; instead, `inlines' are written out
; only when actually used.  Used in conjunction with -g.  Also
; does the right thing with #pragma interface.
finline
Common Report Var(flag_no_inline,0) Init(2)
Pay attention to the \"inline\" keyword

finline-functions
Common Report Var(flag_inline_functions)
Integrate simple functions into their callers

finline-functions-called-once
Common Report Var(flag_inline_functions_called_once) Init(1)
Integrate functions called once into their callers

finline-limit-
Common RejectNegative Joined UInteger

finline-limit=
Common RejectNegative Joined UInteger
-finline-limit=<number>	Limit the size of inlined functions to <number>

finstrument-functions
Common Report Var(flag_instrument_function_entry_exit)
Instrument function entry and exit with profiling calls

fipa-cp
Common Report Var(flag_ipa_cp)
Perform Interprocedural constant propagation

fipa-pure-const
Common Report Var(flag_ipa_pure_const) Init(0)
Discover pure and const functions

fipa-pta
Common Report Var(flag_ipa_pta) Init(0)
Perform interprocedural points-to analysis

fipa-reference
Common Report Var(flag_ipa_reference) Init(0)
Discover readonly and non addressable static variables

fipa-type-escape
Common Report Var(flag_ipa_type_escape) Init(0)
Type based escape and alias analysis

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fivopts
Common Report Var(flag_ivopts) Init(1) PerFunc
Optimize induction variables on trees
; APPLE LOCAL end optimization pragmas 3124235/3420242

fjump-tables
Common Var(flag_jump_tables) Init(1)
Use jump tables for sufficiently large switch statements

fkeep-inline-functions
Common Report Var(flag_keep_inline_functions)
Generate code for functions even if they are fully inlined

fkeep-static-consts
Common Report Var(flag_keep_static_consts) Init(1)
Emit static const variables even if they are not used

fleading-underscore
Common Report Var(flag_leading_underscore) Init(-1)
Give external symbols a leading underscore

floop-optimize
Common
Does nothing.  Preserved for backward compatibility.

; LLVM LOCAL begin
; Enable Link Time Optimization
flto
Common Report Var(emit_llvm)
Enable link time optimizaton.
; LLVM LOCAL end

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fmath-errno
Common Report Var(flag_errno_math) Init(1) PerFunc
Set errno after built-in math functions
; APPLE LOCAL end optimization pragmas 3124235/3420242

fmem-report
Common Report Var(mem_report)
Report on permanent memory allocation

; This will attempt to merge constant section constants, if 1 only
; string constants and constants from constant pool, if 2 also constant
; variables.
fmerge-all-constants
Common Report Var(flag_merge_constants,2) Init(1)
Attempt to merge identical constants and constant variables

fmerge-constants
Common Report Var(flag_merge_constants,1) VarExists
Attempt to merge identical constants across compilation units

fmessage-length=
Common RejectNegative Joined UInteger
-fmessage-length=<number>	Limit diagnostics to <number> characters per line.  0 suppresses line-wrapping

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fmodulo-sched
Common Report Var(flag_modulo_sched) PerFunc
Perform SMS based modulo scheduling before the first scheduling pass

fmove-loop-invariants
Common Report Var(flag_move_loop_invariants) Init(1) PerFunc VarUint
Move loop invariant computations out of loops
; APPLE LOCAL end optimization pragmas 3124235/3420242

fmudflap
Common RejectNegative Report Var(flag_mudflap)
Add mudflap bounds-checking instrumentation for single-threaded program

fmudflapth
Common RejectNegative Report VarExists Var(flag_mudflap,2)
Add mudflap bounds-checking instrumentation for multi-threaded program

fmudflapir
Common RejectNegative Report Var(flag_mudflap_ignore_reads)
Ignore read operations when inserting mudflap instrumentation

; LLVM local begin One Definition Rule
fone-definition-rule
Common Report Var(flag_odr)
Assume all definitions of a multiply defined global are equivalent
; LLVM local end

; APPLE LOCAL begin optimization pragmas 3124235/3420242
freschedule-modulo-scheduled-loops
Common Report Var(flag_resched_modulo_sched) PerFunc
Enable/Disable the traditional scheduling in loops that already passed modulo scheduling
; APPLE LOCAL end optimization pragmas 3124235/3420242

fnon-call-exceptions
Common Report Var(flag_non_call_exceptions)
Support synchronous non-call exceptions

; APPLE LOCAL begin -fobey-inline
fobey-inline
Common Report Var(flag_obey_inline) VarExists
Obey 'inline' keyword and always inline, regardless of size
; APPLE LOCAL end -fobey-inline

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fomit-frame-pointer
Common Report Var(flag_omit_frame_pointer) PerFunc VarUint
When possible do not generate stack frames

foptimize-register-move
Common Report Var(flag_regmove) PerFunc
Do the full register move optimization pass

foptimize-sibling-calls
Common Report Var(flag_optimize_sibling_calls) PerFunc
Optimize sibling and tail recursive calls
; APPLE LOCAL end optimization pragmas 3124235/3420242

; APPLE LOCAL begin opt diary
fopt-diary
Common Report Var(flag_opt_diary)
Enable optimization diary
; APPLE LOCAL end opt diary
fpack-struct
Common Report Var(flag_pack_struct)
Pack structure members together without holes

fpack-struct=
Common RejectNegative Joined UInteger
-fpack-struct=<number>	Set initial maximum structure member alignment

fpcc-struct-return
Common Report Var(flag_pcc_struct_return,1) VarExists
Return small aggregates in memory, not registers

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fpeel-loops
Common Report Var(flag_peel_loops) PerFunc
Perform loop peeling

fpeephole
Common Report Var(flag_no_peephole,0) PerFunc
Enable machine specific peephole optimizations

fpeephole2
Common Report Var(flag_peephole2) PerFunc
Enable an RTL peephole pass before sched2
; APPLE LOCAL end optimization pragmas 3124235/3420242

fPIC
Common Report Var(flag_pic,2)
Generate position-independent code if possible (large mode)

fPIE
Common Report Var(flag_pie,2)
Generate position-independent code for executables if possible (large mode)

fpic
Common Report Var(flag_pic,1) VarExists
Generate position-independent code if possible (small mode)

fpie
Common Report Var(flag_pie,1) VarExists
Generate position-independent code for executables if possible (small mode)

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fprefetch-loop-arrays
Common Report Var(flag_prefetch_loop_arrays) PerFunc
Generate prefetch instructions, if available, for arrays in loops
; APPLE LOCAL end optimization pragmas 3124235/3420242

fprofile
Common Report Var(profile_flag)
Enable basic program profiling code

fprofile-arcs
Common Report Var(profile_arc_flag)
Insert arc-based program profiling code

fprofile-generate
Common
Enable common options for generating profile info for profile feedback directed optimizations

fprofile-use
Common
Enable common options for performing profile feedback directed optimizations

fprofile-values
Common Report Var(flag_profile_values)
Insert code to profile values of expressions

frandom-seed
Common

frandom-seed=
Common Joined RejectNegative
-frandom-seed=<string>	Make compile reproducible using <string>

freg-struct-return
Common Report Var(flag_pcc_struct_return,0) VarExists
Return small aggregates in registers

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fregmove
Common Report Var(flag_regmove) PerFunc VarExists
Enables a register move optimization

frename-registers
Common Report Var(flag_rename_registers) Init(2) PerFunc VarUint
Perform a register renaming optimization pass

freorder-blocks
Common Report Var(flag_reorder_blocks) PerFunc
Reorder basic blocks to improve code placement

freorder-blocks-and-partition
Common Report Var(flag_reorder_blocks_and_partition) PerFunc
Reorder basic blocks and partition into hot and cold sections
; APPLE LOCAL end optimization pragmas 3124235/3420242

freorder-functions
Common Report Var(flag_reorder_functions)
Reorder functions to improve code placement

; APPLE LOCAL begin optimization pragmas 3124235/3420242
frerun-cse-after-loop
Common Report Var(flag_rerun_cse_after_loop) Init(2) PerFunc VarUint
Add a common subexpression elimination pass after loop optimizations

frerun-loop-opt
Common
Does nothing.  Preserved for backward compatibility.

frounding-math
Common Report Var(flag_rounding_math) PerFunc
Disable optimizations that assume default FP rounding behavior

fsched-interblock
Common Report Var(flag_schedule_interblock) Init(1) PerFunc
Enable scheduling across basic blocks

fsched-spec
Common Report Var(flag_schedule_speculative) Init(1) PerFunc
Allow speculative motion of non-loads

fsched-spec-load
Common Report Var(flag_schedule_speculative_load) PerFunc
Allow speculative motion of some loads

fsched-spec-load-dangerous
Common Report Var(flag_schedule_speculative_load_dangerous) PerFunc
Allow speculative motion of more loads

fsched-verbose=
Common RejectNegative Joined Var(sched_verbose_param) UInteger PerFunc VarUint
-fsched-verbose=<number>	Set the verbosity level of the scheduler

fsched2-use-superblocks
Common Report Var(flag_sched2_use_superblocks) PerFunc
If scheduling post reload, do superblock scheduling

fsched2-use-traces
Common Report Var(flag_sched2_use_traces) PerFunc
If scheduling post reload, do trace scheduling

fschedule-insns
Common Report Var(flag_schedule_insns) PerFunc
Reschedule instructions before register allocation

fschedule-insns2
Common Report Var(flag_schedule_insns_after_reload) PerFunc
Reschedule instructions after register allocation
; APPLE LOCAL end optimization pragmas 3124235/3420242

; sched_stalled_insns means that insns can be moved prematurely from the queue
; of stalled insns into the ready list.
fsched-stalled-insns
Common Report Var(flag_sched_stalled_insns)
Allow premature scheduling of queued insns

fsched-stalled-insns=
Common RejectNegative Joined UInteger
-fsched-stalled-insns=<number>	Set number of queued insns that can be prematurely scheduled

; sched_stalled_insns_dep controls how many recently scheduled cycles will
; be examined for a dependency on a stalled insn that is candidate for
; premature removal from the queue of stalled insns into the ready list (has
; an effect only if the flag 'sched_stalled_insns' is set).
; APPLE LOCAL begin optimization pragmas 3124235/3420242
fsched-stalled-insns-dep
Common Report Var(flag_sched_stalled_insns_dep,1) Init(1) PerFunc VarUint
Set dependence distance checking in premature scheduling of queued insns

fsched-stalled-insns-dep=
Common RejectNegative Joined UInteger Var(flag_sched_stalled_insns_dep) VarExists VarUint PerFunc
-fsched-stalled-insns-dep=<number>	Set dependence distance checking in premature scheduling of queued insns
; APPLE LOCAL end optimization pragmas 3124235/3420242

fsection-anchors
Common Report Var(flag_section_anchors)
Access data in the same section from shared anchor points

frtl-abstract-sequences
Common Report Var(flag_rtl_seqabstr)
Perform sequence abstraction optimization on RTL

fsee
Common Report Var(flag_see) Init(0)
Eliminate redundant sign extensions using LCM.

fshow-column
Common C ObjC C++ ObjC++ Report Var(flag_show_column) Init(1)
Show column numbers in diagnostics, when available.  Default on

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fsignaling-nans
Common Report Var(flag_signaling_nans) PerFunc
Disable optimizations observable by IEEE signaling NaNs
; APPLE LOCAL end optimization pragmas 3124235/3420242

fsingle-precision-constant
Common Report Var(flag_single_precision_constant)
Convert floating point constants to single precision constants

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fsplit-ivs-in-unroller
Common Report Var(flag_split_ivs_in_unroller) Init(1) PerFunc
Split lifetimes of induction variables when loops are unrolled

fvariable-expansion-in-unroller
Common Report Var(flag_variable_expansion_in_unroller) PerFunc
Apply variable expansion when loops are unrolled
; APPLE LOCAL end optimization pragmas 3124235/3420242

; Emit code to probe the stack, to help detect stack overflow; also
; may cause large objects to be allocated dynamically.
fstack-check
Common Report Var(flag_stack_check)
Insert stack checking code into the program

fstack-limit
Common

fstack-limit-register=
Common RejectNegative Joined
-fstack-limit-register=<register>	Trap if the stack goes past <register>

fstack-limit-symbol=
Common RejectNegative Joined
-fstack-limit-symbol=<name>	Trap if the stack goes past symbol <name>

; APPLE LOCAL begin stack-protector default 5095227
fstack-protector
Common Report Var(flag_stack_protect, 1) Init(-1)
Use propolice as a stack protection method
; APPLE LOCAL end stack-protector default 5095227

fstack-protector-all
Common Report RejectNegative Var(flag_stack_protect, 2) VarExists
Use a stack protection method for every function

fstrength-reduce
Common
Does nothing.  Preserved for backward compatibility.

; Nonzero if we should do (language-dependent) alias analysis.
; Typically, this analysis will assume that expressions of certain
; types do not alias expressions of certain other types.  Only used
; if alias analysis (in general) is enabled.
fstrict-aliasing
Common Report Var(flag_strict_aliasing)
Assume strict aliasing rules apply

fstrict-overflow
Common Report Var(flag_strict_overflow)
Treat signed overflow as undefined

fsyntax-only
Common Report Var(flag_syntax_only)
Check for syntax errors, then stop

ftest-coverage
Common Report Var(flag_test_coverage)
Create data files needed by \"gcov\"

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fthread-jumps
Common Report Var(flag_thread_jumps) PerFunc
Perform jump threading optimizations
; APPLE LOCAL end optimization pragmas 3124235/3420242

ftime-report
Common Report Var(time_report)
Report the time taken by each compiler pass

ftls-model=
Common Joined RejectNegative
-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]	Set the default thread-local storage code generation model

ftoplevel-reorder
Common Report Var(flag_toplevel_reorder) Init(1)
Reorder top level functions, variables, and asms

; APPLE LOCAL begin optimization pragmas 3124235/3420242
ftracer
Common Report Var(flag_tracer) PerFunc
Perform superblock formation via tail duplication

; Zero means that floating-point math operations cannot generate a
; (user-visible) trap.  This is the case, for example, in nonstop
; IEEE 754 arithmetic.
ftrapping-math
Common Report Var(flag_trapping_math) Init(1) PerFunc
Assume floating-point operations can trap

ftrapv
Common Report Var(flag_trapv) PerFunc
Trap for signed overflow in addition, subtraction and multiplication
; APPLE LOCAL end optimization pragmas 3124235/3420242

; APPLE LOCAL begin optimization pragmas 3124235/3420242
ftree-ccp
Common Report Var(flag_tree_ccp) PerFunc
Enable SSA-CCP optimization on trees

ftree-store-ccp
Common Report Var(flag_tree_store_ccp)
Enable SSA-CCP optimization for stores and loads

ftree-ch
Common Report Var(flag_tree_ch) PerFunc
Enable loop header copying on trees

ftree-combine-temps
Common Report Var(flag_tree_combine_temps) PerFunc
Coalesce memory temporaries in the SSA->normal pass

ftree-copyrename
Common Report Var(flag_tree_copyrename) PerFunc
Replace SSA temporaries with better names in copies

ftree-copy-prop
Common Report Var(flag_tree_copy_prop)
Enable copy propagation on trees

ftree-store-copy-prop
Common Report Var(flag_tree_store_copy_prop)
Enable copy propagation for stores and loads

ftree-dce
Common Report Var(flag_tree_dce) PerFunc
Enable SSA dead code elimination optimization on trees

ftree-dominator-opts
Common Report Var(flag_tree_dom) PerFunc
Enable dominator optimizations

ftree-dse
Common Report Var(flag_tree_dse) PerFunc
Enable dead store elimination

ftree-fre
Common Report Var(flag_tree_fre) PerFunc
Enable Full Redundancy Elimination (FRE) on trees

ftree-loop-im
Common Report Var(flag_tree_loop_im) Init(1) PerFunc
Enable loop invariant motion on trees

ftree-loop-linear
Common Report Var(flag_tree_loop_linear) PerFunc
Enable linear loop transforms on trees

ftree-loop-ivcanon
Common Report Var(flag_tree_loop_ivcanon) Init(1) PerFunc
Create canonical induction variables in loops

; APPLE LOCAL begin loops-to-memset
ftree-loop-memset
Common Report Var(flag_tree_loop_memset) Init(0) PerFunc
Transform appropriate loops to memset calls
; APPLE LOCAL end loops-to-memset

ftree-loop-optimize
Common Report Var(flag_tree_loop_optimize) Init(1) PerFunc
Enable loop optimizations on tree level

ftree-pre
Common Report Var(flag_tree_pre) PerFunc
Enable SSA-PRE optimization on trees

ftree-salias
Common Report Var(flag_tree_salias)
Perform structural alias analysis

ftree-sink
Common Report Var(flag_tree_sink)
Enable SSA code sinking on trees

ftree-sra
Common Report Var(flag_tree_sra) PerFunc
Perform scalar replacement of aggregates

ftree-ter
Common Report Var(flag_tree_ter) PerFunc
Replace temporary expressions in the SSA->normal pass

ftree-lrs
Common Report Var(flag_tree_live_range_split) PerFunc
Perform live range splitting during the SSA->normal pass
; APPLE LOCAL end optimization pragmas 3124235/3420242

ftree-vrp
Common Report Var(flag_tree_vrp) Init(0)
Perform Value Range Propagation on trees

funit-at-a-time
Common Report Var(flag_unit_at_a_time)
Compile whole compilation unit at a time

; APPLE LOCAL begin optimization pragmas 3124235/3420242
funroll-loops
Common Report Var(flag_unroll_loops) PerFunc
Perform loop unrolling when iteration count is known

funroll-all-loops
Common Report Var(flag_unroll_all_loops) PerFunc
Perform loop unrolling for all loops

; Nonzero means that loop optimizer may assume that the induction variables
; that control loops do not overflow and that the loops with nontrivial
; exit condition are not infinite
funsafe-loop-optimizations
Common Report Var(flag_unsafe_loop_optimizations)
Allow loop optimizations to assume that the loops behave in normal way

; Nonzero means that unsafe floating-point math optimizations are allowed
; for the sake of speed.  IEEE compliance is not guaranteed, and operations
; are allowed to assume that their arguments and results are "normal"
; (e.g., nonnegative for SQRT).
funsafe-math-optimizations
Common Report Var(flag_unsafe_math_optimizations) PerFunc
Allow math optimizations that may violate IEEE or ISO standards

funswitch-loops
Common Report Var(flag_unswitch_loops) PerFunc
Perform loop unswitching
; APPLE LOCAL end optimization pragmas 3124235/3420242

funwind-tables
Common Report Var(flag_unwind_tables)
Just generate unwind tables for exception handling

; APPLE LOCAL begin new profiling flag
fuse-profile
Common
Enable common options for performing profile feedback directed optimizations
; APPLE LOCAL end new profiling flag

fvar-tracking
Common Report Var(flag_var_tracking) VarExists
Perform variable tracking

; APPLE LOCAL begin optimization pragmas 3124235/3420242
ftree-vectorize
Common Report Var(flag_tree_vectorize) PerFunc
Enable loop vectorization on trees
; APPLE LOCAL end optimization pragmas 3124235/3420242

ftree-vect-loop-version
Common Report Var(flag_tree_vect_loop_version) Init(1)
Enable loop versioning when doing loop vectorization on trees

ftree-vectorizer-verbose=
Common RejectNegative Joined
-ftree-vectorizer-verbose=<number>	Set the verbosity level of the vectorizer

; -fverbose-asm causes extra commentary information to be produced in
; the generated assembly code (to make it more readable).  This option
; is generally only of use to those who actually need to read the
; generated assembly code (perhaps while debugging the compiler itself).
; -fno-verbose-asm, the default, causes the extra information
; to not be added and is useful when comparing two assembler files.
fverbose-asm
Common Report Var(flag_verbose_asm)
Add extra commentary to assembler output

fvisibility=
Common Joined RejectNegative
-fvisibility=[default|internal|hidden|protected]	Set the default symbol visibility


fvpt
Common Report Var(flag_value_profile_transformations)
Use expression value profiles in optimizations

; APPLE LOCAL begin optimization pragmas 3124235/3420242
fweb
Common Report Var(flag_web) Init(2) PerFunc VarUint
Construct webs and split unrelated uses of single variable

fwhole-program
Common Report Var(flag_whole_program) Init(0)
Perform whole program optimizations

fwrapv
Common Report Var(flag_wrapv) PerFunc
Assume signed arithmetic overflow wraps around
; APPLE LOCAL end optimization pragmas 3124235/3420242

; APPLE LOCAL begin fwritable strings
fwritable-strings
Common Report Var(flag_writable_strings) VarExists
Store strings in writable data section
; APPLE LOCAL end fwritable strings

; APPLE LOCAL begin mainline in darwin.opt
; APPLE LOCAL begin iframework for 4.3 add C++ 4094959
fapple-kext
Target Report C++ Var(flag_apple_kext)
Generate code for darwin loadable kernel extentions
; APPLE LOCAL end iframework for 4.3 add C++ 4094959

mkernel
Target Report Var(flag_mkernel)
Generate code for the kernel or loadable kernel extentions
; APPLE LOCAL end mainline in darwin.opt

; APPLE LOCAL begin iframework for 4.3 darwin.opt 4094959
iframework
Target RejectNegative C ObjC C++ ObjC++ Joined Separate 
-iframework <dir>	Add <dir> to the end of the system framework include path
; APPLE LOCAL end iframework for 4.3 darwin.opt 4094959

fzero-initialized-in-bss
Common Report Var(flag_zero_initialized_in_bss) Init(1)
Put zero initialized data in the bss section

g
Common JoinedOrMissing
Generate debug information in default format

gcoff
Common JoinedOrMissing Negative(gdwarf-2)
Generate debug information in COFF format

gdwarf-2
Common JoinedOrMissing Negative(gstabs)
Generate debug information in DWARF v2 format

ggdb
Common JoinedOrMissing
Generate debug information in default extended format

gstabs
Common JoinedOrMissing Negative(gstabs+)
Generate debug information in STABS format

gstabs+
Common JoinedOrMissing Negative(gvms)
Generate debug information in extended STABS format

gvms
Common JoinedOrMissing Negative(gxcoff)
Generate debug information in VMS format

gxcoff
Common JoinedOrMissing Negative(gxcoff+)
Generate debug information in XCOFF format

gxcoff+
Common JoinedOrMissing Negative(gcoff)
Generate debug information in extended XCOFF format

; LLVM LOCAL begin
mllvm
Common Separate Report
Specify options directly to the LLVM backend
; LLVM LOCAL end

o
Common Joined Separate
-o <file>	Place output into <file>

; APPLE LOCAL begin optimization pragmas 3124235/3420242
p
Common Var(profile_flag) VarExists
Enable function profiling
; APPLE LOCAL end optimization pragmas 3124235/3420242

pedantic
Common Var(pedantic)
Issue warnings needed for strict compliance to the standard

pedantic-errors
Common
Like -pedantic but issue them as errors

quiet
Common Var(quiet_flag)
Do not display functions compiled or elapsed time

version
Common Var(version_flag)
Display the compiler's version

w
Common Var(inhibit_warnings)
Suppress warnings

; This comment is to ensure we retain the blank line above.
