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

; Copyright (C) 2003, 2004, 2005 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, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.

; See c.opt 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

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

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

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

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
; APPLE LOCAL begin mainline
Wstack-protector
Common Var(warn_stack_protect)
Warn when not issuing stack smashing protection for some reason
; APPLE LOCAL end mainline

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

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

; APPLE LOCAL begin fat builds
arch
Common Separate
; APPLE LOCAL end fat builds

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

; APPLE LOCAL begin LLVM
; 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.

; 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
; APPLE LOCAL end LLVM

; 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.  True in Fortran.
;   The value is ignored if flag_alias_check is 0.
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

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

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

fdump-unnumbered
Common Report Var(flag_dump_unnumbered) VarExists
Suppress output of instruction numbers and line number notes 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
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

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 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-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

; 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

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

; APPLE LOCAL begin optimization pragmas 3124235/3420242
floop-optimize
Common Report Var(flag_loop_optimize) PerFunc
Perform loop optimizations

floop-optimize2
Common Report Var(flag_loop_optimize2) PerFunc
Perform loop optimizations using the new loop optimizer
; APPLE LOCAL end optimization pragmas 3124235/3420242

; APPLE LOCAL begin lno
floop-test
Common Report Var(flag_tree_ssa_loop_test)
Run loop optimizer tests
; APPLE LOCAL end lno

; 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) PerFunc
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 Var(flag_mudflap_threads)
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.

; 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

; APPLE LOCAL begin pascal strings
fpascal-strings
Common
Allow Pascal-style string literals
; APPLE LOCAL end pascal strings

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) PerFunc
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) PerFunc
Add a common subexpression elimination pass after loop optimizations

frerun-loop-opt
Common Report Var(flag_rerun_loop_opt) PerFunc
Run the loop optimizer twice

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

fshared-data
Common Report Var(flag_shared_data)
Mark data as shared rather than private

; 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

fspeculative-prefetching
Common Report Var(flag_speculative_prefetching)
Use value profiling for speculative prefetching

; 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 mainline
fstack-protector
Common Report Var(flag_stack_protect, 1)
Use propolice as a stack protection method

fstack-protector-all
Common Report RejectNegative Var(flag_stack_protect, 2) VarExists
Use a stack protection method for every function
; APPLE LOCAL end mainline
; APPLE LOCAL begin optimization pragmas 3124235/3420242
fstrength-reduce
Common Report Var(flag_strength_reduce) PerFunc
Perform strength reduction optimizations
; APPLE LOCAL end optimization pragmas 3124235/3420242

; 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

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

; 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

ftree-based-profiling
Common Report Var(flag_tree_based_profiling)
Use tree-ssa based implementation of profiling

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

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-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-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

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 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-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(0) PerFunc
Construct webs and split unrelated uses of single variable

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
Generate debug information in COFF format

gdwarf-2
Common JoinedOrMissing
Generate debug information in DWARF v2 format

ggdb
Common JoinedOrMissing
Generate debug information in default extended format

gstabs
Common JoinedOrMissing
Generate debug information in STABS format

gstabs+
Common JoinedOrMissing
Generate debug information in extended STABS format

gvms
Common JoinedOrMissing
Generate debug information in VMS format

gxcoff
Common JoinedOrMissing
Generate debug information in XCOFF format

gxcoff+
Common JoinedOrMissing
Generate debug information in extended XCOFF format

m
Common Joined

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

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.
