; 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

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