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

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

; 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

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

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

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.
