Options.td revision 363496
1//===--- Options.td - Options for clang -----------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//  This file defines the options accepted by clang.
10//
11//===----------------------------------------------------------------------===//
12
13// Include the common option parsing interfaces.
14include "llvm/Option/OptParser.td"
15
16/////////
17// Flags
18
19// DriverOption - The option is a "driver" option, and should not be forwarded
20// to other tools.
21def DriverOption : OptionFlag;
22
23// LinkerInput - The option is a linker input.
24def LinkerInput : OptionFlag;
25
26// NoArgumentUnused - Don't report argument unused warnings for this option; this
27// is useful for options like -static or -dynamic which a user may always end up
28// passing, even if the platform defaults to (or only supports) that option.
29def NoArgumentUnused : OptionFlag;
30
31// Unsupported - The option is unsupported, and the driver will reject command
32// lines that use it.
33def Unsupported : OptionFlag;
34
35// Ignored - The option is unsupported, and the driver will silently ignore it.
36def Ignored : OptionFlag;
37
38// CoreOption - This is considered a "core" Clang option, available in both
39// clang and clang-cl modes.
40def CoreOption : OptionFlag;
41
42// CLOption - This is a cl.exe compatibility option. Options with this flag
43// are made available when the driver is running in CL compatibility mode.
44def CLOption : OptionFlag;
45
46// CC1Option - This option should be accepted by clang -cc1.
47def CC1Option : OptionFlag;
48
49// CC1AsOption - This option should be accepted by clang -cc1as.
50def CC1AsOption : OptionFlag;
51
52// NoDriverOption - This option should not be accepted by the driver.
53def NoDriverOption : OptionFlag;
54
55// A short name to show in documentation. The name will be interpreted as rST.
56class DocName<string name> { string DocName = name; }
57
58// A brief description to show in documentation, interpreted as rST.
59class DocBrief<code descr> { code DocBrief = descr; }
60
61// Indicates that this group should be flattened into its parent when generating
62// documentation.
63class DocFlatten { bit DocFlatten = 1; }
64
65// Indicates that this warning is ignored, but accepted with a warning for
66// GCC compatibility.
67class IgnoredGCCCompat : Flags<[HelpHidden]> {}
68
69/////////
70// Groups
71
72def Action_Group : OptionGroup<"<action group>">, DocName<"Actions">,
73                   DocBrief<[{The action to perform on the input.}]>;
74
75// Meta-group for options which are only used for compilation,
76// and not linking etc.
77def CompileOnly_Group : OptionGroup<"<CompileOnly group>">,
78                        DocName<"Compilation flags">, DocBrief<[{
79Flags controlling the behavior of Clang during compilation. These flags have
80no effect during actions that do not perform compilation.}]>;
81
82def Preprocessor_Group : OptionGroup<"<Preprocessor group>">,
83                         Group<CompileOnly_Group>,
84                         DocName<"Preprocessor flags">, DocBrief<[{
85Flags controlling the behavior of the Clang preprocessor.}]>;
86
87def IncludePath_Group : OptionGroup<"<I/i group>">, Group<Preprocessor_Group>,
88                        DocName<"Include path management">,
89                        DocBrief<[{
90Flags controlling how ``#include``\s are resolved to files.}]>;
91
92def I_Group : OptionGroup<"<I group>">, Group<IncludePath_Group>, DocFlatten;
93def i_Group : OptionGroup<"<i group>">, Group<IncludePath_Group>, DocFlatten;
94def clang_i_Group : OptionGroup<"<clang i group>">, Group<i_Group>, DocFlatten;
95
96def M_Group : OptionGroup<"<M group>">, Group<Preprocessor_Group>,
97              DocName<"Dependency file generation">, DocBrief<[{
98Flags controlling generation of a dependency file for ``make``-like build
99systems.}]>;
100
101def d_Group : OptionGroup<"<d group>">, Group<Preprocessor_Group>,
102              DocName<"Dumping preprocessor state">, DocBrief<[{
103Flags allowing the state of the preprocessor to be dumped in various ways.}]>;
104
105def Diag_Group : OptionGroup<"<W/R group>">, Group<CompileOnly_Group>,
106                 DocName<"Diagnostic flags">, DocBrief<[{
107Flags controlling which warnings, errors, and remarks Clang will generate.
108See the :doc:`full list of warning and remark flags <DiagnosticsReference>`.}]>;
109
110def R_Group : OptionGroup<"<R group>">, Group<Diag_Group>, DocFlatten;
111def R_value_Group : OptionGroup<"<R (with value) group>">, Group<R_Group>,
112                    DocFlatten;
113def W_Group : OptionGroup<"<W group>">, Group<Diag_Group>, DocFlatten;
114def W_value_Group : OptionGroup<"<W (with value) group>">, Group<W_Group>,
115                    DocFlatten;
116
117def f_Group : OptionGroup<"<f group>">, Group<CompileOnly_Group>,
118              DocName<"Target-independent compilation options">;
119
120def f_clang_Group : OptionGroup<"<f (clang-only) group>">,
121                    Group<CompileOnly_Group>, DocFlatten;
122def pedantic_Group : OptionGroup<"<pedantic group>">, Group<f_Group>,
123                     DocFlatten;
124def opencl_Group : OptionGroup<"<opencl group>">, Group<f_Group>,
125                   DocName<"OpenCL flags">;
126
127def m_Group : OptionGroup<"<m group>">, Group<CompileOnly_Group>,
128              DocName<"Target-dependent compilation options">;
129
130// Feature groups - these take command line options that correspond directly to
131// target specific features and can be translated directly from command line
132// options.
133def m_aarch64_Features_Group : OptionGroup<"<aarch64 features group>">,
134                               Group<m_Group>, DocName<"AARCH64">;
135def m_amdgpu_Features_Group : OptionGroup<"<amdgpu features group>">,
136                              Group<m_Group>, DocName<"AMDGPU">;
137def m_arm_Features_Group : OptionGroup<"<arm features group>">,
138                           Group<m_Group>, DocName<"ARM">;
139def m_hexagon_Features_Group : OptionGroup<"<hexagon features group>">,
140                               Group<m_Group>, DocName<"Hexagon">;
141// The features added by this group will not be added to target features.
142// These are explicitly handled.
143def m_hexagon_Features_HVX_Group : OptionGroup<"<hexagon features group>">,
144                                   Group<m_Group>, DocName<"Hexagon">;
145def m_mips_Features_Group : OptionGroup<"<mips features group>">,
146                            Group<m_Group>, DocName<"MIPS">;
147def m_ppc_Features_Group : OptionGroup<"<ppc features group>">,
148                           Group<m_Group>, DocName<"PowerPC">;
149def m_wasm_Features_Group : OptionGroup<"<wasm features group>">,
150                            Group<m_Group>, DocName<"WebAssembly">;
151def m_x86_Features_Group : OptionGroup<"<x86 features group>">,
152                           Group<m_Group>, Flags<[CoreOption]>, DocName<"X86">;
153def m_riscv_Features_Group : OptionGroup<"<riscv features group>">,
154                             Group<m_Group>, DocName<"RISCV">;
155
156def m_libc_Group : OptionGroup<"<m libc group>">, Group<m_mips_Features_Group>,
157                   Flags<[HelpHidden]>;
158
159def O_Group : OptionGroup<"<O group>">, Group<CompileOnly_Group>,
160              DocName<"Optimization level">, DocBrief<[{
161Flags controlling how much optimization should be performed.}]>;
162
163def DebugInfo_Group : OptionGroup<"<g group>">, Group<CompileOnly_Group>,
164                      DocName<"Debug information generation">, DocBrief<[{
165Flags controlling how much and what kind of debug information should be
166generated.}]>;
167
168def g_Group : OptionGroup<"<g group>">, Group<DebugInfo_Group>,
169              DocName<"Kind and level of debug information">;
170def gN_Group : OptionGroup<"<gN group>">, Group<g_Group>,
171               DocName<"Debug level">;
172def ggdbN_Group : OptionGroup<"<ggdbN group>">, Group<gN_Group>, DocFlatten;
173def gTune_Group : OptionGroup<"<gTune group>">, Group<g_Group>,
174                  DocName<"Debugger to tune debug information for">;
175def g_flags_Group : OptionGroup<"<g flags group>">, Group<DebugInfo_Group>,
176                    DocName<"Debug information flags">;
177
178def StaticAnalyzer_Group : OptionGroup<"<Static analyzer group>">,
179                           DocName<"Static analyzer flags">, DocBrief<[{
180Flags controlling the behavior of the Clang Static Analyzer.}]>;
181
182// gfortran options that we recognize in the driver and pass along when
183// invoking GCC to compile Fortran code.
184def gfortran_Group : OptionGroup<"<gfortran group>">,
185                     DocName<"Fortran compilation flags">, DocBrief<[{
186Flags that will be passed onto the ``gfortran`` compiler when Clang is given
187a Fortran input.}]>;
188
189def Link_Group : OptionGroup<"<T/e/s/t/u group>">, DocName<"Linker flags">,
190                 DocBrief<[{Flags that are passed on to the linker}]>;
191def T_Group : OptionGroup<"<T group>">, Group<Link_Group>, DocFlatten;
192def u_Group : OptionGroup<"<u group>">, Group<Link_Group>, DocFlatten;
193
194def reserved_lib_Group : OptionGroup<"<reserved libs group>">,
195                         Flags<[Unsupported]>;
196
197// Temporary groups for clang options which we know we don't support,
198// but don't want to verbosely warn the user about.
199def clang_ignored_f_Group : OptionGroup<"<clang ignored f group>">,
200  Group<f_Group>, Flags<[Ignored]>;
201def clang_ignored_m_Group : OptionGroup<"<clang ignored m group>">,
202  Group<m_Group>, Flags<[Ignored]>;
203
204// Group for clang options in the process of deprecation.
205// Please include the version that deprecated the flag as comment to allow
206// easier garbage collection.
207def clang_ignored_legacy_options_Group : OptionGroup<"<clang legacy flags>">,
208  Group<f_Group>, Flags<[Ignored]>;
209
210// Retired with clang-5.0
211def : Flag<["-"], "fslp-vectorize-aggressive">, Group<clang_ignored_legacy_options_Group>;
212def : Flag<["-"], "fno-slp-vectorize-aggressive">, Group<clang_ignored_legacy_options_Group>;
213
214// Retired with clang-10.0. Previously controlled X86 MPX ISA.
215def mmpx : Flag<["-"], "mmpx">, Group<clang_ignored_legacy_options_Group>;
216def mno_mpx : Flag<["-"], "mno-mpx">, Group<clang_ignored_legacy_options_Group>;
217
218// Group that ignores all gcc optimizations that won't be implemented
219def clang_ignored_gcc_optimization_f_Group : OptionGroup<
220  "<clang_ignored_gcc_optimization_f_Group>">, Group<f_Group>, Flags<[Ignored]>;
221
222/////////
223// Options
224
225// The internal option ID must be a valid C++ identifier and results in a
226// clang::driver::options::OPT_XX enum constant for XX.
227//
228// We want to unambiguously be able to refer to options from the driver source
229// code, for this reason the option name is mangled into an ID. This mangling
230// isn't guaranteed to have an inverse, but for practical purposes it does.
231//
232// The mangling scheme is to ignore the leading '-', and perform the following
233// substitutions:
234//   _ => __
235//   - => _
236//   / => _SLASH
237//   # => _HASH
238//   ? => _QUESTION
239//   , => _COMMA
240//   = => _EQ
241//   C++ => CXX
242//   . => _
243
244// Developer Driver Options
245
246def internal_Group : OptionGroup<"<clang internal options>">, Flags<[HelpHidden]>;
247def internal_driver_Group : OptionGroup<"<clang driver internal options>">,
248  Group<internal_Group>, HelpText<"DRIVER OPTIONS">;
249def internal_debug_Group :
250  OptionGroup<"<clang debug/development internal options>">,
251  Group<internal_Group>, HelpText<"DEBUG/DEVELOPMENT OPTIONS">;
252
253class InternalDriverOpt : Group<internal_driver_Group>,
254  Flags<[DriverOption, HelpHidden]>;
255def driver_mode : Joined<["--"], "driver-mode=">, Group<internal_driver_Group>,
256  Flags<[CoreOption, DriverOption, HelpHidden]>,
257  HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', or 'cl'">;
258def rsp_quoting : Joined<["--"], "rsp-quoting=">, Group<internal_driver_Group>,
259  Flags<[CoreOption, DriverOption, HelpHidden]>,
260  HelpText<"Set the rsp quoting to either 'posix', or 'windows'">;
261def ccc_gcc_name : Separate<["-"], "ccc-gcc-name">, InternalDriverOpt,
262  HelpText<"Name for native GCC compiler">,
263  MetaVarName<"<gcc-path>">;
264
265class InternalDebugOpt : Group<internal_debug_Group>,
266  Flags<[DriverOption, HelpHidden, CoreOption]>;
267def ccc_install_dir : Separate<["-"], "ccc-install-dir">, InternalDebugOpt,
268  HelpText<"Simulate installation in the given directory">;
269def ccc_print_phases : Flag<["-"], "ccc-print-phases">, InternalDebugOpt,
270  HelpText<"Dump list of actions to perform">;
271def ccc_print_bindings : Flag<["-"], "ccc-print-bindings">, InternalDebugOpt,
272  HelpText<"Show bindings of tools to actions">;
273
274def ccc_arcmt_check : Flag<["-"], "ccc-arcmt-check">, InternalDriverOpt,
275  HelpText<"Check for ARC migration issues that need manual handling">;
276def ccc_arcmt_modify : Flag<["-"], "ccc-arcmt-modify">, InternalDriverOpt,
277  HelpText<"Apply modifications to files to conform to ARC">;
278def ccc_arcmt_migrate : Separate<["-"], "ccc-arcmt-migrate">, InternalDriverOpt,
279  HelpText<"Apply modifications and produces temporary files that conform to ARC">;
280def arcmt_migrate_report_output : Separate<["-"], "arcmt-migrate-report-output">,
281  HelpText<"Output path for the plist report">,  Flags<[CC1Option]>;
282def arcmt_migrate_emit_arc_errors : Flag<["-"], "arcmt-migrate-emit-errors">,
283  HelpText<"Emit ARC errors even if the migrator can fix them">,
284  Flags<[CC1Option]>;
285def gen_reproducer: Flag<["-"], "gen-reproducer">, InternalDebugOpt,
286  HelpText<"Auto-generates preprocessed source files and a reproduction script">;
287def gen_cdb_fragment_path: Separate<["-"], "gen-cdb-fragment-path">, InternalDebugOpt,
288  HelpText<"Emit a compilation database fragment to the specified directory">;
289
290def _migrate : Flag<["--"], "migrate">, Flags<[DriverOption]>,
291  HelpText<"Run the migrator">;
292def ccc_objcmt_migrate : Separate<["-"], "ccc-objcmt-migrate">,
293  InternalDriverOpt,
294  HelpText<"Apply modifications and produces temporary files to migrate to "
295   "modern ObjC syntax">;
296def objcmt_migrate_literals : Flag<["-"], "objcmt-migrate-literals">, Flags<[CC1Option]>,
297  HelpText<"Enable migration to modern ObjC literals">;
298def objcmt_migrate_subscripting : Flag<["-"], "objcmt-migrate-subscripting">, Flags<[CC1Option]>,
299  HelpText<"Enable migration to modern ObjC subscripting">;
300def objcmt_migrate_property : Flag<["-"], "objcmt-migrate-property">, Flags<[CC1Option]>,
301  HelpText<"Enable migration to modern ObjC property">;
302def objcmt_migrate_all : Flag<["-"], "objcmt-migrate-all">, Flags<[CC1Option]>,
303  HelpText<"Enable migration to modern ObjC">;
304def objcmt_migrate_readonly_property : Flag<["-"], "objcmt-migrate-readonly-property">, Flags<[CC1Option]>,
305  HelpText<"Enable migration to modern ObjC readonly property">;
306def objcmt_migrate_readwrite_property : Flag<["-"], "objcmt-migrate-readwrite-property">, Flags<[CC1Option]>,
307  HelpText<"Enable migration to modern ObjC readwrite property">;
308def objcmt_migrate_property_dot_syntax : Flag<["-"], "objcmt-migrate-property-dot-syntax">, Flags<[CC1Option]>,
309  HelpText<"Enable migration of setter/getter messages to property-dot syntax">;
310def objcmt_migrate_annotation : Flag<["-"], "objcmt-migrate-annotation">, Flags<[CC1Option]>,
311  HelpText<"Enable migration to property and method annotations">;
312def objcmt_migrate_instancetype : Flag<["-"], "objcmt-migrate-instancetype">, Flags<[CC1Option]>,
313  HelpText<"Enable migration to infer instancetype for method result type">;
314def objcmt_migrate_nsmacros : Flag<["-"], "objcmt-migrate-ns-macros">, Flags<[CC1Option]>,
315  HelpText<"Enable migration to NS_ENUM/NS_OPTIONS macros">;
316def objcmt_migrate_protocol_conformance : Flag<["-"], "objcmt-migrate-protocol-conformance">, Flags<[CC1Option]>,
317  HelpText<"Enable migration to add protocol conformance on classes">;
318def objcmt_atomic_property : Flag<["-"], "objcmt-atomic-property">, Flags<[CC1Option]>,
319  HelpText<"Make migration to 'atomic' properties">;
320def objcmt_returns_innerpointer_property : Flag<["-"], "objcmt-returns-innerpointer-property">, Flags<[CC1Option]>,
321  HelpText<"Enable migration to annotate property with NS_RETURNS_INNER_POINTER">;
322def objcmt_ns_nonatomic_iosonly: Flag<["-"], "objcmt-ns-nonatomic-iosonly">, Flags<[CC1Option]>,
323  HelpText<"Enable migration to use NS_NONATOMIC_IOSONLY macro for setting property's 'atomic' attribute">;
324def objcmt_migrate_designated_init : Flag<["-"], "objcmt-migrate-designated-init">, Flags<[CC1Option]>,
325  HelpText<"Enable migration to infer NS_DESIGNATED_INITIALIZER for initializer methods">;
326def objcmt_whitelist_dir_path: Joined<["-"], "objcmt-whitelist-dir-path=">, Flags<[CC1Option]>,
327  HelpText<"Only modify files with a filename contained in the provided directory path">;
328// The misspelt "white-list" [sic] alias is due for removal.
329def : Joined<["-"], "objcmt-white-list-dir-path=">, Flags<[CC1Option]>,
330    Alias<objcmt_whitelist_dir_path>;
331
332// Make sure all other -ccc- options are rejected.
333def ccc_ : Joined<["-"], "ccc-">, Group<internal_Group>, Flags<[Unsupported]>;
334
335// Standard Options
336
337def _HASH_HASH_HASH : Flag<["-"], "###">, Flags<[DriverOption, CoreOption]>,
338    HelpText<"Print (but do not run) the commands to run for this compilation">;
339def _DASH_DASH : Option<["--"], "", KIND_REMAINING_ARGS>,
340    Flags<[DriverOption, CoreOption]>;
341def A : JoinedOrSeparate<["-"], "A">, Flags<[RenderJoined]>, Group<gfortran_Group>;
342def B : JoinedOrSeparate<["-"], "B">, MetaVarName<"<dir>">,
343    HelpText<"Add <dir> to search path for binaries and object files used implicitly">;
344def CC : Flag<["-"], "CC">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
345    HelpText<"Include comments from within macros in preprocessed output">;
346def C : Flag<["-"], "C">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
347    HelpText<"Include comments in preprocessed output">;
348def D : JoinedOrSeparate<["-"], "D">, Group<Preprocessor_Group>,
349    Flags<[CC1Option]>, MetaVarName<"<macro>=<value>">,
350    HelpText<"Define <macro> to <value> (or 1 if <value> omitted)">;
351def E : Flag<["-"], "E">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
352    HelpText<"Only run the preprocessor">;
353def F : JoinedOrSeparate<["-"], "F">, Flags<[RenderJoined,CC1Option]>,
354    HelpText<"Add directory to framework include search path">;
355def G : JoinedOrSeparate<["-"], "G">, Flags<[DriverOption]>, Group<m_Group>,
356    MetaVarName<"<size>">, HelpText<"Put objects of at most <size> bytes "
357    "into small data section (MIPS / Hexagon)">;
358def G_EQ : Joined<["-"], "G=">, Flags<[DriverOption]>, Group<m_Group>, Alias<G>;
359def H : Flag<["-"], "H">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
360    HelpText<"Show header includes and nesting depth">;
361def I_ : Flag<["-"], "I-">, Group<I_Group>,
362    HelpText<"Restrict all prior -I flags to double-quoted inclusion and "
363             "remove current directory from include path">;
364def I : JoinedOrSeparate<["-"], "I">, Group<I_Group>,
365    Flags<[CC1Option,CC1AsOption]>, MetaVarName<"<dir>">,
366    HelpText<"Add directory to include search path">;
367def L : JoinedOrSeparate<["-"], "L">, Flags<[RenderJoined]>, Group<Link_Group>,
368    MetaVarName<"<dir>">, HelpText<"Add directory to library search path">;
369def MD : Flag<["-"], "MD">, Group<M_Group>,
370    HelpText<"Write a depfile containing user and system headers">;
371def MMD : Flag<["-"], "MMD">, Group<M_Group>,
372    HelpText<"Write a depfile containing user headers">;
373def M : Flag<["-"], "M">, Group<M_Group>,
374    HelpText<"Like -MD, but also implies -E and writes to stdout by default">;
375def MM : Flag<["-"], "MM">, Group<M_Group>,
376    HelpText<"Like -MMD, but also implies -E and writes to stdout by default">;
377def MF : JoinedOrSeparate<["-"], "MF">, Group<M_Group>,
378    HelpText<"Write depfile output from -MMD, -MD, -MM, or -M to <file>">,
379    MetaVarName<"<file>">;
380def MG : Flag<["-"], "MG">, Group<M_Group>, Flags<[CC1Option]>,
381    HelpText<"Add missing headers to depfile">;
382def MJ : JoinedOrSeparate<["-"], "MJ">, Group<M_Group>,
383    HelpText<"Write a compilation database entry per input">;
384def MP : Flag<["-"], "MP">, Group<M_Group>, Flags<[CC1Option]>,
385    HelpText<"Create phony target for each dependency (other than main file)">;
386def MQ : JoinedOrSeparate<["-"], "MQ">, Group<M_Group>, Flags<[CC1Option]>,
387    HelpText<"Specify name of main file output to quote in depfile">;
388def MT : JoinedOrSeparate<["-"], "MT">, Group<M_Group>, Flags<[CC1Option]>,
389    HelpText<"Specify name of main file output in depfile">;
390def MV : Flag<["-"], "MV">, Group<M_Group>, Flags<[CC1Option]>,
391    HelpText<"Use NMake/Jom format for the depfile">;
392def Mach : Flag<["-"], "Mach">, Group<Link_Group>;
393def O0 : Flag<["-"], "O0">, Group<O_Group>, Flags<[CC1Option, HelpHidden]>;
394def O4 : Flag<["-"], "O4">, Group<O_Group>, Flags<[CC1Option, HelpHidden]>;
395def ObjCXX : Flag<["-"], "ObjC++">, Flags<[DriverOption]>,
396  HelpText<"Treat source input files as Objective-C++ inputs">;
397def ObjC : Flag<["-"], "ObjC">, Flags<[DriverOption]>,
398  HelpText<"Treat source input files as Objective-C inputs">;
399def O : Joined<["-"], "O">, Group<O_Group>, Flags<[CC1Option]>;
400def O_flag : Flag<["-"], "O">, Flags<[CC1Option]>, Alias<O>, AliasArgs<["2"]>;
401def Ofast : Joined<["-"], "Ofast">, Group<O_Group>, Flags<[CC1Option]>;
402def P : Flag<["-"], "P">, Flags<[CC1Option]>, Group<Preprocessor_Group>,
403  HelpText<"Disable linemarker output in -E mode">;
404def Qy : Flag<["-"], "Qy">, Flags<[CC1Option]>,
405  HelpText<"Emit metadata containing compiler name and version">;
406def Qn : Flag<["-"], "Qn">, Flags<[CC1Option]>,
407  HelpText<"Do not emit metadata containing compiler name and version">;
408def : Flag<["-"], "fident">, Group<f_Group>, Alias<Qy>, Flags<[CC1Option]>;
409def : Flag<["-"], "fno-ident">, Group<f_Group>, Alias<Qn>, Flags<[CC1Option]>;
410def Qunused_arguments : Flag<["-"], "Qunused-arguments">, Flags<[DriverOption, CoreOption]>,
411  HelpText<"Don't emit warning for unused driver arguments">;
412def Q : Flag<["-"], "Q">, IgnoredGCCCompat;
413def Rpass_EQ : Joined<["-"], "Rpass=">, Group<R_value_Group>, Flags<[CC1Option]>,
414  HelpText<"Report transformations performed by optimization passes whose "
415           "name matches the given POSIX regular expression">;
416def Rpass_missed_EQ : Joined<["-"], "Rpass-missed=">, Group<R_value_Group>,
417  Flags<[CC1Option]>,
418  HelpText<"Report missed transformations by optimization passes whose "
419           "name matches the given POSIX regular expression">;
420def Rpass_analysis_EQ : Joined<["-"], "Rpass-analysis=">, Group<R_value_Group>,
421  Flags<[CC1Option]>,
422  HelpText<"Report transformation analysis from optimization passes whose "
423           "name matches the given POSIX regular expression">;
424def R_Joined : Joined<["-"], "R">, Group<R_Group>, Flags<[CC1Option, CoreOption]>,
425  MetaVarName<"<remark>">, HelpText<"Enable the specified remark">;
426def S : Flag<["-"], "S">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
427  HelpText<"Only run preprocess and compilation steps">;
428def Tbss : JoinedOrSeparate<["-"], "Tbss">, Group<T_Group>,
429  MetaVarName<"<addr>">, HelpText<"Set starting address of BSS to <addr>">;
430def Tdata : JoinedOrSeparate<["-"], "Tdata">, Group<T_Group>,
431  MetaVarName<"<addr>">, HelpText<"Set starting address of DATA to <addr>">;
432def Ttext : JoinedOrSeparate<["-"], "Ttext">, Group<T_Group>,
433  MetaVarName<"<addr>">, HelpText<"Set starting address of TEXT to <addr>">;
434def T : JoinedOrSeparate<["-"], "T">, Group<T_Group>,
435  MetaVarName<"<script>">, HelpText<"Specify <script> as linker script">;
436def U : JoinedOrSeparate<["-"], "U">, Group<Preprocessor_Group>,
437  Flags<[CC1Option]>, MetaVarName<"<macro>">, HelpText<"Undefine macro <macro>">;
438def V : JoinedOrSeparate<["-"], "V">, Flags<[DriverOption, Unsupported]>;
439def Wa_COMMA : CommaJoined<["-"], "Wa,">,
440  HelpText<"Pass the comma separated arguments in <arg> to the assembler">,
441  MetaVarName<"<arg>">;
442def Wall : Flag<["-"], "Wall">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
443def WCL4 : Flag<["-"], "WCL4">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
444def Wdeprecated : Flag<["-"], "Wdeprecated">, Group<W_Group>, Flags<[CC1Option]>,
445  HelpText<"Enable warnings for deprecated constructs and define __DEPRECATED">;
446def Wno_deprecated : Flag<["-"], "Wno-deprecated">, Group<W_Group>, Flags<[CC1Option]>;
447def Wl_COMMA : CommaJoined<["-"], "Wl,">, Flags<[LinkerInput, RenderAsInput]>,
448  HelpText<"Pass the comma separated arguments in <arg> to the linker">,
449  MetaVarName<"<arg>">, Group<Link_Group>;
450// FIXME: This is broken; these should not be Joined arguments.
451def Wno_nonportable_cfstrings : Joined<["-"], "Wno-nonportable-cfstrings">, Group<W_Group>,
452  Flags<[CC1Option]>;
453def Wnonportable_cfstrings : Joined<["-"], "Wnonportable-cfstrings">, Group<W_Group>,
454  Flags<[CC1Option]>;
455def Wp_COMMA : CommaJoined<["-"], "Wp,">,
456  HelpText<"Pass the comma separated arguments in <arg> to the preprocessor">,
457  MetaVarName<"<arg>">, Group<Preprocessor_Group>;
458def Wwrite_strings : Flag<["-"], "Wwrite-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
459def Wno_write_strings : Flag<["-"], "Wno-write-strings">, Group<W_Group>, Flags<[CC1Option, HelpHidden]>;
460def W_Joined : Joined<["-"], "W">, Group<W_Group>, Flags<[CC1Option, CoreOption]>,
461  MetaVarName<"<warning>">, HelpText<"Enable the specified warning">;
462def Xanalyzer : Separate<["-"], "Xanalyzer">,
463  HelpText<"Pass <arg> to the static analyzer">, MetaVarName<"<arg>">,
464  Group<StaticAnalyzer_Group>;
465def Xarch__ : JoinedAndSeparate<["-"], "Xarch_">, Flags<[DriverOption]>;
466def Xassembler : Separate<["-"], "Xassembler">,
467  HelpText<"Pass <arg> to the assembler">, MetaVarName<"<arg>">,
468  Group<CompileOnly_Group>;
469def Xclang : Separate<["-"], "Xclang">,
470  HelpText<"Pass <arg> to the clang compiler">, MetaVarName<"<arg>">,
471  Flags<[DriverOption, CoreOption]>, Group<CompileOnly_Group>;
472def Xcuda_fatbinary : Separate<["-"], "Xcuda-fatbinary">,
473  HelpText<"Pass <arg> to fatbinary invocation">, MetaVarName<"<arg>">;
474def Xcuda_ptxas : Separate<["-"], "Xcuda-ptxas">,
475  HelpText<"Pass <arg> to the ptxas assembler">, MetaVarName<"<arg>">;
476def Xopenmp_target : Separate<["-"], "Xopenmp-target">,
477  HelpText<"Pass <arg> to the target offloading toolchain.">, MetaVarName<"<arg>">;
478def Xopenmp_target_EQ : JoinedAndSeparate<["-"], "Xopenmp-target=">,
479  HelpText<"Pass <arg> to the target offloading toolchain identified by <triple>.">,
480  MetaVarName<"<triple> <arg>">;
481def z : Separate<["-"], "z">, Flags<[LinkerInput, RenderAsInput]>,
482  HelpText<"Pass -z <arg> to the linker">, MetaVarName<"<arg>">,
483  Group<Link_Group>;
484def Xlinker : Separate<["-"], "Xlinker">, Flags<[LinkerInput, RenderAsInput]>,
485  HelpText<"Pass <arg> to the linker">, MetaVarName<"<arg>">,
486  Group<Link_Group>;
487def Xpreprocessor : Separate<["-"], "Xpreprocessor">, Group<Preprocessor_Group>,
488  HelpText<"Pass <arg> to the preprocessor">, MetaVarName<"<arg>">;
489def X_Flag : Flag<["-"], "X">, Group<Link_Group>;
490def X_Joined : Joined<["-"], "X">, IgnoredGCCCompat;
491def Z_Flag : Flag<["-"], "Z">, Group<Link_Group>;
492// FIXME: All we do with this is reject it. Remove.
493def Z_Joined : Joined<["-"], "Z">;
494def all__load : Flag<["-"], "all_load">;
495def allowable__client : Separate<["-"], "allowable_client">;
496def ansi : Flag<["-", "--"], "ansi">;
497def arch__errors__fatal : Flag<["-"], "arch_errors_fatal">;
498def arch : Separate<["-"], "arch">, Flags<[DriverOption]>;
499def arch__only : Separate<["-"], "arch_only">;
500def a : Joined<["-"], "a">;
501def autocomplete : Joined<["--"], "autocomplete=">;
502def bind__at__load : Flag<["-"], "bind_at_load">;
503def bundle__loader : Separate<["-"], "bundle_loader">;
504def bundle : Flag<["-"], "bundle">;
505def b : JoinedOrSeparate<["-"], "b">, Flags<[Unsupported]>;
506def cl_opt_disable : Flag<["-"], "cl-opt-disable">, Group<opencl_Group>, Flags<[CC1Option]>,
507  HelpText<"OpenCL only. This option disables all optimizations. By default optimizations are enabled.">;
508def cl_strict_aliasing : Flag<["-"], "cl-strict-aliasing">, Group<opencl_Group>, Flags<[CC1Option]>,
509  HelpText<"OpenCL only. This option is added for compatibility with OpenCL 1.0.">;
510def cl_single_precision_constant : Flag<["-"], "cl-single-precision-constant">, Group<opencl_Group>, Flags<[CC1Option]>,
511  HelpText<"OpenCL only. Treat double precision floating-point constant as single precision constant.">;
512def cl_finite_math_only : Flag<["-"], "cl-finite-math-only">, Group<opencl_Group>, Flags<[CC1Option]>,
513  HelpText<"OpenCL only. Allow floating-point optimizations that assume arguments and results are not NaNs or +-Inf.">;
514def cl_kernel_arg_info : Flag<["-"], "cl-kernel-arg-info">, Group<opencl_Group>, Flags<[CC1Option]>,
515  HelpText<"OpenCL only. Generate kernel argument metadata.">;
516def cl_unsafe_math_optimizations : Flag<["-"], "cl-unsafe-math-optimizations">, Group<opencl_Group>, Flags<[CC1Option]>,
517  HelpText<"OpenCL only. Allow unsafe floating-point optimizations.  Also implies -cl-no-signed-zeros and -cl-mad-enable.">;
518def cl_fast_relaxed_math : Flag<["-"], "cl-fast-relaxed-math">, Group<opencl_Group>, Flags<[CC1Option]>,
519  HelpText<"OpenCL only. Sets -cl-finite-math-only and -cl-unsafe-math-optimizations, and defines __FAST_RELAXED_MATH__.">;
520def cl_mad_enable : Flag<["-"], "cl-mad-enable">, Group<opencl_Group>, Flags<[CC1Option]>,
521  HelpText<"OpenCL only. Allow use of less precise MAD computations in the generated binary.">;
522def cl_no_signed_zeros : Flag<["-"], "cl-no-signed-zeros">, Group<opencl_Group>, Flags<[CC1Option]>,
523  HelpText<"OpenCL only. Allow use of less precise no signed zeros computations in the generated binary.">;
524def cl_std_EQ : Joined<["-"], "cl-std=">, Group<opencl_Group>, Flags<[CC1Option]>,
525  HelpText<"OpenCL language standard to compile for.">, Values<"cl,CL,cl1.1,CL1.1,cl1.2,CL1.2,cl2.0,CL2.0,clc++,CLC++">;
526def cl_denorms_are_zero : Flag<["-"], "cl-denorms-are-zero">, Group<opencl_Group>, Flags<[CC1Option]>,
527  HelpText<"OpenCL only. Allow denormals to be flushed to zero.">;
528def cl_fp32_correctly_rounded_divide_sqrt : Flag<["-"], "cl-fp32-correctly-rounded-divide-sqrt">, Group<opencl_Group>, Flags<[CC1Option]>,
529  HelpText<"OpenCL only. Specify that single precision floating-point divide and sqrt used in the program source are correctly rounded.">;
530def cl_uniform_work_group_size : Flag<["-"], "cl-uniform-work-group-size">, Group<opencl_Group>, Flags<[CC1Option]>,
531  HelpText<"OpenCL only. Defines that the global work-size be a multiple of the work-group size specified to clEnqueueNDRangeKernel">;
532def client__name : JoinedOrSeparate<["-"], "client_name">;
533def combine : Flag<["-", "--"], "combine">, Flags<[DriverOption, Unsupported]>;
534def compatibility__version : JoinedOrSeparate<["-"], "compatibility_version">;
535def config : Separate<["--"], "config">, Flags<[DriverOption]>,
536  HelpText<"Specifies configuration file">;
537def config_system_dir_EQ : Joined<["--"], "config-system-dir=">, Flags<[DriverOption, HelpHidden]>,
538  HelpText<"System directory for configuration files">;
539def config_user_dir_EQ : Joined<["--"], "config-user-dir=">, Flags<[DriverOption, HelpHidden]>,
540  HelpText<"User directory for configuration files">;
541def coverage : Flag<["-", "--"], "coverage">, Flags<[CoreOption]>;
542def cpp_precomp : Flag<["-"], "cpp-precomp">, Group<clang_ignored_f_Group>;
543def current__version : JoinedOrSeparate<["-"], "current_version">;
544def cxx_isystem : JoinedOrSeparate<["-"], "cxx-isystem">, Group<clang_i_Group>,
545  HelpText<"Add directory to the C++ SYSTEM include search path">, Flags<[CC1Option]>,
546  MetaVarName<"<directory>">;
547def c : Flag<["-"], "c">, Flags<[DriverOption]>, Group<Action_Group>,
548  HelpText<"Only run preprocess, compile, and assemble steps">;
549def fconvergent_functions : Flag<["-"], "fconvergent-functions">, Group<f_Group>, Flags<[CC1Option]>,
550  HelpText<"Assume functions may be convergent">;
551
552def cuda_device_only : Flag<["--"], "cuda-device-only">,
553  HelpText<"Compile CUDA code for device only">;
554def cuda_host_only : Flag<["--"], "cuda-host-only">,
555  HelpText<"Compile CUDA code for host only.  Has no effect on non-CUDA "
556           "compilations.">;
557def cuda_compile_host_device : Flag<["--"], "cuda-compile-host-device">,
558  HelpText<"Compile CUDA code for both host and device (default).  Has no "
559           "effect on non-CUDA compilations.">;
560def cuda_include_ptx_EQ : Joined<["--"], "cuda-include-ptx=">, Flags<[DriverOption]>,
561  HelpText<"Include PTX for the following GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.">;
562def no_cuda_include_ptx_EQ : Joined<["--"], "no-cuda-include-ptx=">, Flags<[DriverOption]>,
563  HelpText<"Do not include PTX for the following GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.">;
564def cuda_gpu_arch_EQ : Joined<["--"], "cuda-gpu-arch=">, Flags<[DriverOption]>,
565  HelpText<"CUDA GPU architecture (e.g. sm_35).  May be specified more than once.">;
566def hip_link : Flag<["--"], "hip-link">,
567  HelpText<"Link clang-offload-bundler bundles for HIP">;
568def no_cuda_gpu_arch_EQ : Joined<["--"], "no-cuda-gpu-arch=">, Flags<[DriverOption]>,
569  HelpText<"Remove GPU architecture (e.g. sm_35) from the list of GPUs to compile for. "
570           "'all' resets the list to its default value.">;
571def cuda_noopt_device_debug : Flag<["--"], "cuda-noopt-device-debug">,
572  HelpText<"Enable device-side debug info generation. Disables ptxas optimizations.">;
573def no_cuda_version_check : Flag<["--"], "no-cuda-version-check">,
574  HelpText<"Don't error out if the detected version of the CUDA install is "
575           "too low for the requested CUDA gpu architecture.">;
576def no_cuda_noopt_device_debug : Flag<["--"], "no-cuda-noopt-device-debug">;
577def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>,
578  HelpText<"CUDA installation path">;
579def cuda_path_ignore_env : Flag<["--"], "cuda-path-ignore-env">, Group<i_Group>,
580  HelpText<"Ignore environment variables to detect CUDA installation">;
581def ptxas_path_EQ : Joined<["--"], "ptxas-path=">, Group<i_Group>,
582  HelpText<"Path to ptxas (used for compiling CUDA code)">;
583def fcuda_flush_denormals_to_zero : Flag<["-"], "fcuda-flush-denormals-to-zero">,
584  Flags<[CC1Option]>, HelpText<"Flush denormal floating point values to zero in CUDA device mode.">;
585def fno_cuda_flush_denormals_to_zero : Flag<["-"], "fno-cuda-flush-denormals-to-zero">;
586def fcuda_approx_transcendentals : Flag<["-"], "fcuda-approx-transcendentals">,
587  Flags<[CC1Option]>, HelpText<"Use approximate transcendental functions">;
588def fno_cuda_approx_transcendentals : Flag<["-"], "fno-cuda-approx-transcendentals">;
589def fgpu_rdc : Flag<["-"], "fgpu-rdc">, Flags<[CC1Option]>,
590  HelpText<"Generate relocatable device code, also known as separate compilation mode.">;
591def fno_gpu_rdc : Flag<["-"], "fno-gpu-rdc">;
592def : Flag<["-"], "fcuda-rdc">, Alias<fgpu_rdc>;
593def : Flag<["-"], "fno-cuda-rdc">, Alias<fno_gpu_rdc>;
594def fcuda_short_ptr : Flag<["-"], "fcuda-short-ptr">, Flags<[CC1Option]>,
595  HelpText<"Use 32-bit pointers for accessing const/local/shared address spaces.">;
596def fno_cuda_short_ptr : Flag<["-"], "fno-cuda-short-ptr">;
597def hip_device_lib_path_EQ : Joined<["--"], "hip-device-lib-path=">, Group<Link_Group>,
598  HelpText<"HIP device library path">;
599def hip_device_lib_EQ : Joined<["--"], "hip-device-lib=">, Group<Link_Group>,
600  HelpText<"HIP device library">;
601def fhip_dump_offload_linker_script : Flag<["-"], "fhip-dump-offload-linker-script">,
602  Group<f_Group>, Flags<[NoArgumentUnused, HelpHidden]>;
603def fhip_new_launch_api : Flag<["-"], "fhip-new-launch-api">,
604  Flags<[CC1Option]>, HelpText<"Use new kernel launching API for HIP.">;
605def fno_hip_new_launch_api : Flag<["-"], "fno-hip-new-launch-api">;
606def fgpu_allow_device_init : Flag<["-"], "fgpu-allow-device-init">,
607  Flags<[CC1Option]>, HelpText<"Allow device side init function in HIP">;
608def fno_gpu_allow_device_init : Flag<["-"], "fno-gpu-allow-device-init">;
609def gpu_max_threads_per_block_EQ : Joined<["--"], "gpu-max-threads-per-block=">,
610  Flags<[CC1Option]>,
611  HelpText<"Default max threads per block for kernel launch bounds for HIP">;
612def libomptarget_nvptx_path_EQ : Joined<["--"], "libomptarget-nvptx-path=">, Group<i_Group>,
613  HelpText<"Path to libomptarget-nvptx libraries">;
614def dD : Flag<["-"], "dD">, Group<d_Group>, Flags<[CC1Option]>,
615  HelpText<"Print macro definitions in -E mode in addition to normal output">;
616def dI : Flag<["-"], "dI">, Group<d_Group>, Flags<[CC1Option]>,
617  HelpText<"Print include directives in -E mode in addition to normal output">;
618def dM : Flag<["-"], "dM">, Group<d_Group>, Flags<[CC1Option]>,
619  HelpText<"Print macro definitions in -E mode instead of normal output">;
620def dead__strip : Flag<["-"], "dead_strip">;
621def dependency_file : Separate<["-"], "dependency-file">, Flags<[CC1Option]>,
622  HelpText<"Filename (or -) to write dependency output to">;
623def dependency_dot : Separate<["-"], "dependency-dot">, Flags<[CC1Option]>,
624  HelpText<"Filename to write DOT-formatted header dependencies to">;
625def module_dependency_dir : Separate<["-"], "module-dependency-dir">,
626  Flags<[CC1Option]>, HelpText<"Directory to dump module dependencies to">;
627def dumpmachine : Flag<["-"], "dumpmachine">;
628def dumpspecs : Flag<["-"], "dumpspecs">, Flags<[Unsupported]>;
629def dumpversion : Flag<["-"], "dumpversion">;
630def dylib__file : Separate<["-"], "dylib_file">;
631def dylinker__install__name : JoinedOrSeparate<["-"], "dylinker_install_name">;
632def dylinker : Flag<["-"], "dylinker">;
633def dynamiclib : Flag<["-"], "dynamiclib">;
634def dynamic : Flag<["-"], "dynamic">, Flags<[NoArgumentUnused]>;
635def d_Flag : Flag<["-"], "d">, Group<d_Group>;
636def d_Joined : Joined<["-"], "d">, Group<d_Group>;
637def emit_ast : Flag<["-"], "emit-ast">,
638  HelpText<"Emit Clang AST files for source inputs">;
639def emit_llvm : Flag<["-"], "emit-llvm">, Flags<[CC1Option]>, Group<Action_Group>,
640  HelpText<"Use the LLVM representation for assembler and object files">;
641def emit_interface_stubs : Flag<["-"], "emit-interface-stubs">, Flags<[CC1Option]>, Group<Action_Group>,
642  HelpText<"Generate Inteface Stub Files.">;
643def emit_merged_ifs : Flag<["-"], "emit-merged-ifs">,
644  Flags<[CC1Option]>, Group<Action_Group>,
645  HelpText<"Generate Interface Stub Files, emit merged text not binary.">;
646def interface_stub_version_EQ : JoinedOrSeparate<["-"], "interface-stub-version=">, Flags<[CC1Option]>;
647def exported__symbols__list : Separate<["-"], "exported_symbols_list">;
648def e : JoinedOrSeparate<["-"], "e">, Group<Link_Group>;
649def fPIC : Flag<["-"], "fPIC">, Group<f_Group>;
650def fno_PIC : Flag<["-"], "fno-PIC">, Group<f_Group>;
651def fPIE : Flag<["-"], "fPIE">, Group<f_Group>;
652def fno_PIE : Flag<["-"], "fno-PIE">, Group<f_Group>;
653def faccess_control : Flag<["-"], "faccess-control">, Group<f_Group>;
654def falign_functions : Flag<["-"], "falign-functions">, Group<f_Group>;
655def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<f_Group>;
656def fno_align_functions: Flag<["-"], "fno-align-functions">, Group<f_Group>;
657def fallow_unsupported : Flag<["-"], "fallow-unsupported">, Group<f_Group>;
658def fapple_kext : Flag<["-"], "fapple-kext">, Group<f_Group>, Flags<[CC1Option]>,
659  HelpText<"Use Apple's kernel extensions ABI">;
660def fapple_pragma_pack : Flag<["-"], "fapple-pragma-pack">, Group<f_Group>, Flags<[CC1Option]>,
661  HelpText<"Enable Apple gcc-compatible #pragma pack handling">;
662def shared_libsan : Flag<["-"], "shared-libsan">,
663  HelpText<"Dynamically link the sanitizer runtime">;
664def static_libsan : Flag<["-"], "static-libsan">,
665  HelpText<"Statically link the sanitizer runtime">;
666def : Flag<["-"], "shared-libasan">, Alias<shared_libsan>;
667def fasm : Flag<["-"], "fasm">, Group<f_Group>;
668
669def fasm_blocks : Flag<["-"], "fasm-blocks">, Group<f_Group>, Flags<[CC1Option]>;
670def fno_asm_blocks : Flag<["-"], "fno-asm-blocks">, Group<f_Group>;
671
672def fassume_sane_operator_new : Flag<["-"], "fassume-sane-operator-new">, Group<f_Group>;
673def fastcp : Flag<["-"], "fastcp">, Group<f_Group>;
674def fastf : Flag<["-"], "fastf">, Group<f_Group>;
675def fast : Flag<["-"], "fast">, Group<f_Group>;
676def fasynchronous_unwind_tables : Flag<["-"], "fasynchronous-unwind-tables">, Group<f_Group>;
677
678def fdouble_square_bracket_attributes : Flag<[ "-" ], "fdouble-square-bracket-attributes">,
679  Group<f_Group>, Flags<[DriverOption, CC1Option]>,
680  HelpText<"Enable '[[]]' attributes in all C and C++ language modes">;
681def fno_double_square_bracket_attributes : Flag<[ "-" ], "fno-double-square-bracket-attributes">,
682  Group<f_Group>, Flags<[DriverOption, CC1Option]>,
683  HelpText<"Disable '[[]]' attributes in all C and C++ language modes">;
684
685def fautolink : Flag <["-"], "fautolink">, Group<f_Group>;
686def fno_autolink : Flag <["-"], "fno-autolink">, Group<f_Group>,
687  Flags<[DriverOption, CC1Option]>,
688  HelpText<"Disable generation of linker directives for automatic library linking">;
689
690// C++ Coroutines TS
691def fcoroutines_ts : Flag <["-"], "fcoroutines-ts">, Group<f_Group>,
692  Flags<[DriverOption, CC1Option]>,
693  HelpText<"Enable support for the C++ Coroutines TS">;
694def fno_coroutines_ts : Flag <["-"], "fno-coroutines-ts">, Group<f_Group>,
695  Flags<[DriverOption]>;
696
697def fembed_bitcode_EQ : Joined<["-"], "fembed-bitcode=">,
698    Group<f_Group>, Flags<[DriverOption, CC1Option, CC1AsOption]>, MetaVarName<"<option>">,
699    HelpText<"Embed LLVM bitcode (option: off, all, bitcode, marker)">;
700def fembed_bitcode : Flag<["-"], "fembed-bitcode">, Group<f_Group>,
701  Alias<fembed_bitcode_EQ>, AliasArgs<["all"]>,
702  HelpText<"Embed LLVM IR bitcode as data">;
703def fembed_bitcode_marker : Flag<["-"], "fembed-bitcode-marker">,
704  Alias<fembed_bitcode_EQ>, AliasArgs<["marker"]>,
705  HelpText<"Embed placeholder LLVM IR data as a marker">;
706def fgnu_inline_asm : Flag<["-"], "fgnu-inline-asm">, Group<f_Group>, Flags<[DriverOption]>;
707def fno_gnu_inline_asm : Flag<["-"], "fno-gnu-inline-asm">, Group<f_Group>,
708  Flags<[DriverOption, CC1Option]>,
709  HelpText<"Disable GNU style inline asm">;
710
711def fprofile_sample_use : Flag<["-"], "fprofile-sample-use">, Group<f_Group>,
712    Flags<[CoreOption]>;
713def fno_profile_sample_use : Flag<["-"], "fno-profile-sample-use">, Group<f_Group>,
714    Flags<[CoreOption]>;
715def fprofile_sample_use_EQ : Joined<["-"], "fprofile-sample-use=">,
716    Group<f_Group>, Flags<[DriverOption, CC1Option]>,
717    HelpText<"Enable sample-based profile guided optimizations">;
718def fprofile_sample_accurate : Flag<["-"], "fprofile-sample-accurate">,
719    Group<f_Group>, Flags<[DriverOption, CC1Option]>,
720    HelpText<"Specifies that the sample profile is accurate">,
721    DocBrief<[{Specifies that the sample profile is accurate. If the sample
722               profile is accurate, callsites without profile samples are marked
723               as cold. Otherwise, treat callsites without profile samples as if
724               we have no profile}]>;
725def fno_profile_sample_accurate : Flag<["-"], "fno-profile-sample-accurate">,
726  Group<f_Group>, Flags<[DriverOption]>;
727def fauto_profile : Flag<["-"], "fauto-profile">, Group<f_Group>,
728    Alias<fprofile_sample_use>;
729def fno_auto_profile : Flag<["-"], "fno-auto-profile">, Group<f_Group>,
730    Alias<fno_profile_sample_use>;
731def fauto_profile_EQ : Joined<["-"], "fauto-profile=">,
732    Alias<fprofile_sample_use_EQ>;
733def fauto_profile_accurate : Flag<["-"], "fauto-profile-accurate">,
734    Group<f_Group>, Alias<fprofile_sample_accurate>;
735def fno_auto_profile_accurate : Flag<["-"], "fno-auto-profile-accurate">,
736    Group<f_Group>, Alias<fno_profile_sample_accurate>;
737def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">,
738    Group<f_Group>, Flags<[CC1Option, CC1AsOption, CoreOption]>,
739    HelpText<"The compilation directory to embed in the debug info.">;
740def fdebug_compilation_dir_EQ : Joined<["-"], "fdebug-compilation-dir=">,
741    Group<f_Group>, Flags<[CC1Option, CC1AsOption, CoreOption]>,
742    Alias<fdebug_compilation_dir>;
743def fdebug_info_for_profiling : Flag<["-"], "fdebug-info-for-profiling">,
744    Group<f_Group>, Flags<[CC1Option]>,
745    HelpText<"Emit extra debug info to make sample profile more accurate.">;
746def fno_debug_info_for_profiling : Flag<["-"], "fno-debug-info-for-profiling">,
747    Group<f_Group>, Flags<[DriverOption]>,
748    HelpText<"Do not emit extra debug info for sample profiler.">;
749def fprofile_instr_generate : Flag<["-"], "fprofile-instr-generate">,
750    Group<f_Group>, Flags<[CoreOption]>,
751    HelpText<"Generate instrumented code to collect execution counts into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)">;
752def fprofile_instr_generate_EQ : Joined<["-"], "fprofile-instr-generate=">,
753    Group<f_Group>, Flags<[CoreOption]>, MetaVarName<"<file>">,
754    HelpText<"Generate instrumented code to collect execution counts into <file> (overridden by LLVM_PROFILE_FILE env var)">;
755def fprofile_instr_use : Flag<["-"], "fprofile-instr-use">, Group<f_Group>,
756    Flags<[CoreOption]>;
757def fprofile_instr_use_EQ : Joined<["-"], "fprofile-instr-use=">,
758    Group<f_Group>, Flags<[CoreOption]>,
759    HelpText<"Use instrumentation data for profile-guided optimization">;
760def fprofile_remapping_file_EQ : Joined<["-"], "fprofile-remapping-file=">,
761    Group<f_Group>, Flags<[CC1Option, CoreOption]>, MetaVarName<"<file>">,
762    HelpText<"Use the remappings described in <file> to match the profile data against names in the program">;
763def fprofile_remapping_file : Separate<["-"], "fprofile-remapping-file">,
764    Group<f_Group>, Flags<[CoreOption]>, Alias<fprofile_remapping_file_EQ>;
765def fcoverage_mapping : Flag<["-"], "fcoverage-mapping">,
766    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
767    HelpText<"Generate coverage mapping to enable code coverage analysis">;
768def fno_coverage_mapping : Flag<["-"], "fno-coverage-mapping">,
769    Group<f_Group>, Flags<[DriverOption, CoreOption]>,
770    HelpText<"Disable code coverage analysis">;
771def fprofile_generate : Flag<["-"], "fprofile-generate">,
772    Group<f_Group>, Flags<[CoreOption]>,
773    HelpText<"Generate instrumented code to collect execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
774def fprofile_generate_EQ : Joined<["-"], "fprofile-generate=">,
775    Group<f_Group>, Flags<[CoreOption]>, MetaVarName<"<directory>">,
776    HelpText<"Generate instrumented code to collect execution counts into <directory>/default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
777def fcs_profile_generate : Flag<["-"], "fcs-profile-generate">,
778    Group<f_Group>, Flags<[CoreOption]>,
779    HelpText<"Generate instrumented code to collect context sensitive execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
780def fcs_profile_generate_EQ : Joined<["-"], "fcs-profile-generate=">,
781    Group<f_Group>, Flags<[CoreOption]>, MetaVarName<"<directory>">,
782    HelpText<"Generate instrumented code to collect context sensitive execution counts into <directory>/default.profraw (overridden by LLVM_PROFILE_FILE env var)">;
783def fprofile_use : Flag<["-"], "fprofile-use">, Group<f_Group>,
784    Alias<fprofile_instr_use>;
785def fprofile_use_EQ : Joined<["-"], "fprofile-use=">,
786    Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<pathname>">,
787    HelpText<"Use instrumentation data for profile-guided optimization. If pathname is a directory, it reads from <pathname>/default.profdata. Otherwise, it reads from file <pathname>.">;
788def fno_profile_instr_generate : Flag<["-"], "fno-profile-instr-generate">,
789    Group<f_Group>, Flags<[CoreOption]>,
790    HelpText<"Disable generation of profile instrumentation.">;
791def fno_profile_generate : Flag<["-"], "fno-profile-generate">,
792    Group<f_Group>, Flags<[CoreOption]>,
793    HelpText<"Disable generation of profile instrumentation.">;
794def fno_profile_instr_use : Flag<["-"], "fno-profile-instr-use">,
795    Group<f_Group>, Flags<[CoreOption]>,
796    HelpText<"Disable using instrumentation data for profile-guided optimization">;
797def fno_profile_use : Flag<["-"], "fno-profile-use">,
798    Alias<fno_profile_instr_use>;
799def fprofile_filter_files_EQ : Joined<["-"], "fprofile-filter-files=">,
800    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
801    HelpText<"Instrument only functions from files where names match any regex separated by a semi-colon">;
802def fprofile_exclude_files_EQ : Joined<["-"], "fprofile-exclude-files=">,
803    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
804    HelpText<"Instrument only functions from files where names don't match all the regexes separated by a semi-colon">;
805def forder_file_instrumentation : Flag<["-"], "forder-file-instrumentation">,
806    Group<f_Group>, Flags<[CC1Option, CoreOption]>,
807    HelpText<"Generate instrumented code to collect order file into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)">;
808
809def faddrsig : Flag<["-"], "faddrsig">, Group<f_Group>, Flags<[CoreOption, CC1Option]>,
810  HelpText<"Emit an address-significance table">;
811def fno_addrsig : Flag<["-"], "fno-addrsig">, Group<f_Group>, Flags<[CoreOption]>,
812  HelpText<"Don't emit an address-significance table">;
813def fblocks : Flag<["-"], "fblocks">, Group<f_Group>, Flags<[CoreOption, CC1Option]>,
814  HelpText<"Enable the 'blocks' language feature">;
815def fbootclasspath_EQ : Joined<["-"], "fbootclasspath=">, Group<f_Group>;
816def fborland_extensions : Flag<["-"], "fborland-extensions">, Group<f_Group>, Flags<[CC1Option]>,
817  HelpText<"Accept non-standard constructs supported by the Borland compiler">;
818def fbuiltin : Flag<["-"], "fbuiltin">, Group<f_Group>, Flags<[CoreOption]>;
819def fbuiltin_module_map : Flag <["-"], "fbuiltin-module-map">, Group<f_Group>,
820  Flags<[DriverOption]>, HelpText<"Load the clang builtins module map file.">;
821def fcaret_diagnostics : Flag<["-"], "fcaret-diagnostics">, Group<f_Group>;
822def fclang_abi_compat_EQ : Joined<["-"], "fclang-abi-compat=">, Group<f_clang_Group>,
823  Flags<[CC1Option]>, MetaVarName<"<version>">, Values<"<major>.<minor>,latest">,
824  HelpText<"Attempt to match the ABI of Clang <version>">;
825def fclasspath_EQ : Joined<["-"], "fclasspath=">, Group<f_Group>;
826def fcolor_diagnostics : Flag<["-"], "fcolor-diagnostics">, Group<f_Group>,
827  Flags<[CoreOption, CC1Option]>, HelpText<"Use colors in diagnostics">;
828def fdiagnostics_color : Flag<["-"], "fdiagnostics-color">, Group<f_Group>,
829  Flags<[CoreOption, DriverOption]>;
830def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, Group<f_Group>;
831def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group<f_Group>,
832  Flags<[CoreOption, CC1Option]>, HelpText<"Use ANSI escape codes for diagnostics">;
833def fcomment_block_commands : CommaJoined<["-"], "fcomment-block-commands=">, Group<f_clang_Group>, Flags<[CC1Option]>,
834  HelpText<"Treat each comma separated argument in <arg> as a documentation comment block command">,
835  MetaVarName<"<arg>">;
836def fparse_all_comments : Flag<["-"], "fparse-all-comments">, Group<f_clang_Group>, Flags<[CC1Option]>;
837def frecord_command_line : Flag<["-"], "frecord-command-line">,
838  Group<f_clang_Group>;
839def fno_record_command_line : Flag<["-"], "fno-record-command-line">,
840  Group<f_clang_Group>;
841def : Flag<["-"], "frecord-gcc-switches">, Alias<frecord_command_line>;
842def : Flag<["-"], "fno-record-gcc-switches">, Alias<fno_record_command_line>;
843def fcommon : Flag<["-"], "fcommon">, Group<f_Group>;
844def fcompile_resource_EQ : Joined<["-"], "fcompile-resource=">, Group<f_Group>;
845def fcomplete_member_pointers : Flag<["-"], "fcomplete-member-pointers">, Group<f_clang_Group>,
846   Flags<[CoreOption, CC1Option]>,
847   HelpText<"Require member pointer base types to be complete if they would be significant under the Microsoft ABI">;
848def fno_complete_member_pointers : Flag<["-"], "fno-complete-member-pointers">, Group<f_clang_Group>,
849   Flags<[CoreOption]>,
850   HelpText<"Do not require member pointer base types to be complete if they would be significant under the Microsoft ABI">;
851def fcf_runtime_abi_EQ : Joined<["-"], "fcf-runtime-abi=">, Group<f_Group>,
852    Flags<[CC1Option]>;
853def fconstant_cfstrings : Flag<["-"], "fconstant-cfstrings">, Group<f_Group>;
854def fconstant_string_class_EQ : Joined<["-"], "fconstant-string-class=">, Group<f_Group>;
855def fconstexpr_depth_EQ : Joined<["-"], "fconstexpr-depth=">, Group<f_Group>;
856def fconstexpr_steps_EQ : Joined<["-"], "fconstexpr-steps=">, Group<f_Group>;
857def fexperimental_new_constant_interpreter : Flag<["-"], "fexperimental-new-constant-interpreter">, Group<f_Group>,
858  HelpText<"Enable the experimental new constant interpreter">, Flags<[CC1Option]>;
859def fconstexpr_backtrace_limit_EQ : Joined<["-"], "fconstexpr-backtrace-limit=">,
860                                    Group<f_Group>;
861def fno_crash_diagnostics : Flag<["-"], "fno-crash-diagnostics">, Group<f_clang_Group>, Flags<[NoArgumentUnused, CoreOption]>,
862  HelpText<"Disable auto-generation of preprocessed source files and a script for reproduction during a clang crash">;
863def fcrash_diagnostics_dir : Joined<["-"], "fcrash-diagnostics-dir=">, Group<f_clang_Group>, Flags<[NoArgumentUnused, CoreOption]>;
864def fcreate_profile : Flag<["-"], "fcreate-profile">, Group<f_Group>;
865def fcxx_exceptions: Flag<["-"], "fcxx-exceptions">, Group<f_Group>,
866  HelpText<"Enable C++ exceptions">, Flags<[CC1Option]>;
867def fcxx_modules : Flag <["-"], "fcxx-modules">, Group<f_Group>,
868  Flags<[DriverOption]>;
869def fdebug_pass_arguments : Flag<["-"], "fdebug-pass-arguments">, Group<f_Group>;
870def fdebug_pass_structure : Flag<["-"], "fdebug-pass-structure">, Group<f_Group>;
871def fdepfile_entry : Joined<["-"], "fdepfile-entry=">,
872    Group<f_clang_Group>, Flags<[CC1Option]>;
873def fdiagnostics_fixit_info : Flag<["-"], "fdiagnostics-fixit-info">, Group<f_clang_Group>;
874def fdiagnostics_parseable_fixits : Flag<["-"], "fdiagnostics-parseable-fixits">, Group<f_clang_Group>,
875    Flags<[CoreOption, CC1Option]>, HelpText<"Print fix-its in machine parseable form">;
876def fdiagnostics_print_source_range_info : Flag<["-"], "fdiagnostics-print-source-range-info">,
877    Group<f_clang_Group>,  Flags<[CC1Option]>,
878    HelpText<"Print source range spans in numeric form">;
879def fdiagnostics_show_hotness : Flag<["-"], "fdiagnostics-show-hotness">, Group<f_Group>,
880    Flags<[CC1Option]>, HelpText<"Enable profile hotness information in diagnostic line">;
881def fdiagnostics_hotness_threshold_EQ : Joined<["-"], "fdiagnostics-hotness-threshold=">,
882    Group<f_Group>, Flags<[CC1Option]>, MetaVarName<"<number>">,
883    HelpText<"Prevent optimization remarks from being output if they do not have at least this profile count">;
884def fdiagnostics_show_option : Flag<["-"], "fdiagnostics-show-option">, Group<f_Group>,
885    Flags<[CC1Option]>, HelpText<"Print option name with mappable diagnostics">;
886def fdiagnostics_show_note_include_stack : Flag<["-"], "fdiagnostics-show-note-include-stack">,
887    Group<f_Group>,  Flags<[CC1Option]>, HelpText<"Display include stacks for diagnostic notes">;
888def fdiagnostics_format_EQ : Joined<["-"], "fdiagnostics-format=">, Group<f_clang_Group>;
889def fdiagnostics_show_category_EQ : Joined<["-"], "fdiagnostics-show-category=">, Group<f_clang_Group>;
890def fdiagnostics_show_template_tree : Flag<["-"], "fdiagnostics-show-template-tree">,
891    Group<f_Group>, Flags<[CC1Option]>,
892    HelpText<"Print a template comparison tree for differing templates">;
893def fdeclspec : Flag<["-"], "fdeclspec">, Group<f_clang_Group>,
894  HelpText<"Allow __declspec as a keyword">, Flags<[CC1Option]>;
895def fdiscard_value_names : Flag<["-"], "fdiscard-value-names">, Group<f_clang_Group>,
896  HelpText<"Discard value names in LLVM IR">, Flags<[DriverOption]>;
897def fno_discard_value_names : Flag<["-"], "fno-discard-value-names">, Group<f_clang_Group>,
898  HelpText<"Do not discard value names in LLVM IR">, Flags<[DriverOption]>;
899def fdollars_in_identifiers : Flag<["-"], "fdollars-in-identifiers">, Group<f_Group>,
900  HelpText<"Allow '$' in identifiers">, Flags<[CC1Option]>;
901def fdwarf2_cfi_asm : Flag<["-"], "fdwarf2-cfi-asm">, Group<clang_ignored_f_Group>;
902def fno_dwarf2_cfi_asm : Flag<["-"], "fno-dwarf2-cfi-asm">, Group<clang_ignored_f_Group>;
903def fdwarf_directory_asm : Flag<["-"], "fdwarf-directory-asm">, Group<f_Group>;
904def fno_dwarf_directory_asm : Flag<["-"], "fno-dwarf-directory-asm">, Group<f_Group>, Flags<[CC1Option]>;
905def felide_constructors : Flag<["-"], "felide-constructors">, Group<f_Group>;
906def fno_elide_type : Flag<["-"], "fno-elide-type">, Group<f_Group>,
907    Flags<[CC1Option]>,
908    HelpText<"Do not elide types when printing diagnostics">;
909def feliminate_unused_debug_symbols : Flag<["-"], "feliminate-unused-debug-symbols">, Group<f_Group>;
910def femit_all_decls : Flag<["-"], "femit-all-decls">, Group<f_Group>, Flags<[CC1Option]>,
911  HelpText<"Emit all declarations, even if unused">;
912def femulated_tls : Flag<["-"], "femulated-tls">, Group<f_Group>, Flags<[CC1Option]>,
913  HelpText<"Use emutls functions to access thread_local variables">;
914def fno_emulated_tls : Flag<["-"], "fno-emulated-tls">, Group<f_Group>, Flags<[CC1Option]>;
915def fencoding_EQ : Joined<["-"], "fencoding=">, Group<f_Group>;
916def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>, Flags<[CoreOption]>;
917def fexceptions : Flag<["-"], "fexceptions">, Group<f_Group>, Flags<[CC1Option]>,
918  HelpText<"Enable support for exception handling">;
919def fdwarf_exceptions : Flag<["-"], "fdwarf-exceptions">, Group<f_Group>,
920  Flags<[CC1Option]>, HelpText<"Use DWARF style exceptions">;
921def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, Group<f_Group>,
922  Flags<[CC1Option]>, HelpText<"Use SjLj style exceptions">;
923def fseh_exceptions : Flag<["-"], "fseh-exceptions">, Group<f_Group>,
924  Flags<[CC1Option]>, HelpText<"Use SEH style exceptions">;
925def fwasm_exceptions : Flag<["-"], "fwasm-exceptions">, Group<f_Group>,
926  Flags<[CC1Option]>, HelpText<"Use WebAssembly style exceptions">;
927def fexcess_precision_EQ : Joined<["-"], "fexcess-precision=">,
928    Group<clang_ignored_gcc_optimization_f_Group>;
929def : Flag<["-"], "fexpensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>;
930def : Flag<["-"], "fno-expensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>;
931def fextdirs_EQ : Joined<["-"], "fextdirs=">, Group<f_Group>;
932def : Flag<["-"], "fdefer-pop">, Group<clang_ignored_gcc_optimization_f_Group>;
933def : Flag<["-"], "fno-defer-pop">, Group<clang_ignored_gcc_optimization_f_Group>;
934def : Flag<["-"], "fextended-identifiers">, Group<clang_ignored_f_Group>;
935def : Flag<["-"], "fno-extended-identifiers">, Group<f_Group>, Flags<[Unsupported]>;
936def fhosted : Flag<["-"], "fhosted">, Group<f_Group>;
937def fdenormal_fp_math_EQ : Joined<["-"], "fdenormal-fp-math=">, Group<f_Group>, Flags<[CC1Option]>;
938def ffp_model_EQ : Joined<["-"], "ffp-model=">, Group<f_Group>, Flags<[DriverOption]>,
939  HelpText<"Controls the semantics of floating-point calculations.">;
940def ffp_exception_behavior_EQ : Joined<["-"], "ffp-exception-behavior=">, Group<f_Group>, Flags<[CC1Option]>,
941  HelpText<"Specifies the exception behavior of floating-point operations.">;
942def ffast_math : Flag<["-"], "ffast-math">, Group<f_Group>, Flags<[CC1Option]>,
943  HelpText<"Allow aggressive, lossy floating-point optimizations">;
944def fno_fast_math : Flag<["-"], "fno-fast-math">, Group<f_Group>;
945def fmath_errno : Flag<["-"], "fmath-errno">, Group<f_Group>, Flags<[CC1Option]>,
946  HelpText<"Require math functions to indicate errors by setting errno">;
947def fno_math_errno : Flag<["-"], "fno-math-errno">, Group<f_Group>;
948def fbracket_depth_EQ : Joined<["-"], "fbracket-depth=">, Group<f_Group>, Flags<[CoreOption]>;
949def fsignaling_math : Flag<["-"], "fsignaling-math">, Group<f_Group>;
950def fno_signaling_math : Flag<["-"], "fno-signaling-math">, Group<f_Group>;
951def fjump_tables : Flag<["-"], "fjump-tables">, Group<f_Group>;
952def fno_jump_tables : Flag<["-"], "fno-jump-tables">, Group<f_Group>, Flags<[CC1Option]>,
953  HelpText<"Do not use jump tables for lowering switches">;
954def fforce_enable_int128 : Flag<["-"], "fforce-enable-int128">,
955  Group<f_Group>, Flags<[CC1Option]>,
956  HelpText<"Enable support for int128_t type">;
957def fno_force_enable_int128 : Flag<["-"], "fno-force-enable-int128">,
958  Group<f_Group>, Flags<[CC1Option]>,
959  HelpText<"Disable support for int128_t type">;
960def fkeep_static_consts : Flag<["-"], "fkeep-static-consts">, Group<f_Group>, Flags<[CC1Option]>,
961  HelpText<"Keep static const variables even if unused">;
962def ffixed_point : Flag<["-"], "ffixed-point">, Group<f_Group>,
963                   Flags<[CC1Option]>, HelpText<"Enable fixed point types">;
964def fno_fixed_point : Flag<["-"], "fno-fixed-point">, Group<f_Group>,
965                      HelpText<"Disable fixed point types">;
966def fcxx_static_destructors : Flag<["-"], "fc++-static-destructors">,
967  Group<f_Group>,
968  HelpText<"Enable C++ static destructor registration (the default)">;
969def fno_cxx_static_destructors : Flag<["-"], "fno-c++-static-destructors">,
970  Group<f_Group>,
971  Flags<[CC1Option]>,
972  HelpText<"Disable C++ static destructor registration">;
973def fsymbol_partition_EQ : Joined<["-"], "fsymbol-partition=">, Group<f_Group>,
974  Flags<[CC1Option]>;
975
976// Begin sanitizer flags. These should all be core options exposed in all driver
977// modes.
978let Flags = [CC1Option, CoreOption] in {
979
980def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group<f_clang_Group>,
981                   MetaVarName<"<check>">,
982                   HelpText<"Turn on runtime checks for various forms of undefined "
983                            "or suspicious behavior. See user manual for available checks">;
984def fno_sanitize_EQ : CommaJoined<["-"], "fno-sanitize=">, Group<f_clang_Group>,
985                      Flags<[CoreOption, DriverOption]>;
986def fsanitize_blacklist : Joined<["-"], "fsanitize-blacklist=">,
987                          Group<f_clang_Group>,
988                          HelpText<"Path to blacklist file for sanitizers">;
989def fsanitize_system_blacklist : Joined<["-"], "fsanitize-system-blacklist=">,
990  HelpText<"Path to system blacklist file for sanitizers">,
991  Flags<[CC1Option]>;
992def fno_sanitize_blacklist : Flag<["-"], "fno-sanitize-blacklist">,
993                             Group<f_clang_Group>,
994                             HelpText<"Don't use blacklist file for sanitizers">;
995def fsanitize_coverage
996    : CommaJoined<["-"], "fsanitize-coverage=">,
997      Group<f_clang_Group>,
998      HelpText<"Specify the type of coverage instrumentation for Sanitizers">;
999def fno_sanitize_coverage
1000    : CommaJoined<["-"], "fno-sanitize-coverage=">,
1001      Group<f_clang_Group>, Flags<[CoreOption, DriverOption]>,
1002      HelpText<"Disable specified features of coverage instrumentation for "
1003               "Sanitizers">, Values<"func,bb,edge,indirect-calls,trace-bb,trace-cmp,trace-div,trace-gep,8bit-counters,trace-pc,trace-pc-guard,no-prune,inline-8bit-counters">;
1004def fsanitize_memory_track_origins_EQ : Joined<["-"], "fsanitize-memory-track-origins=">,
1005                                        Group<f_clang_Group>,
1006                                        HelpText<"Enable origins tracking in MemorySanitizer">;
1007def fsanitize_memory_track_origins : Flag<["-"], "fsanitize-memory-track-origins">,
1008                                     Group<f_clang_Group>,
1009                                     HelpText<"Enable origins tracking in MemorySanitizer">;
1010def fno_sanitize_memory_track_origins : Flag<["-"], "fno-sanitize-memory-track-origins">,
1011                                        Group<f_clang_Group>,
1012                                        Flags<[CoreOption, DriverOption]>,
1013                                        HelpText<"Disable origins tracking in MemorySanitizer">;
1014def fsanitize_memory_use_after_dtor : Flag<["-"], "fsanitize-memory-use-after-dtor">,
1015                                     Group<f_clang_Group>,
1016                                     HelpText<"Enable use-after-destroy detection in MemorySanitizer">;
1017def fno_sanitize_memory_use_after_dtor : Flag<["-"], "fno-sanitize-memory-use-after-dtor">,
1018                                     Group<f_clang_Group>,
1019                                     HelpText<"Disable use-after-destroy detection in MemorySanitizer">;
1020def fsanitize_address_field_padding : Joined<["-"], "fsanitize-address-field-padding=">,
1021                                        Group<f_clang_Group>,
1022                                        HelpText<"Level of field padding for AddressSanitizer">;
1023def fsanitize_address_use_after_scope : Flag<["-"], "fsanitize-address-use-after-scope">,
1024                                        Group<f_clang_Group>,
1025                                        HelpText<"Enable use-after-scope detection in AddressSanitizer">;
1026def fno_sanitize_address_use_after_scope : Flag<["-"], "fno-sanitize-address-use-after-scope">,
1027                                           Group<f_clang_Group>,
1028                                           Flags<[CoreOption, DriverOption]>,
1029                                           HelpText<"Disable use-after-scope detection in AddressSanitizer">;
1030def fsanitize_address_poison_custom_array_cookie
1031    : Flag<[ "-" ], "fsanitize-address-poison-custom-array-cookie">,
1032      Group<f_clang_Group>,
1033      HelpText<"Enable poisoning array cookies when using custom operator new[] in AddressSanitizer">;
1034def fno_sanitize_address_poison_custom_array_cookie
1035    : Flag<[ "-" ], "fno-sanitize-address-poison-custom-array-cookie">,
1036      Group<f_clang_Group>,
1037      HelpText<"Disable poisoning array cookies when using custom operator new[] in AddressSanitizer">;
1038def fsanitize_address_globals_dead_stripping : Flag<["-"], "fsanitize-address-globals-dead-stripping">,
1039                                        Group<f_clang_Group>,
1040                                        HelpText<"Enable linker dead stripping of globals in AddressSanitizer">;
1041def fsanitize_address_use_odr_indicator
1042    : Flag<["-"], "fsanitize-address-use-odr-indicator">,
1043      Group<f_clang_Group>,
1044      HelpText<"Enable ODR indicator globals to avoid false ODR violation reports in partially sanitized programs at the cost of an increase in binary size">;
1045def fno_sanitize_address_use_odr_indicator
1046    : Flag<["-"], "fno-sanitize-address-use-odr-indicator">,
1047      Group<f_clang_Group>,
1048      HelpText<"Disable ODR indicator globals">;
1049// Note: This flag was introduced when it was necessary to distinguish between
1050//       ABI for correct codegen.  This is no longer needed, but the flag is
1051//       not removed since targeting either ABI will behave the same.
1052//       This way we cause no disturbance to existing scripts & code, and if we
1053//       want to use this flag in the future we will cause no disturbance then
1054//       either.
1055def fsanitize_hwaddress_abi_EQ
1056    : Joined<["-"], "fsanitize-hwaddress-abi=">,
1057      Group<f_clang_Group>,
1058      HelpText<"Select the HWAddressSanitizer ABI to target (interceptor or platform, default interceptor). This option is currently unused.">;
1059def fsanitize_recover : Flag<["-"], "fsanitize-recover">, Group<f_clang_Group>;
1060def fno_sanitize_recover : Flag<["-"], "fno-sanitize-recover">,
1061                           Flags<[CoreOption, DriverOption]>,
1062                           Group<f_clang_Group>;
1063def fsanitize_recover_EQ : CommaJoined<["-"], "fsanitize-recover=">,
1064                           Group<f_clang_Group>,
1065                           HelpText<"Enable recovery for specified sanitizers">;
1066def fno_sanitize_recover_EQ
1067    : CommaJoined<["-"], "fno-sanitize-recover=">,
1068      Group<f_clang_Group>,
1069      Flags<[CoreOption, DriverOption]>,
1070      HelpText<"Disable recovery for specified sanitizers">;
1071def fsanitize_trap_EQ : CommaJoined<["-"], "fsanitize-trap=">, Group<f_clang_Group>,
1072                        HelpText<"Enable trapping for specified sanitizers">;
1073def fno_sanitize_trap_EQ : CommaJoined<["-"], "fno-sanitize-trap=">, Group<f_clang_Group>,
1074                           Flags<[CoreOption, DriverOption]>,
1075                           HelpText<"Disable trapping for specified sanitizers">;
1076def fsanitize_undefined_trap_on_error : Flag<["-"], "fsanitize-undefined-trap-on-error">,
1077                                        Group<f_clang_Group>;
1078def fno_sanitize_undefined_trap_on_error : Flag<["-"], "fno-sanitize-undefined-trap-on-error">,
1079                                           Group<f_clang_Group>;
1080def fsanitize_minimal_runtime : Flag<["-"], "fsanitize-minimal-runtime">,
1081                                        Group<f_clang_Group>;
1082def fno_sanitize_minimal_runtime : Flag<["-"], "fno-sanitize-minimal-runtime">,
1083                                        Group<f_clang_Group>;
1084def fsanitize_link_runtime : Flag<["-"], "fsanitize-link-runtime">,
1085                           Group<f_clang_Group>;
1086def fno_sanitize_link_runtime : Flag<["-"], "fno-sanitize-link-runtime">,
1087                              Group<f_clang_Group>;
1088def fsanitize_link_cxx_runtime : Flag<["-"], "fsanitize-link-c++-runtime">,
1089                                 Group<f_clang_Group>;
1090def fno_sanitize_link_cxx_runtime : Flag<["-"], "fno-sanitize-link-c++-runtime">,
1091                                    Group<f_clang_Group>;
1092def fsanitize_cfi_cross_dso : Flag<["-"], "fsanitize-cfi-cross-dso">,
1093                              Group<f_clang_Group>,
1094                              HelpText<"Enable control flow integrity (CFI) checks for cross-DSO calls.">;
1095def fno_sanitize_cfi_cross_dso : Flag<["-"], "fno-sanitize-cfi-cross-dso">,
1096                                 Flags<[CoreOption, DriverOption]>,
1097                                 Group<f_clang_Group>,
1098                                 HelpText<"Disable control flow integrity (CFI) checks for cross-DSO calls.">;
1099def fsanitize_cfi_icall_generalize_pointers : Flag<["-"], "fsanitize-cfi-icall-generalize-pointers">,
1100                                              Group<f_clang_Group>,
1101                                              HelpText<"Generalize pointers in CFI indirect call type signature checks">;
1102def fsanitize_cfi_canonical_jump_tables : Flag<["-"], "fsanitize-cfi-canonical-jump-tables">,
1103                                          Group<f_clang_Group>,
1104                                          HelpText<"Make the jump table addresses canonical in the symbol table">;
1105def fno_sanitize_cfi_canonical_jump_tables : Flag<["-"], "fno-sanitize-cfi-canonical-jump-tables">,
1106                                             Group<f_clang_Group>,
1107                                             Flags<[CoreOption, DriverOption]>,
1108                                             HelpText<"Do not make the jump table addresses canonical in the symbol table">;
1109def fsanitize_stats : Flag<["-"], "fsanitize-stats">,
1110                              Group<f_clang_Group>,
1111                              HelpText<"Enable sanitizer statistics gathering.">;
1112def fno_sanitize_stats : Flag<["-"], "fno-sanitize-stats">,
1113                                 Group<f_clang_Group>,
1114                                 Flags<[CoreOption, DriverOption]>,
1115                                 HelpText<"Disable sanitizer statistics gathering.">;
1116def fsanitize_thread_memory_access : Flag<["-"], "fsanitize-thread-memory-access">,
1117                                     Group<f_clang_Group>,
1118                                     HelpText<"Enable memory access instrumentation in ThreadSanitizer (default)">;
1119def fno_sanitize_thread_memory_access : Flag<["-"], "fno-sanitize-thread-memory-access">,
1120                                        Group<f_clang_Group>,
1121                                        Flags<[CoreOption, DriverOption]>,
1122                                        HelpText<"Disable memory access instrumentation in ThreadSanitizer">;
1123def fsanitize_thread_func_entry_exit : Flag<["-"], "fsanitize-thread-func-entry-exit">,
1124                                       Group<f_clang_Group>,
1125                                       HelpText<"Enable function entry/exit instrumentation in ThreadSanitizer (default)">;
1126def fno_sanitize_thread_func_entry_exit : Flag<["-"], "fno-sanitize-thread-func-entry-exit">,
1127                                          Group<f_clang_Group>,
1128                                          Flags<[CoreOption, DriverOption]>,
1129                                          HelpText<"Disable function entry/exit instrumentation in ThreadSanitizer">;
1130def fsanitize_thread_atomics : Flag<["-"], "fsanitize-thread-atomics">,
1131                               Group<f_clang_Group>,
1132                               HelpText<"Enable atomic operations instrumentation in ThreadSanitizer (default)">;
1133def fno_sanitize_thread_atomics : Flag<["-"], "fno-sanitize-thread-atomics">,
1134                                  Group<f_clang_Group>,
1135                                  Flags<[CoreOption, DriverOption]>,
1136                                  HelpText<"Disable atomic operations instrumentation in ThreadSanitizer">;
1137def fsanitize_undefined_strip_path_components_EQ : Joined<["-"], "fsanitize-undefined-strip-path-components=">,
1138  Group<f_clang_Group>, MetaVarName<"<number>">,
1139  HelpText<"Strip (or keep only, if negative) a given number of path components "
1140           "when emitting check metadata.">;
1141
1142} // end -f[no-]sanitize* flags
1143
1144def funsafe_math_optimizations : Flag<["-"], "funsafe-math-optimizations">,
1145  Group<f_Group>;
1146def fno_unsafe_math_optimizations : Flag<["-"], "fno-unsafe-math-optimizations">,
1147  Group<f_Group>;
1148def fassociative_math : Flag<["-"], "fassociative-math">, Group<f_Group>;
1149def fno_associative_math : Flag<["-"], "fno-associative-math">, Group<f_Group>;
1150def freciprocal_math :
1151  Flag<["-"], "freciprocal-math">, Group<f_Group>, Flags<[CC1Option]>,
1152  HelpText<"Allow division operations to be reassociated">;
1153def fno_reciprocal_math : Flag<["-"], "fno-reciprocal-math">, Group<f_Group>;
1154def ffinite_math_only : Flag<["-"], "ffinite-math-only">, Group<f_Group>, Flags<[CC1Option]>;
1155def fno_finite_math_only : Flag<["-"], "fno-finite-math-only">, Group<f_Group>;
1156def fsigned_zeros : Flag<["-"], "fsigned-zeros">, Group<f_Group>;
1157def fno_signed_zeros :
1158  Flag<["-"], "fno-signed-zeros">, Group<f_Group>, Flags<[CC1Option]>,
1159  HelpText<"Allow optimizations that ignore the sign of floating point zeros">;
1160def fhonor_nans : Flag<["-"], "fhonor-nans">, Group<f_Group>;
1161def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Group<f_Group>;
1162def fhonor_infinities : Flag<["-"], "fhonor-infinities">, Group<f_Group>;
1163def fno_honor_infinities : Flag<["-"], "fno-honor-infinities">, Group<f_Group>;
1164// This option was originally misspelt "infinites" [sic].
1165def : Flag<["-"], "fhonor-infinites">, Alias<fhonor_infinities>;
1166def : Flag<["-"], "fno-honor-infinites">, Alias<fno_honor_infinities>;
1167def frounding_math : Flag<["-"], "frounding-math">, Group<f_Group>, Flags<[CC1Option]>;
1168def fno_rounding_math : Flag<["-"], "fno-rounding-math">, Group<f_Group>, Flags<[CC1Option]>;
1169def ftrapping_math : Flag<["-"], "ftrapping-math">, Group<f_Group>, Flags<[CC1Option]>;
1170def fno_trapping_math : Flag<["-"], "fno-trapping-math">, Group<f_Group>, Flags<[CC1Option]>;
1171def ffp_contract : Joined<["-"], "ffp-contract=">, Group<f_Group>,
1172  Flags<[CC1Option]>, HelpText<"Form fused FP ops (e.g. FMAs): fast (everywhere)"
1173  " | on (according to FP_CONTRACT pragma) | off (never fuse). Default"
1174  " is 'fast' for CUDA/HIP and 'on' otherwise.">, Values<"fast,on,off">;
1175
1176def fstrict_float_cast_overflow : Flag<["-"],
1177  "fstrict-float-cast-overflow">, Group<f_Group>, Flags<[CC1Option]>,
1178  HelpText<"Assume that overflowing float-to-int casts are undefined (default)">;
1179def fno_strict_float_cast_overflow : Flag<["-"],
1180  "fno-strict-float-cast-overflow">, Group<f_Group>, Flags<[CC1Option]>,
1181  HelpText<"Relax language rules and try to match the behavior of the target's native float-to-int conversion instructions">;
1182
1183def ffor_scope : Flag<["-"], "ffor-scope">, Group<f_Group>;
1184def fno_for_scope : Flag<["-"], "fno-for-scope">, Group<f_Group>;
1185
1186def frewrite_includes : Flag<["-"], "frewrite-includes">, Group<f_Group>,
1187  Flags<[CC1Option]>;
1188def fno_rewrite_includes : Flag<["-"], "fno-rewrite-includes">, Group<f_Group>;
1189
1190def frewrite_imports : Flag<["-"], "frewrite-imports">, Group<f_Group>,
1191  Flags<[CC1Option]>;
1192def fno_rewrite_imports : Flag<["-"], "fno-rewrite-imports">, Group<f_Group>;
1193
1194def fdelete_null_pointer_checks : Flag<["-"],
1195  "fdelete-null-pointer-checks">, Group<f_Group>,
1196  HelpText<"Treat usage of null pointers as undefined behavior.">;
1197def fno_delete_null_pointer_checks : Flag<["-"],
1198  "fno-delete-null-pointer-checks">, Group<f_Group>, Flags<[CC1Option]>,
1199  HelpText<"Do not treat usage of null pointers as undefined behavior.">;
1200
1201def frewrite_map_file : Separate<["-"], "frewrite-map-file">,
1202                        Group<f_Group>,
1203                        Flags<[ DriverOption, CC1Option ]>;
1204def frewrite_map_file_EQ : Joined<["-"], "frewrite-map-file=">,
1205                           Group<f_Group>,
1206                           Flags<[DriverOption]>;
1207
1208def fuse_line_directives : Flag<["-"], "fuse-line-directives">, Group<f_Group>,
1209  Flags<[CC1Option]>;
1210def fno_use_line_directives : Flag<["-"], "fno-use-line-directives">, Group<f_Group>;
1211
1212def ffreestanding : Flag<["-"], "ffreestanding">, Group<f_Group>, Flags<[CC1Option]>,
1213  HelpText<"Assert that the compilation takes place in a freestanding environment">;
1214def fgnuc_version_EQ : Joined<["-"], "fgnuc-version=">, Group<f_Group>,
1215  HelpText<"Sets various macros to claim compatibility with the given GCC version (default is 4.2.1)">,
1216  Flags<[CC1Option, CoreOption]>;
1217def fgnu_keywords : Flag<["-"], "fgnu-keywords">, Group<f_Group>, Flags<[CC1Option]>,
1218  HelpText<"Allow GNU-extension keywords regardless of language standard">;
1219def fgnu89_inline : Flag<["-"], "fgnu89-inline">, Group<f_Group>, Flags<[CC1Option]>,
1220  HelpText<"Use the gnu89 inline semantics">;
1221def fno_gnu89_inline : Flag<["-"], "fno-gnu89-inline">, Group<f_Group>;
1222def fgnu_runtime : Flag<["-"], "fgnu-runtime">, Group<f_Group>,
1223  HelpText<"Generate output compatible with the standard GNU Objective-C runtime">;
1224def fheinous_gnu_extensions : Flag<["-"], "fheinous-gnu-extensions">, Flags<[CC1Option]>;
1225def filelist : Separate<["-"], "filelist">, Flags<[LinkerInput]>,
1226               Group<Link_Group>;
1227def : Flag<["-"], "findirect-virtual-calls">, Alias<fapple_kext>;
1228def finline_functions : Flag<["-"], "finline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>,
1229  HelpText<"Inline suitable functions">;
1230def finline_hint_functions: Flag<["-"], "finline-hint-functions">, Group<f_clang_Group>, Flags<[CC1Option]>,
1231  HelpText<"Inline functions which are (explicitly or implicitly) marked inline">;
1232def finline : Flag<["-"], "finline">, Group<clang_ignored_f_Group>;
1233def fexperimental_isel : Flag<["-"], "fexperimental-isel">, Group<f_clang_Group>,
1234  HelpText<"Enables the experimental global instruction selector">;
1235def fexperimental_new_pass_manager : Flag<["-"], "fexperimental-new-pass-manager">,
1236  Group<f_clang_Group>, Flags<[CC1Option]>,
1237  HelpText<"Enables an experimental new pass manager in LLVM.">;
1238def finput_charset_EQ : Joined<["-"], "finput-charset=">, Group<f_Group>;
1239def fexec_charset_EQ : Joined<["-"], "fexec-charset=">, Group<f_Group>;
1240def finstrument_functions : Flag<["-"], "finstrument-functions">, Group<f_Group>, Flags<[CC1Option]>,
1241  HelpText<"Generate calls to instrument function entry and exit">;
1242def finstrument_functions_after_inlining : Flag<["-"], "finstrument-functions-after-inlining">, Group<f_Group>, Flags<[CC1Option]>,
1243  HelpText<"Like -finstrument-functions, but insert the calls after inlining">;
1244def finstrument_function_entry_bare : Flag<["-"], "finstrument-function-entry-bare">, Group<f_Group>, Flags<[CC1Option]>,
1245  HelpText<"Instrument function entry only, after inlining, without arguments to the instrumentation call">;
1246def fcf_protection_EQ : Joined<["-"], "fcf-protection=">, Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1247  HelpText<"Instrument control-flow architecture protection. Options: return, branch, full, none.">, Values<"return,branch,full,none">;
1248def fcf_protection : Flag<["-"], "fcf-protection">, Group<f_Group>, Flags<[CoreOption, CC1Option]>,
1249  Alias<fcf_protection_EQ>, AliasArgs<["full"]>,
1250  HelpText<"Enable cf-protection in 'full' mode">;
1251
1252def fxray_instrument : Flag<["-"], "fxray-instrument">, Group<f_Group>,
1253  Flags<[CC1Option]>,
1254  HelpText<"Generate XRay instrumentation sleds on function entry and exit">;
1255def fnoxray_instrument : Flag<["-"], "fno-xray-instrument">, Group<f_Group>,
1256  Flags<[CC1Option]>;
1257
1258def fxray_instruction_threshold_EQ :
1259  JoinedOrSeparate<["-"], "fxray-instruction-threshold=">,
1260  Group<f_Group>, Flags<[CC1Option]>,
1261  HelpText<"Sets the minimum function size to instrument with XRay">;
1262def fxray_instruction_threshold_ :
1263  JoinedOrSeparate<["-"], "fxray-instruction-threshold">,
1264  Group<f_Group>, Flags<[CC1Option]>;
1265
1266def fxray_always_instrument :
1267  JoinedOrSeparate<["-"], "fxray-always-instrument=">,
1268  Group<f_Group>, Flags<[CC1Option]>,
1269  HelpText<"DEPRECATED: Filename defining the whitelist for imbuing the 'always instrument' XRay attribute.">;
1270def fxray_never_instrument :
1271  JoinedOrSeparate<["-"], "fxray-never-instrument=">,
1272  Group<f_Group>, Flags<[CC1Option]>,
1273  HelpText<"DEPRECATED: Filename defining the whitelist for imbuing the 'never instrument' XRay attribute.">;
1274def fxray_attr_list :
1275  JoinedOrSeparate<["-"], "fxray-attr-list=">,
1276  Group<f_Group>, Flags<[CC1Option]>,
1277  HelpText<"Filename defining the list of functions/types for imbuing XRay attributes.">;
1278def fxray_modes :
1279  JoinedOrSeparate<["-"], "fxray-modes=">,
1280  Group<f_Group>, Flags<[CC1Option]>,
1281  HelpText<"List of modes to link in by default into XRay instrumented binaries.">;
1282
1283def fxray_always_emit_customevents : Flag<["-"], "fxray-always-emit-customevents">, Group<f_Group>,
1284  Flags<[CC1Option]>,
1285  HelpText<"Determine whether to always emit __xray_customevent(...) calls even if the function it appears in is not always instrumented.">;
1286def fnoxray_always_emit_customevents : Flag<["-"], "fno-xray-always-emit-customevents">, Group<f_Group>,
1287  Flags<[CC1Option]>;
1288
1289def fxray_always_emit_typedevents : Flag<["-"], "fxray-always-emit-typedevents">, Group<f_Group>,
1290  Flags<[CC1Option]>,
1291  HelpText<"Determine whether to always emit __xray_typedevent(...) calls even if the function it appears in is not always instrumented.">;
1292def fnoxray_always_emit_typedevents : Flag<["-"], "fno-xray-always-emit-typedevents">, Group<f_Group>,
1293  Flags<[CC1Option]>;
1294
1295def fxray_link_deps : Flag<["-"], "fxray-link-deps">, Group<f_Group>,
1296  Flags<[CC1Option]>,
1297  HelpText<"Tells clang to add the link dependencies for XRay.">;
1298def fnoxray_link_deps : Flag<["-"], "fnoxray-link-deps">, Group<f_Group>,
1299  Flags<[CC1Option]>;
1300
1301def fxray_instrumentation_bundle :
1302  JoinedOrSeparate<["-"], "fxray-instrumentation-bundle=">,
1303  Group<f_Group>, Flags<[CC1Option]>,
1304  HelpText<"Select which XRay instrumentation points to emit. Options: all, none, function, custom. Default is 'all'.">;
1305
1306def ffine_grained_bitfield_accesses : Flag<["-"],
1307  "ffine-grained-bitfield-accesses">, Group<f_clang_Group>, Flags<[CC1Option]>,
1308  HelpText<"Use separate accesses for consecutive bitfield runs with legal widths and alignments.">;
1309def fno_fine_grained_bitfield_accesses : Flag<["-"],
1310  "fno-fine-grained-bitfield-accesses">, Group<f_clang_Group>, Flags<[CC1Option]>,
1311  HelpText<"Use large-integer access for consecutive bitfield runs.">;
1312
1313def flat__namespace : Flag<["-"], "flat_namespace">;
1314def flax_vector_conversions_EQ : Joined<["-"], "flax-vector-conversions=">, Group<f_Group>,
1315  HelpText<"Enable implicit vector bit-casts">, Values<"none,integer,all">, Flags<[CC1Option]>;
1316def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">, Group<f_Group>,
1317  Alias<flax_vector_conversions_EQ>, AliasArgs<["integer"]>;
1318def flimited_precision_EQ : Joined<["-"], "flimited-precision=">, Group<f_Group>;
1319def fapple_link_rtlib : Flag<["-"], "fapple-link-rtlib">, Group<f_Group>,
1320  HelpText<"Force linking the clang builtins runtime library">;
1321def flto_EQ : Joined<["-"], "flto=">, Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1322  HelpText<"Set LTO mode to either 'full' or 'thin'">, Values<"thin,full">;
1323def flto : Flag<["-"], "flto">, Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1324  HelpText<"Enable LTO in 'full' mode">;
1325def fno_lto : Flag<["-"], "fno-lto">, Group<f_Group>,
1326  HelpText<"Disable LTO mode (default)">;
1327def flto_jobs_EQ : Joined<["-"], "flto-jobs=">,
1328  Flags<[CC1Option]>, Group<f_Group>,
1329  HelpText<"Controls the backend parallelism of -flto=thin (default "
1330           "of 0 means the number of threads will be derived from "
1331           "the number of CPUs detected)">;
1332def fthinlto_index_EQ : Joined<["-"], "fthinlto-index=">,
1333  Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1334  HelpText<"Perform ThinLTO importing using provided function summary index">;
1335def fthin_link_bitcode_EQ : Joined<["-"], "fthin-link-bitcode=">,
1336  Flags<[CoreOption, CC1Option]>, Group<f_Group>,
1337  HelpText<"Write minimized bitcode to <file> for the ThinLTO thin link only">;
1338def fmacro_backtrace_limit_EQ : Joined<["-"], "fmacro-backtrace-limit=">,
1339                                Group<f_Group>, Flags<[DriverOption, CoreOption]>;
1340def fmerge_all_constants : Flag<["-"], "fmerge-all-constants">, Group<f_Group>,
1341  Flags<[CC1Option, CoreOption]>, HelpText<"Allow merging of constants">;
1342def fmessage_length_EQ : Joined<["-"], "fmessage-length=">, Group<f_Group>;
1343def fms_extensions : Flag<["-"], "fms-extensions">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1344  HelpText<"Accept some non-standard constructs supported by the Microsoft compiler">;
1345def fms_compatibility : Flag<["-"], "fms-compatibility">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1346  HelpText<"Enable full Microsoft Visual C++ compatibility">;
1347def fms_volatile : Flag<["-"], "fms-volatile">, Group<f_Group>, Flags<[CC1Option]>;
1348def fmsc_version : Joined<["-"], "fmsc-version=">, Group<f_Group>, Flags<[DriverOption, CoreOption]>,
1349  HelpText<"Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))">;
1350def fms_compatibility_version
1351    : Joined<["-"], "fms-compatibility-version=">,
1352      Group<f_Group>,
1353      Flags<[ CC1Option, CoreOption ]>,
1354      HelpText<"Dot-separated value representing the Microsoft compiler "
1355               "version number to report in _MSC_VER (0 = don't define it "
1356               "(default))">;
1357def fdelayed_template_parsing : Flag<["-"], "fdelayed-template-parsing">, Group<f_Group>,
1358  HelpText<"Parse templated function definitions at the end of the "
1359           "translation unit">,  Flags<[CC1Option, CoreOption]>;
1360def fms_memptr_rep_EQ : Joined<["-"], "fms-memptr-rep=">, Group<f_Group>, Flags<[CC1Option]>;
1361def fmodules_cache_path : Joined<["-"], "fmodules-cache-path=">, Group<i_Group>,
1362  Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">,
1363  HelpText<"Specify the module cache path">;
1364def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Group<i_Group>,
1365  Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">,
1366  HelpText<"Specify the module user build path">;
1367def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group<i_Group>,
1368  Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">,
1369  HelpText<"Specify the prebuilt module path">;
1370def fmodules_prune_interval : Joined<["-"], "fmodules-prune-interval=">, Group<i_Group>,
1371  Flags<[CC1Option]>, MetaVarName<"<seconds>">,
1372  HelpText<"Specify the interval (in seconds) between attempts to prune the module cache">;
1373def fmodules_prune_after : Joined<["-"], "fmodules-prune-after=">, Group<i_Group>,
1374  Flags<[CC1Option]>, MetaVarName<"<seconds>">,
1375  HelpText<"Specify the interval (in seconds) after which a module file will be considered unused">;
1376def fmodules_search_all : Flag <["-"], "fmodules-search-all">, Group<f_Group>,
1377  Flags<[DriverOption, CC1Option]>,
1378  HelpText<"Search even non-imported modules to resolve references">;
1379def fbuild_session_timestamp : Joined<["-"], "fbuild-session-timestamp=">,
1380  Group<i_Group>, Flags<[CC1Option]>, MetaVarName<"<time since Epoch in seconds>">,
1381  HelpText<"Time when the current build session started">;
1382def fbuild_session_file : Joined<["-"], "fbuild-session-file=">,
1383  Group<i_Group>, MetaVarName<"<file>">,
1384  HelpText<"Use the last modification time of <file> as the build session timestamp">;
1385def fmodules_validate_once_per_build_session : Flag<["-"], "fmodules-validate-once-per-build-session">,
1386  Group<i_Group>, Flags<[CC1Option]>,
1387  HelpText<"Don't verify input files for the modules if the module has been "
1388           "successfully validated or loaded during this build session">;
1389def fmodules_disable_diagnostic_validation : Flag<["-"], "fmodules-disable-diagnostic-validation">,
1390  Group<i_Group>, Flags<[CC1Option]>,
1391  HelpText<"Disable validation of the diagnostic options when loading the module">;
1392def fmodules_validate_system_headers : Flag<["-"], "fmodules-validate-system-headers">,
1393  Group<i_Group>, Flags<[CC1Option]>,
1394  HelpText<"Validate the system headers that a module depends on when loading the module">;
1395def fno_modules_validate_system_headers : Flag<["-"], "fno-modules-validate-system-headers">,
1396  Group<i_Group>, Flags<[DriverOption]>;
1397
1398def fvalidate_ast_input_files_content:
1399  Flag <["-"], "fvalidate-ast-input-files-content">,
1400  Group<f_Group>, Flags<[CC1Option]>,
1401  HelpText<"Compute and store the hash of input files used to build an AST."
1402           " Files with mismatching mtime's are considered valid"
1403           " if both contents is identical">;
1404def fmodules_validate_input_files_content:
1405  Flag <["-"], "fmodules-validate-input-files-content">,
1406  Group<f_Group>, Flags<[DriverOption]>,
1407  HelpText<"Validate PCM input files based on content if mtime differs">;
1408def fno_modules_validate_input_files_content:
1409  Flag <["-"], "fno_modules-validate-input-files-content">,
1410  Group<f_Group>, Flags<[DriverOption]>;
1411def fpch_validate_input_files_content:
1412  Flag <["-"], "fpch-validate-input-files-content">,
1413  Group<f_Group>, Flags<[DriverOption]>,
1414  HelpText<"Validate PCH input files based on content if mtime differs">;
1415def fno_pch_validate_input_files_content:
1416  Flag <["-"], "fno_pch-validate-input-files-content">,
1417  Group<f_Group>, Flags<[DriverOption]>;
1418
1419def fmodules : Flag <["-"], "fmodules">, Group<f_Group>,
1420  Flags<[DriverOption, CC1Option]>,
1421  HelpText<"Enable the 'modules' language feature">;
1422def fimplicit_module_maps : Flag <["-"], "fimplicit-module-maps">, Group<f_Group>,
1423  Flags<[DriverOption, CC1Option]>,
1424  HelpText<"Implicitly search the file system for module map files.">;
1425def fmodules_ts : Flag <["-"], "fmodules-ts">, Group<f_Group>,
1426  Flags<[CC1Option]>, HelpText<"Enable support for the C++ Modules TS">;
1427def fmodule_maps : Flag <["-"], "fmodule-maps">, Alias<fimplicit_module_maps>;
1428def fmodule_name_EQ : Joined<["-"], "fmodule-name=">, Group<f_Group>,
1429  Flags<[DriverOption,CC1Option]>, MetaVarName<"<name>">,
1430  HelpText<"Specify the name of the module to build">;
1431def fmodule_name : Separate<["-"], "fmodule-name">, Alias<fmodule_name_EQ>;
1432def fmodule_implementation_of : Separate<["-"], "fmodule-implementation-of">,
1433  Flags<[CC1Option]>, Alias<fmodule_name_EQ>;
1434def fmodule_map_file : Joined<["-"], "fmodule-map-file=">,
1435  Group<f_Group>, Flags<[DriverOption,CC1Option]>, MetaVarName<"<file>">,
1436  HelpText<"Load this module map file">;
1437def fmodule_file : Joined<["-"], "fmodule-file=">,
1438  Group<i_Group>, Flags<[DriverOption,CC1Option]>, MetaVarName<"[<name>=]<file>">,
1439  HelpText<"Specify the mapping of module name to precompiled module file, or load a module file if name is omitted.">;
1440def fmodules_ignore_macro : Joined<["-"], "fmodules-ignore-macro=">, Group<f_Group>, Flags<[CC1Option]>,
1441  HelpText<"Ignore the definition of the given macro when building and loading modules">;
1442def fmodules_decluse : Flag <["-"], "fmodules-decluse">, Group<f_Group>,
1443  Flags<[DriverOption,CC1Option]>,
1444  HelpText<"Require declaration of modules used within a module">;
1445def fmodules_strict_decluse : Flag <["-"], "fmodules-strict-decluse">, Group<f_Group>,
1446  Flags<[DriverOption,CC1Option]>,
1447  HelpText<"Like -fmodules-decluse but requires all headers to be in modules">;
1448def fno_modules_search_all : Flag <["-"], "fno-modules-search-all">, Group<f_Group>,
1449  Flags<[DriverOption, CC1Option]>;
1450def fno_implicit_modules :
1451  Flag <["-"], "fno-implicit-modules">,
1452  Group<f_Group>, Flags<[DriverOption, CC1Option]>;
1453def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-system-headers">, Group<f_Group>, Flags<[CC1Option]>;
1454
1455def fmudflapth : Flag<["-"], "fmudflapth">, Group<f_Group>;
1456def fmudflap : Flag<["-"], "fmudflap">, Group<f_Group>;
1457def fnested_functions : Flag<["-"], "fnested-functions">, Group<f_Group>;
1458def fnext_runtime : Flag<["-"], "fnext-runtime">, Group<f_Group>;
1459def fno_access_control : Flag<["-"], "fno-access-control">, Group<f_Group>, Flags<[CC1Option]>,
1460  HelpText<"Disable C++ access control">;
1461def fno_apple_pragma_pack : Flag<["-"], "fno-apple-pragma-pack">, Group<f_Group>;
1462def fno_asm : Flag<["-"], "fno-asm">, Group<f_Group>;
1463def fno_asynchronous_unwind_tables : Flag<["-"], "fno-asynchronous-unwind-tables">, Group<f_Group>;
1464def fno_assume_sane_operator_new : Flag<["-"], "fno-assume-sane-operator-new">, Group<f_Group>,
1465  HelpText<"Don't assume that C++'s global operator new can't alias any pointer">,
1466  Flags<[CC1Option]>;
1467def fno_blocks : Flag<["-"], "fno-blocks">, Group<f_Group>, Flags<[CoreOption]>;
1468def fno_borland_extensions : Flag<["-"], "fno-borland-extensions">, Group<f_Group>;
1469def fno_builtin : Flag<["-"], "fno-builtin">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1470  HelpText<"Disable implicit builtin knowledge of functions">;
1471def fno_builtin_ : Joined<["-"], "fno-builtin-">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1472  HelpText<"Disable implicit builtin knowledge of a specific function">;
1473def fno_caret_diagnostics : Flag<["-"], "fno-caret-diagnostics">, Group<f_Group>,
1474 Flags<[CC1Option]>;
1475def fno_color_diagnostics : Flag<["-"], "fno-color-diagnostics">, Group<f_Group>,
1476  Flags<[CoreOption, CC1Option]>;
1477def fno_diagnostics_color : Flag<["-"], "fno-diagnostics-color">, Group<f_Group>,
1478  Flags<[CoreOption, DriverOption]>;
1479def fno_common : Flag<["-"], "fno-common">, Group<f_Group>, Flags<[CC1Option]>,
1480    HelpText<"Compile common globals like normal definitions">;
1481def fno_constant_cfstrings : Flag<["-"], "fno-constant-cfstrings">, Group<f_Group>,
1482  Flags<[CC1Option]>,
1483  HelpText<"Disable creation of CodeFoundation-type constant strings">;
1484def fno_cxx_exceptions: Flag<["-"], "fno-cxx-exceptions">, Group<f_Group>;
1485def fno_cxx_modules : Flag <["-"], "fno-cxx-modules">, Group<f_Group>,
1486  Flags<[DriverOption]>;
1487def fno_diagnostics_fixit_info : Flag<["-"], "fno-diagnostics-fixit-info">, Group<f_Group>,
1488  Flags<[CC1Option]>, HelpText<"Do not include fixit information in diagnostics">;
1489def fno_diagnostics_show_hotness : Flag<["-"], "fno-diagnostics-show-hotness">, Group<f_Group>;
1490def fno_diagnostics_show_option : Flag<["-"], "fno-diagnostics-show-option">, Group<f_Group>;
1491def fno_diagnostics_show_note_include_stack : Flag<["-"], "fno-diagnostics-show-note-include-stack">,
1492    Flags<[CC1Option]>, Group<f_Group>;
1493def fdigraphs : Flag<["-"], "fdigraphs">, Group<f_Group>, Flags<[CC1Option]>,
1494  HelpText<"Enable alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:' (default)">;
1495def fno_digraphs : Flag<["-"], "fno-digraphs">, Group<f_Group>, Flags<[CC1Option]>,
1496  HelpText<"Disallow alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:'">;
1497def fno_declspec : Flag<["-"], "fno-declspec">, Group<f_clang_Group>,
1498  HelpText<"Disallow __declspec as a keyword">, Flags<[CC1Option]>;
1499def fno_dollars_in_identifiers : Flag<["-"], "fno-dollars-in-identifiers">, Group<f_Group>,
1500  HelpText<"Disallow '$' in identifiers">, Flags<[CC1Option]>;
1501def fno_elide_constructors : Flag<["-"], "fno-elide-constructors">, Group<f_Group>,
1502  HelpText<"Disable C++ copy constructor elision">, Flags<[CC1Option]>;
1503def fno_eliminate_unused_debug_symbols : Flag<["-"], "fno-eliminate-unused-debug-symbols">, Group<f_Group>;
1504def fno_exceptions : Flag<["-"], "fno-exceptions">, Group<f_Group>;
1505def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, Flags<[CC1Option]>;
1506def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>;
1507def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Option]>;
1508def fno_experimental_isel : Flag<["-"], "fno-experimental-isel">, Group<f_clang_Group>,
1509  HelpText<"Disables the experimental global instruction selector">;
1510def fno_experimental_new_pass_manager : Flag<["-"], "fno-experimental-new-pass-manager">,
1511  Group<f_clang_Group>, Flags<[CC1Option]>,
1512  HelpText<"Disables an experimental new pass manager in LLVM.">;
1513def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, Flags<[CC1Option]>,
1514    HelpText<"Use the given vector functions library">, Values<"Accelerate,MASSV,SVML,none">;
1515def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>,
1516  Alias<flax_vector_conversions_EQ>, AliasArgs<["none"]>;
1517def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>,
1518  HelpText<"Disallow merging of constants">;
1519def fno_modules : Flag <["-"], "fno-modules">, Group<f_Group>,
1520  Flags<[DriverOption]>;
1521def fno_implicit_module_maps : Flag <["-"], "fno-implicit-module-maps">, Group<f_Group>,
1522  Flags<[DriverOption]>;
1523def fno_module_maps : Flag <["-"], "fno-module-maps">, Alias<fno_implicit_module_maps>;
1524def fno_modules_decluse : Flag <["-"], "fno-modules-decluse">, Group<f_Group>,
1525  Flags<[DriverOption]>;
1526def fno_modules_strict_decluse : Flag <["-"], "fno-strict-modules-decluse">, Group<f_Group>,
1527  Flags<[DriverOption]>;
1528def fimplicit_modules : Flag <["-"], "fimplicit-modules">, Group<f_Group>,
1529  Flags<[DriverOption]>;
1530def fmodule_file_deps : Flag <["-"], "fmodule-file-deps">, Group<f_Group>,
1531  Flags<[DriverOption]>;
1532def fno_module_file_deps : Flag <["-"], "fno-module-file-deps">, Group<f_Group>,
1533  Flags<[DriverOption]>;
1534def fno_ms_extensions : Flag<["-"], "fno-ms-extensions">, Group<f_Group>,
1535  Flags<[CoreOption]>;
1536def fno_ms_compatibility : Flag<["-"], "fno-ms-compatibility">, Group<f_Group>,
1537  Flags<[CoreOption]>;
1538def fno_delayed_template_parsing : Flag<["-"], "fno-delayed-template-parsing">, Group<f_Group>,
1539  HelpText<"Disable delayed template parsing">,
1540  Flags<[DriverOption, CoreOption]>;
1541def fno_objc_exceptions: Flag<["-"], "fno-objc-exceptions">, Group<f_Group>;
1542def fno_objc_legacy_dispatch : Flag<["-"], "fno-objc-legacy-dispatch">, Group<f_Group>;
1543def fno_objc_weak : Flag<["-"], "fno-objc-weak">, Group<f_Group>, Flags<[CC1Option]>;
1544def fno_omit_frame_pointer : Flag<["-"], "fno-omit-frame-pointer">, Group<f_Group>;
1545def fno_operator_names : Flag<["-"], "fno-operator-names">, Group<f_Group>,
1546  HelpText<"Do not treat C++ operator name keywords as synonyms for operators">,
1547  Flags<[CC1Option]>;
1548def fno_pascal_strings : Flag<["-"], "fno-pascal-strings">, Group<f_Group>;
1549def fno_rtti : Flag<["-"], "fno-rtti">, Group<f_Group>, Flags<[CC1Option]>,
1550  HelpText<"Disable generation of rtti information">;
1551def fno_rtti_data : Flag<["-"], "fno-rtti-data">, Group<f_Group>, Flags<[CC1Option]>,
1552  HelpText<"Control emission of RTTI data">;
1553def fno_short_enums : Flag<["-"], "fno-short-enums">, Group<f_Group>;
1554def fno_show_column : Flag<["-"], "fno-show-column">, Group<f_Group>, Flags<[CC1Option]>,
1555  HelpText<"Do not include column number on diagnostics">;
1556def fno_show_source_location : Flag<["-"], "fno-show-source-location">, Group<f_Group>,
1557  Flags<[CC1Option]>, HelpText<"Do not include source location information with diagnostics">;
1558def fdiagnostics_absolute_paths : Flag<["-"], "fdiagnostics-absolute-paths">, Group<f_Group>,
1559  Flags<[CC1Option, CoreOption]>, HelpText<"Print absolute paths in diagnostics">;
1560def fno_spell_checking : Flag<["-"], "fno-spell-checking">, Group<f_Group>,
1561  Flags<[CC1Option]>, HelpText<"Disable spell-checking">;
1562def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group<f_Group>,
1563  HelpText<"Disable the use of stack protectors">;
1564def fno_strict_aliasing : Flag<["-"], "fno-strict-aliasing">, Group<f_Group>,
1565  Flags<[DriverOption, CoreOption]>;
1566def fstruct_path_tbaa : Flag<["-"], "fstruct-path-tbaa">, Group<f_Group>;
1567def fno_struct_path_tbaa : Flag<["-"], "fno-struct-path-tbaa">, Group<f_Group>;
1568def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group<f_Group>;
1569def fno_strict_vtable_pointers: Flag<["-"], "fno-strict-vtable-pointers">,
1570  Group<f_Group>;
1571def fno_strict_overflow : Flag<["-"], "fno-strict-overflow">, Group<f_Group>;
1572def fno_temp_file : Flag<["-"], "fno-temp-file">, Group<f_Group>,
1573  Flags<[CC1Option, CoreOption]>, HelpText<
1574  "Directly create compilation output files. This may lead to incorrect incremental builds if the compiler crashes">;
1575def fno_threadsafe_statics : Flag<["-"], "fno-threadsafe-statics">, Group<f_Group>,
1576  Flags<[CC1Option]>, HelpText<"Do not emit code to make initialization of local statics thread safe">;
1577def fno_use_cxa_atexit : Flag<["-"], "fno-use-cxa-atexit">, Group<f_Group>, Flags<[CC1Option]>,
1578  HelpText<"Don't use __cxa_atexit for calling destructors">;
1579def fno_register_global_dtors_with_atexit : Flag<["-"], "fno-register-global-dtors-with-atexit">, Group<f_Group>,
1580  HelpText<"Don't use atexit or __cxa_atexit to register global destructors">;
1581def fno_use_init_array : Flag<["-"], "fno-use-init-array">, Group<f_Group>, Flags<[CC1Option]>,
1582  HelpText<"Don't use .init_array instead of .ctors">;
1583def fno_unit_at_a_time : Flag<["-"], "fno-unit-at-a-time">, Group<f_Group>;
1584def fno_unwind_tables : Flag<["-"], "fno-unwind-tables">, Group<f_Group>;
1585def fno_verbose_asm : Flag<["-"], "fno-verbose-asm">, Group<f_Group>;
1586def fno_working_directory : Flag<["-"], "fno-working-directory">, Group<f_Group>;
1587def fno_wrapv : Flag<["-"], "fno-wrapv">, Group<f_Group>;
1588def fno_zero_initialized_in_bss : Flag<["-"], "fno-zero-initialized-in-bss">, Group<f_Group>;
1589def fobjc_arc : Flag<["-"], "fobjc-arc">, Group<f_Group>, Flags<[CC1Option]>,
1590  HelpText<"Synthesize retain and release calls for Objective-C pointers">;
1591def fno_objc_arc : Flag<["-"], "fno-objc-arc">, Group<f_Group>;
1592def fobjc_convert_messages_to_runtime_calls :
1593  Flag<["-"], "fobjc-convert-messages-to-runtime-calls">, Group<f_Group>;
1594def fno_objc_convert_messages_to_runtime_calls :
1595  Flag<["-"], "fno-objc-convert-messages-to-runtime-calls">, Group<f_Group>, Flags<[CC1Option]>;
1596def fobjc_arc_exceptions : Flag<["-"], "fobjc-arc-exceptions">, Group<f_Group>, Flags<[CC1Option]>,
1597  HelpText<"Use EH-safe code when synthesizing retains and releases in -fobjc-arc">;
1598def fno_objc_arc_exceptions : Flag<["-"], "fno-objc-arc-exceptions">, Group<f_Group>;
1599def fobjc_atdefs : Flag<["-"], "fobjc-atdefs">, Group<clang_ignored_f_Group>;
1600def fobjc_call_cxx_cdtors : Flag<["-"], "fobjc-call-cxx-cdtors">, Group<clang_ignored_f_Group>;
1601def fobjc_exceptions: Flag<["-"], "fobjc-exceptions">, Group<f_Group>,
1602  HelpText<"Enable Objective-C exceptions">, Flags<[CC1Option]>;
1603def fapplication_extension : Flag<["-"], "fapplication-extension">,
1604  Group<f_Group>, Flags<[CC1Option]>,
1605  HelpText<"Restrict code to those available for App Extensions">;
1606def fno_application_extension : Flag<["-"], "fno-application-extension">,
1607  Group<f_Group>;
1608def frelaxed_template_template_args : Flag<["-"], "frelaxed-template-template-args">,
1609  Flags<[CC1Option]>, HelpText<"Enable C++17 relaxed template template argument matching">,
1610  Group<f_Group>;
1611def fno_relaxed_template_template_args : Flag<["-"], "fno-relaxed-template-template-args">,
1612  Group<f_Group>;
1613def fsized_deallocation : Flag<["-"], "fsized-deallocation">, Flags<[CC1Option]>,
1614  HelpText<"Enable C++14 sized global deallocation functions">, Group<f_Group>;
1615def fno_sized_deallocation: Flag<["-"], "fno-sized-deallocation">, Group<f_Group>;
1616def faligned_allocation : Flag<["-"], "faligned-allocation">, Flags<[CC1Option]>,
1617  HelpText<"Enable C++17 aligned allocation functions">, Group<f_Group>;
1618def fno_aligned_allocation: Flag<["-"], "fno-aligned-allocation">,
1619  Group<f_Group>, Flags<[CC1Option]>;
1620def fnew_alignment_EQ : Joined<["-"], "fnew-alignment=">,
1621  HelpText<"Specifies the largest alignment guaranteed by '::operator new(size_t)'">,
1622  MetaVarName<"<align>">, Group<f_Group>, Flags<[CC1Option]>;
1623def : Separate<["-"], "fnew-alignment">, Alias<fnew_alignment_EQ>;
1624def : Flag<["-"], "faligned-new">, Alias<faligned_allocation>;
1625def : Flag<["-"], "fno-aligned-new">, Alias<fno_aligned_allocation>;
1626def faligned_new_EQ : Joined<["-"], "faligned-new=">;
1627
1628def fobjc_legacy_dispatch : Flag<["-"], "fobjc-legacy-dispatch">, Group<f_Group>;
1629def fobjc_new_property : Flag<["-"], "fobjc-new-property">, Group<clang_ignored_f_Group>;
1630def fobjc_infer_related_result_type : Flag<["-"], "fobjc-infer-related-result-type">,
1631                                      Group<f_Group>;
1632def fno_objc_infer_related_result_type : Flag<["-"],
1633  "fno-objc-infer-related-result-type">, Group<f_Group>,
1634  HelpText<
1635    "do not infer Objective-C related result type based on method family">,
1636  Flags<[CC1Option]>;
1637def fobjc_link_runtime: Flag<["-"], "fobjc-link-runtime">, Group<f_Group>;
1638def fobjc_weak : Flag<["-"], "fobjc-weak">, Group<f_Group>, Flags<[CC1Option]>,
1639  HelpText<"Enable ARC-style weak references in Objective-C">;
1640
1641// Objective-C ABI options.
1642def fobjc_runtime_EQ : Joined<["-"], "fobjc-runtime=">, Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1643  HelpText<"Specify the target Objective-C runtime kind and version">;
1644def fobjc_abi_version_EQ : Joined<["-"], "fobjc-abi-version=">, Group<f_Group>;
1645def fobjc_nonfragile_abi_version_EQ : Joined<["-"], "fobjc-nonfragile-abi-version=">, Group<f_Group>;
1646def fobjc_nonfragile_abi : Flag<["-"], "fobjc-nonfragile-abi">, Group<f_Group>;
1647def fno_objc_nonfragile_abi : Flag<["-"], "fno-objc-nonfragile-abi">, Group<f_Group>;
1648
1649def fobjc_sender_dependent_dispatch : Flag<["-"], "fobjc-sender-dependent-dispatch">, Group<f_Group>;
1650def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group<f_Group>;
1651def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>,
1652  HelpText<"Parse OpenMP pragmas and generate parallel code.">;
1653def fno_openmp : Flag<["-"], "fno-openmp">, Group<f_Group>, Flags<[NoArgumentUnused]>;
1654def fopenmp_version_EQ : Joined<["-"], "fopenmp-version=">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
1655def fopenmp_EQ : Joined<["-"], "fopenmp=">, Group<f_Group>;
1656def fopenmp_use_tls : Flag<["-"], "fopenmp-use-tls">, Group<f_Group>,
1657  Flags<[NoArgumentUnused, HelpHidden]>;
1658def fnoopenmp_use_tls : Flag<["-"], "fnoopenmp-use-tls">, Group<f_Group>,
1659  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1660def fopenmp_targets_EQ : CommaJoined<["-"], "fopenmp-targets=">, Flags<[DriverOption, CC1Option]>,
1661  HelpText<"Specify comma-separated list of triples OpenMP offloading targets to be supported">;
1662def fopenmp_relocatable_target : Flag<["-"], "fopenmp-relocatable-target">,
1663  Group<f_Group>, Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1664def fnoopenmp_relocatable_target : Flag<["-"], "fnoopenmp-relocatable-target">,
1665  Group<f_Group>, Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1666def fopenmp_simd : Flag<["-"], "fopenmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>,
1667  HelpText<"Emit OpenMP code only for SIMD-based constructs.">;
1668def fopenmp_enable_irbuilder : Flag<["-"], "fopenmp-enable-irbuilder">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused, HelpHidden]>,
1669  HelpText<"Use the experimental OpenMP-IR-Builder codegen path.">;
1670def fno_openmp_simd : Flag<["-"], "fno-openmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
1671def fopenmp_cuda_mode : Flag<["-"], "fopenmp-cuda-mode">, Group<f_Group>,
1672  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1673def fno_openmp_cuda_mode : Flag<["-"], "fno-openmp-cuda-mode">, Group<f_Group>,
1674  Flags<[NoArgumentUnused, HelpHidden]>;
1675def fopenmp_cuda_force_full_runtime : Flag<["-"], "fopenmp-cuda-force-full-runtime">, Group<f_Group>,
1676  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1677def fno_openmp_cuda_force_full_runtime : Flag<["-"], "fno-openmp-cuda-force-full-runtime">, Group<f_Group>,
1678  Flags<[NoArgumentUnused, HelpHidden]>;
1679def fopenmp_cuda_number_of_sm_EQ : Joined<["-"], "fopenmp-cuda-number-of-sm=">, Group<f_Group>,
1680  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1681def fopenmp_cuda_blocks_per_sm_EQ : Joined<["-"], "fopenmp-cuda-blocks-per-sm=">, Group<f_Group>,
1682  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1683def fopenmp_cuda_teams_reduction_recs_num_EQ : Joined<["-"], "fopenmp-cuda-teams-reduction-recs-num=">, Group<f_Group>,
1684  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1685def fopenmp_optimistic_collapse : Flag<["-"], "fopenmp-optimistic-collapse">, Group<f_Group>,
1686  Flags<[CC1Option, NoArgumentUnused, HelpHidden]>;
1687def fno_openmp_optimistic_collapse : Flag<["-"], "fno-openmp-optimistic-collapse">, Group<f_Group>,
1688  Flags<[NoArgumentUnused, HelpHidden]>;
1689def static_openmp: Flag<["-"], "static-openmp">,
1690  HelpText<"Use the static host OpenMP runtime while linking.">;
1691def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>;
1692def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>;
1693def fno_escaping_block_tail_calls : Flag<["-"], "fno-escaping-block-tail-calls">, Group<f_Group>, Flags<[CC1Option]>;
1694def fescaping_block_tail_calls : Flag<["-"], "fescaping-block-tail-calls">, Group<f_Group>;
1695def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">;
1696def force__flat__namespace : Flag<["-"], "force_flat_namespace">;
1697def force__load : Separate<["-"], "force_load">;
1698def force_addr : Joined<["-"], "fforce-addr">, Group<clang_ignored_f_Group>;
1699def foutput_class_dir_EQ : Joined<["-"], "foutput-class-dir=">, Group<f_Group>;
1700def fpack_struct : Flag<["-"], "fpack-struct">, Group<f_Group>;
1701def fno_pack_struct : Flag<["-"], "fno-pack-struct">, Group<f_Group>;
1702def fpack_struct_EQ : Joined<["-"], "fpack-struct=">, Group<f_Group>, Flags<[CC1Option]>,
1703  HelpText<"Specify the default maximum struct packing alignment">;
1704def fmax_type_align_EQ : Joined<["-"], "fmax-type-align=">, Group<f_Group>, Flags<[CC1Option]>,
1705  HelpText<"Specify the maximum alignment to enforce on pointers lacking an explicit alignment">;
1706def fno_max_type_align : Flag<["-"], "fno-max-type-align">, Group<f_Group>;
1707def fpascal_strings : Flag<["-"], "fpascal-strings">, Group<f_Group>, Flags<[CC1Option]>,
1708  HelpText<"Recognize and construct Pascal-style string literals">;
1709def fpatchable_function_entry_EQ : Joined<["-"], "fpatchable-function-entry=">, Group<f_Group>, Flags<[CC1Option]>,
1710  MetaVarName<"<N,M>">, HelpText<"Generate M NOPs before function entry and N-M NOPs after function entry">;
1711def fpcc_struct_return : Flag<["-"], "fpcc-struct-return">, Group<f_Group>, Flags<[CC1Option]>,
1712  HelpText<"Override the default ABI to return all structs on the stack">;
1713def fpch_preprocess : Flag<["-"], "fpch-preprocess">, Group<f_Group>;
1714def fpic : Flag<["-"], "fpic">, Group<f_Group>;
1715def fno_pic : Flag<["-"], "fno-pic">, Group<f_Group>;
1716def fpie : Flag<["-"], "fpie">, Group<f_Group>;
1717def fno_pie : Flag<["-"], "fno-pie">, Group<f_Group>;
1718def fplt : Flag<["-"], "fplt">, Group<f_Group>, Flags<[CC1Option]>,
1719  HelpText<"Use the PLT to make function calls">;
1720def fno_plt : Flag<["-"], "fno-plt">, Group<f_Group>, Flags<[CC1Option]>,
1721  HelpText<"Do not use the PLT to make function calls">;
1722def fropi : Flag<["-"], "fropi">, Group<f_Group>, Flags<[CC1Option]>;
1723def fno_ropi : Flag<["-"], "fno-ropi">, Group<f_Group>;
1724def frwpi : Flag<["-"], "frwpi">, Group<f_Group>, Flags<[CC1Option]>;
1725def fno_rwpi : Flag<["-"], "fno-rwpi">, Group<f_Group>;
1726def fplugin_EQ : Joined<["-"], "fplugin=">, Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<dsopath>">,
1727  HelpText<"Load the named plugin (dynamic shared object)">;
1728def fpass_plugin_EQ : Joined<["-"], "fpass-plugin=">,
1729  Group<f_Group>, Flags<[CC1Option]>, MetaVarName<"<dsopath>">,
1730  HelpText<"Load pass plugin from a dynamic shared object file (only with new pass manager).">;
1731def fpreserve_as_comments : Flag<["-"], "fpreserve-as-comments">, Group<f_Group>;
1732def fno_preserve_as_comments : Flag<["-"], "fno-preserve-as-comments">, Group<f_Group>, Flags<[CC1Option]>,
1733  HelpText<"Do not preserve comments in inline assembly">;
1734def fprofile_arcs : Flag<["-"], "fprofile-arcs">, Group<f_Group>;
1735def fno_profile_arcs : Flag<["-"], "fno-profile-arcs">, Group<f_Group>;
1736def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>;
1737def frandom_seed_EQ : Joined<["-"], "frandom-seed=">, Group<clang_ignored_f_Group>;
1738def freg_struct_return : Flag<["-"], "freg-struct-return">, Group<f_Group>, Flags<[CC1Option]>,
1739  HelpText<"Override the default ABI to return small structs in registers">;
1740def frtti : Flag<["-"], "frtti">, Group<f_Group>;
1741def : Flag<["-"], "fsched-interblock">, Group<clang_ignored_f_Group>;
1742def fshort_enums : Flag<["-"], "fshort-enums">, Group<f_Group>, Flags<[CC1Option]>,
1743  HelpText<"Allocate to an enum type only as many bytes as it needs for the declared range of possible values">;
1744def fchar8__t : Flag<["-"], "fchar8_t">, Group<f_Group>, Flags<[CC1Option]>,
1745  HelpText<"Enable C++ builtin type char8_t">;
1746def fno_char8__t : Flag<["-"], "fno-char8_t">, Group<f_Group>, Flags<[CC1Option]>,
1747  HelpText<"Disable C++ builtin type char8_t">;
1748def fshort_wchar : Flag<["-"], "fshort-wchar">, Group<f_Group>,
1749  HelpText<"Force wchar_t to be a short unsigned int">;
1750def fno_short_wchar : Flag<["-"], "fno-short-wchar">, Group<f_Group>,
1751  HelpText<"Force wchar_t to be an unsigned int">;
1752def fshow_overloads_EQ : Joined<["-"], "fshow-overloads=">, Group<f_Group>, Flags<[CC1Option]>,
1753  HelpText<"Which overload candidates to show when overload resolution fails: "
1754           "best|all; defaults to all">, Values<"best,all">;
1755def fshow_column : Flag<["-"], "fshow-column">, Group<f_Group>, Flags<[CC1Option]>;
1756def fshow_source_location : Flag<["-"], "fshow-source-location">, Group<f_Group>;
1757def fspell_checking : Flag<["-"], "fspell-checking">, Group<f_Group>;
1758def fspell_checking_limit_EQ : Joined<["-"], "fspell-checking-limit=">, Group<f_Group>;
1759def fsigned_bitfields : Flag<["-"], "fsigned-bitfields">, Group<f_Group>;
1760def fsigned_char : Flag<["-"], "fsigned-char">, Group<f_Group>;
1761def fno_signed_char : Flag<["-"], "fno-signed-char">, Group<f_Group>,
1762    Flags<[CC1Option]>, HelpText<"Char is unsigned">;
1763def fsplit_stack : Flag<["-"], "fsplit-stack">, Group<f_Group>;
1764def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group<f_Group>,
1765  HelpText<"Enable stack protectors for all functions">;
1766def fstack_protector_strong : Flag<["-"], "fstack-protector-strong">, Group<f_Group>,
1767  HelpText<"Enable stack protectors for some functions vulnerable to stack smashing. "
1768           "Compared to -fstack-protector, this uses a stronger heuristic "
1769           "that includes functions containing arrays of any size (and any type), "
1770           "as well as any calls to alloca or the taking of an address from a local variable">;
1771def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>,
1772  HelpText<"Enable stack protectors for some functions vulnerable to stack smashing. "
1773           "This uses a loose heuristic which considers functions vulnerable "
1774           "if they contain a char (or 8bit integer) array or constant sized calls to "
1775           "alloca, which are of greater size than ssp-buffer-size (default: 8 bytes). "
1776           "All variable sized calls to alloca are considered vulnerable">;
1777def ftrivial_auto_var_init : Joined<["-"], "ftrivial-auto-var-init=">, Group<f_Group>,
1778  Flags<[CC1Option, CoreOption]>, HelpText<"Initialize trivial automatic stack variables: uninitialized (default)"
1779  " | pattern">, Values<"uninitialized,pattern">;
1780def enable_trivial_var_init_zero : Flag<["-"], "enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang">,
1781  Flags<[CC1Option, CoreOption]>,
1782  HelpText<"Trivial automatic variable initialization to zero is only here for benchmarks, it'll eventually be removed, and I'm OK with that because I'm only using it to benchmark">;
1783def fstandalone_debug : Flag<["-"], "fstandalone-debug">, Group<f_Group>, Flags<[CoreOption]>,
1784  HelpText<"Emit full debug info for all types used by the program">;
1785def fno_standalone_debug : Flag<["-"], "fno-standalone-debug">, Group<f_Group>, Flags<[CoreOption]>,
1786  HelpText<"Limit debug information produced to reduce size of debug binary">;
1787def flimit_debug_info : Flag<["-"], "flimit-debug-info">, Flags<[CoreOption]>, Alias<fno_standalone_debug>;
1788def fno_limit_debug_info : Flag<["-"], "fno-limit-debug-info">, Flags<[CoreOption]>, Alias<fstandalone_debug>;
1789def fdebug_macro : Flag<["-"], "fdebug-macro">, Group<f_Group>, Flags<[CoreOption]>,
1790  HelpText<"Emit macro debug information">;
1791def fno_debug_macro : Flag<["-"], "fno-debug-macro">, Group<f_Group>, Flags<[CoreOption]>,
1792  HelpText<"Do not emit macro debug information">;
1793def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group<f_Group>,
1794  Flags<[DriverOption, CoreOption]>;
1795def fstrict_enums : Flag<["-"], "fstrict-enums">, Group<f_Group>, Flags<[CC1Option]>,
1796  HelpText<"Enable optimizations based on the strict definition of an enum's "
1797           "value range">;
1798def fstrict_vtable_pointers: Flag<["-"], "fstrict-vtable-pointers">,
1799  Group<f_Group>, Flags<[CC1Option]>,
1800  HelpText<"Enable optimizations based on the strict rules for overwriting "
1801             "polymorphic C++ objects">;
1802def fstrict_overflow : Flag<["-"], "fstrict-overflow">, Group<f_Group>;
1803def fsyntax_only : Flag<["-"], "fsyntax-only">,
1804  Flags<[DriverOption,CoreOption,CC1Option]>, Group<Action_Group>;
1805def ftabstop_EQ : Joined<["-"], "ftabstop=">, Group<f_Group>;
1806def ftemplate_depth_EQ : Joined<["-"], "ftemplate-depth=">, Group<f_Group>;
1807def ftemplate_depth_ : Joined<["-"], "ftemplate-depth-">, Group<f_Group>;
1808def ftemplate_backtrace_limit_EQ : Joined<["-"], "ftemplate-backtrace-limit=">,
1809                                   Group<f_Group>;
1810def foperator_arrow_depth_EQ : Joined<["-"], "foperator-arrow-depth=">,
1811                               Group<f_Group>;
1812
1813def fsave_optimization_record : Flag<["-"], "fsave-optimization-record">,
1814  Group<f_Group>, HelpText<"Generate a YAML optimization record file">;
1815def fsave_optimization_record_EQ : Joined<["-"], "fsave-optimization-record=">,
1816  Group<f_Group>, HelpText<"Generate an optimization record file in a specific format">,
1817  MetaVarName<"<format>">;
1818def fno_save_optimization_record : Flag<["-"], "fno-save-optimization-record">,
1819  Group<f_Group>, Flags<[NoArgumentUnused]>;
1820def foptimization_record_file_EQ : Joined<["-"], "foptimization-record-file=">,
1821  Group<f_Group>,
1822  HelpText<"Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.">,
1823  MetaVarName<"<file>">;
1824def foptimization_record_passes_EQ : Joined<["-"], "foptimization-record-passes=">,
1825  Group<f_Group>,
1826  HelpText<"Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)">,
1827  MetaVarName<"<regex>">;
1828
1829def ftest_coverage : Flag<["-"], "ftest-coverage">, Group<f_Group>;
1830def fvectorize : Flag<["-"], "fvectorize">, Group<f_Group>,
1831  HelpText<"Enable the loop vectorization passes">;
1832def fno_vectorize : Flag<["-"], "fno-vectorize">, Group<f_Group>;
1833def : Flag<["-"], "ftree-vectorize">, Alias<fvectorize>;
1834def : Flag<["-"], "fno-tree-vectorize">, Alias<fno_vectorize>;
1835def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group<f_Group>,
1836  HelpText<"Enable the superword-level parallelism vectorization passes">;
1837def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group<f_Group>;
1838def : Flag<["-"], "ftree-slp-vectorize">, Alias<fslp_vectorize>;
1839def : Flag<["-"], "fno-tree-slp-vectorize">, Alias<fno_slp_vectorize>;
1840def Wlarge_by_value_copy_def : Flag<["-"], "Wlarge-by-value-copy">,
1841  HelpText<"Warn if a function definition returns or accepts an object larger "
1842           "in bytes than a given value">, Flags<[HelpHidden]>;
1843def Wlarge_by_value_copy_EQ : Joined<["-"], "Wlarge-by-value-copy=">, Flags<[CC1Option]>;
1844
1845// These "special" warning flags are effectively processed as f_Group flags by the driver:
1846// Just silence warnings about -Wlarger-than for now.
1847def Wlarger_than_EQ : Joined<["-"], "Wlarger-than=">, Group<clang_ignored_f_Group>;
1848def Wlarger_than_ : Joined<["-"], "Wlarger-than-">, Alias<Wlarger_than_EQ>;
1849def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Group<f_Group>, Flags<[DriverOption]>;
1850
1851def : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>;
1852def fthreadsafe_statics : Flag<["-"], "fthreadsafe-statics">, Group<f_Group>;
1853def ftime_report : Flag<["-"], "ftime-report">, Group<f_Group>, Flags<[CC1Option]>;
1854def ftime_trace : Flag<["-"], "ftime-trace">, Group<f_Group>,
1855  HelpText<"Turn on time profiler. Generates JSON file based on output filename.">,
1856  DocBrief<[{
1857Turn on time profiler. Generates JSON file based on output filename. Results
1858can be analyzed with chrome://tracing or `Speedscope App
1859<https://www.speedscope.app>`_ for flamegraph visualization.}]>,
1860  Flags<[CC1Option, CoreOption]>;
1861def ftime_trace_granularity_EQ : Joined<["-"], "ftime-trace-granularity=">, Group<f_Group>,
1862  HelpText<"Minimum time granularity (in microseconds) traced by time profiler">,
1863  Flags<[CC1Option, CoreOption]>;
1864def ftlsmodel_EQ : Joined<["-"], "ftls-model=">, Group<f_Group>, Flags<[CC1Option]>;
1865def ftrapv : Flag<["-"], "ftrapv">, Group<f_Group>, Flags<[CC1Option]>,
1866  HelpText<"Trap on integer overflow">;
1867def ftrapv_handler_EQ : Joined<["-"], "ftrapv-handler=">, Group<f_Group>,
1868  MetaVarName<"<function name>">,
1869  HelpText<"Specify the function to be called on overflow">;
1870def ftrapv_handler : Separate<["-"], "ftrapv-handler">, Group<f_Group>, Flags<[CC1Option]>;
1871def ftrap_function_EQ : Joined<["-"], "ftrap-function=">, Group<f_Group>, Flags<[CC1Option]>,
1872  HelpText<"Issue call to specified function rather than a trap instruction">;
1873def funit_at_a_time : Flag<["-"], "funit-at-a-time">, Group<f_Group>;
1874def funroll_loops : Flag<["-"], "funroll-loops">, Group<f_Group>,
1875  HelpText<"Turn on loop unroller">, Flags<[CC1Option]>;
1876def fno_unroll_loops : Flag<["-"], "fno-unroll-loops">, Group<f_Group>,
1877  HelpText<"Turn off loop unroller">, Flags<[CC1Option]>;
1878def freroll_loops : Flag<["-"], "freroll-loops">, Group<f_Group>,
1879  HelpText<"Turn on loop reroller">, Flags<[CC1Option]>;
1880def fno_reroll_loops : Flag<["-"], "fno-reroll-loops">, Group<f_Group>,
1881  HelpText<"Turn off loop reroller">;
1882def ftrigraphs : Flag<["-"], "ftrigraphs">, Group<f_Group>,
1883  HelpText<"Process trigraph sequences">, Flags<[CC1Option]>;
1884def fno_trigraphs : Flag<["-"], "fno-trigraphs">, Group<f_Group>,
1885  HelpText<"Do not process trigraph sequences">, Flags<[CC1Option]>;
1886def funsigned_bitfields : Flag<["-"], "funsigned-bitfields">, Group<f_Group>;
1887def funsigned_char : Flag<["-"], "funsigned-char">, Group<f_Group>;
1888def fno_unsigned_char : Flag<["-"], "fno-unsigned-char">;
1889def funwind_tables : Flag<["-"], "funwind-tables">, Group<f_Group>;
1890def fuse_cxa_atexit : Flag<["-"], "fuse-cxa-atexit">, Group<f_Group>;
1891def fregister_global_dtors_with_atexit : Flag<["-"], "fregister-global-dtors-with-atexit">, Group<f_Group>, Flags<[CC1Option]>,
1892  HelpText<"Use atexit or __cxa_atexit to register global destructors">;
1893def fuse_init_array : Flag<["-"], "fuse-init-array">, Group<f_Group>, Flags<[CC1Option]>,
1894  HelpText<"Use .init_array instead of .ctors">;
1895def fno_var_tracking : Flag<["-"], "fno-var-tracking">, Group<clang_ignored_f_Group>;
1896def fverbose_asm : Flag<["-"], "fverbose-asm">, Group<f_Group>;
1897def dA : Flag<["-"], "dA">, Alias<fverbose_asm>;
1898def fvisibility_EQ : Joined<["-"], "fvisibility=">, Group<f_Group>,
1899  HelpText<"Set the default symbol visibility for all global declarations">, Values<"hidden,default">;
1900def fvisibility_inlines_hidden : Flag<["-"], "fvisibility-inlines-hidden">, Group<f_Group>,
1901  HelpText<"Give inline C++ member functions hidden visibility by default">,
1902  Flags<[CC1Option]>;
1903def fvisibility_ms_compat : Flag<["-"], "fvisibility-ms-compat">, Group<f_Group>,
1904  HelpText<"Give global types 'default' visibility and global functions and "
1905           "variables 'hidden' visibility by default">;
1906def fvisibility_global_new_delete_hidden : Flag<["-"], "fvisibility-global-new-delete-hidden">, Group<f_Group>,
1907  HelpText<"Give global C++ operator new and delete declarations hidden visibility">, Flags<[CC1Option]>;
1908def fwhole_program_vtables : Flag<["-"], "fwhole-program-vtables">, Group<f_Group>,
1909  Flags<[CoreOption, CC1Option]>,
1910  HelpText<"Enables whole-program vtable optimization. Requires -flto">;
1911def fno_whole_program_vtables : Flag<["-"], "fno-whole-program-vtables">, Group<f_Group>,
1912  Flags<[CoreOption]>;
1913def fsplit_lto_unit : Flag<["-"], "fsplit-lto-unit">, Group<f_Group>,
1914  Flags<[CoreOption, CC1Option]>,
1915  HelpText<"Enables splitting of the LTO unit.">;
1916def fno_split_lto_unit : Flag<["-"], "fno-split-lto-unit">, Group<f_Group>,
1917  Flags<[CoreOption]>;
1918def fforce_emit_vtables : Flag<["-"], "fforce-emit-vtables">, Group<f_Group>,
1919    Flags<[CC1Option]>,
1920    HelpText<"Emits more virtual tables to improve devirtualization">;
1921def fno_force_emit_vtables : Flag<["-"], "fno-force-emit-vtables">, Group<f_Group>,
1922  Flags<[CoreOption]>;
1923
1924def fvirtual_function_elimination : Flag<["-"], "fvirtual-function-elimination">, Group<f_Group>,
1925  Flags<[CoreOption, CC1Option]>,
1926  HelpText<"Enables dead virtual function elimination optimization. Requires -flto=full">;
1927def fno_virtual_function_elimination : Flag<["-"], "fno-virtual-function_elimination">, Group<f_Group>,
1928  Flags<[CoreOption]>;
1929
1930def fwrapv : Flag<["-"], "fwrapv">, Group<f_Group>, Flags<[CC1Option]>,
1931  HelpText<"Treat signed integer overflow as two's complement">;
1932def fwritable_strings : Flag<["-"], "fwritable-strings">, Group<f_Group>, Flags<[CC1Option]>,
1933  HelpText<"Store string literals as writable data">;
1934def fzero_initialized_in_bss : Flag<["-"], "fzero-initialized-in-bss">, Group<f_Group>;
1935def ffunction_sections : Flag<["-"], "ffunction-sections">, Group<f_Group>,
1936  Flags<[CC1Option]>,
1937  HelpText<"Place each function in its own section (ELF Only)">;
1938def fno_function_sections : Flag<["-"], "fno-function-sections">,
1939  Group<f_Group>, Flags<[CC1Option]>;
1940def fdata_sections : Flag <["-"], "fdata-sections">, Group<f_Group>,
1941 Flags<[CC1Option]>, HelpText<"Place each data in its own section (ELF Only)">;
1942def fno_data_sections : Flag <["-"], "fno-data-sections">, Group<f_Group>,
1943  Flags<[CC1Option]>;
1944def fstack_size_section : Flag<["-"], "fstack-size-section">, Group<f_Group>, Flags<[CC1Option]>,
1945  HelpText<"Emit section containing metadata on function stack sizes">;
1946def fno_stack_size_section : Flag<["-"], "fno-stack-size-section">, Group<f_Group>, Flags<[CC1Option]>,
1947  HelpText<"Don't emit section containing metadata on function stack sizes">;
1948
1949def funique_section_names : Flag <["-"], "funique-section-names">,
1950  Group<f_Group>, Flags<[CC1Option]>,
1951  HelpText<"Use unique names for text and data sections (ELF Only)">;
1952def fno_unique_section_names : Flag <["-"], "fno-unique-section-names">,
1953  Group<f_Group>, Flags<[CC1Option]>;
1954
1955def fstrict_return : Flag<["-"], "fstrict-return">, Group<f_Group>,
1956  Flags<[CC1Option]>,
1957  HelpText<"Always treat control flow paths that fall off the end of a "
1958           "non-void function as unreachable">;
1959def fno_strict_return : Flag<["-"], "fno-strict-return">, Group<f_Group>,
1960  Flags<[CC1Option]>;
1961
1962def fallow_editor_placeholders : Flag<["-"], "fallow-editor-placeholders">,
1963  Group<f_Group>, Flags<[CC1Option]>,
1964  HelpText<"Treat editor placeholders as valid source code">;
1965def fno_allow_editor_placeholders : Flag<["-"],
1966  "fno-allow-editor-placeholders">, Group<f_Group>;
1967
1968def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group<f_Group>,
1969  Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;
1970def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>,
1971  Flags<[CC1Option]>;
1972def fdebug_ranges_base_address: Flag <["-"], "fdebug-ranges-base-address">, Group<f_Group>,
1973  Flags<[CC1Option]>, HelpText<"Use DWARF base address selection entries in debug_ranges">;
1974def fno_debug_ranges_base_address: Flag <["-"], "fno-debug-ranges-base-address">, Group<f_Group>,
1975  Flags<[CC1Option]>;
1976def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group<f_Group>,
1977  Flags<[CC1Option]>, HelpText<"Provide minimal debug info in the object/executable to facilitate online symbolication/stack traces in the absence of .dwo/.dwp files when using Split DWARF">;
1978def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group<f_Group>,
1979  Flags<[CC1Option]>;
1980def fdebug_default_version: Joined<["-"], "fdebug-default-version=">, Group<f_Group>,
1981  HelpText<"Default DWARF version to use, if a -g option caused DWARF debug info to be produced">;
1982def fdebug_prefix_map_EQ
1983  : Joined<["-"], "fdebug-prefix-map=">, Group<f_Group>,
1984    Flags<[CC1Option,CC1AsOption]>,
1985    HelpText<"remap file source paths in debug info">;
1986def ffile_prefix_map_EQ
1987  : Joined<["-"], "ffile-prefix-map=">, Group<f_Group>, Flags<[CC1Option]>,
1988    HelpText<"remap file source paths in debug info and predefined preprocessor macros">;
1989def fmacro_prefix_map_EQ
1990  : Joined<["-"], "fmacro-prefix-map=">, Group<Preprocessor_Group>, Flags<[CC1Option]>,
1991    HelpText<"remap file source paths in predefined preprocessor macros">;
1992def fforce_dwarf_frame : Flag<["-"], "fforce-dwarf-frame">, Group<f_Group>, Flags<[CC1Option]>,
1993    HelpText<"Always emit a debug frame section">;
1994def fno_force_dwarf_frame : Flag<["-"], "fno-force-dwarf-frame">, Group<f_Group>, Flags<[CC1Option]>,
1995    HelpText<"Don't always emit a debug frame section">;
1996def g_Flag : Flag<["-"], "g">, Group<g_Group>,
1997  HelpText<"Generate source-level debug information">;
1998def gline_tables_only : Flag<["-"], "gline-tables-only">, Group<gN_Group>,
1999  Flags<[CoreOption]>, HelpText<"Emit debug line number tables only">;
2000def gline_directives_only : Flag<["-"], "gline-directives-only">, Group<gN_Group>,
2001  Flags<[CoreOption]>, HelpText<"Emit debug line info directives only">;
2002def gmlt : Flag<["-"], "gmlt">, Alias<gline_tables_only>;
2003def g0 : Flag<["-"], "g0">, Group<gN_Group>;
2004def g1 : Flag<["-"], "g1">, Group<gN_Group>, Alias<gline_tables_only>;
2005def g2 : Flag<["-"], "g2">, Group<gN_Group>;
2006def g3 : Flag<["-"], "g3">, Group<gN_Group>;
2007def ggdb : Flag<["-"], "ggdb">, Group<gTune_Group>;
2008def ggdb0 : Flag<["-"], "ggdb0">, Group<ggdbN_Group>;
2009def ggdb1 : Flag<["-"], "ggdb1">, Group<ggdbN_Group>;
2010def ggdb2 : Flag<["-"], "ggdb2">, Group<ggdbN_Group>;
2011def ggdb3 : Flag<["-"], "ggdb3">, Group<ggdbN_Group>;
2012def glldb : Flag<["-"], "glldb">, Group<gTune_Group>;
2013def gsce : Flag<["-"], "gsce">, Group<gTune_Group>;
2014// Equivalent to our default dwarf version. Forces usual dwarf emission when
2015// CodeView is enabled.
2016def gdwarf : Flag<["-"], "gdwarf">, Group<g_Group>, Flags<[CoreOption]>,
2017  HelpText<"Generate source-level debug information with the default dwarf version">;
2018def gdwarf_2 : Flag<["-"], "gdwarf-2">, Group<g_Group>,
2019  HelpText<"Generate source-level debug information with dwarf version 2">;
2020def gdwarf_3 : Flag<["-"], "gdwarf-3">, Group<g_Group>,
2021  HelpText<"Generate source-level debug information with dwarf version 3">;
2022def gdwarf_4 : Flag<["-"], "gdwarf-4">, Group<g_Group>,
2023  HelpText<"Generate source-level debug information with dwarf version 4">;
2024def gdwarf_5 : Flag<["-"], "gdwarf-5">, Group<g_Group>,
2025  HelpText<"Generate source-level debug information with dwarf version 5">;
2026
2027def gcodeview : Flag<["-"], "gcodeview">,
2028  HelpText<"Generate CodeView debug information">,
2029  Flags<[CC1Option, CC1AsOption, CoreOption]>;
2030def gcodeview_ghash : Flag<["-"], "gcodeview-ghash">,
2031  HelpText<"Emit type record hashes in a .debug$H section">,
2032  Flags<[CC1Option, CoreOption]>;
2033def gno_codeview_ghash : Flag<["-"], "gno-codeview-ghash">, Flags<[CoreOption]>;
2034def ginline_line_tables : Flag<["-"], "ginline-line-tables">, Flags<[CoreOption]>;
2035def gno_inline_line_tables : Flag<["-"], "gno-inline-line-tables">,
2036  Flags<[CC1Option, CoreOption]>, HelpText<"Don't emit inline line tables">;
2037
2038def gfull : Flag<["-"], "gfull">, Group<g_Group>;
2039def gused : Flag<["-"], "gused">, Group<g_Group>;
2040def gstabs : Joined<["-"], "gstabs">, Group<g_Group>, Flags<[Unsupported]>;
2041def gcoff : Joined<["-"], "gcoff">, Group<g_Group>, Flags<[Unsupported]>;
2042def gxcoff : Joined<["-"], "gxcoff">, Group<g_Group>, Flags<[Unsupported]>;
2043def gvms : Joined<["-"], "gvms">, Group<g_Group>, Flags<[Unsupported]>;
2044def gtoggle : Flag<["-"], "gtoggle">, Group<g_flags_Group>, Flags<[Unsupported]>;
2045def grecord_command_line : Flag<["-"], "grecord-command-line">,
2046  Group<g_flags_Group>;
2047def gno_record_command_line : Flag<["-"], "gno-record-command-line">,
2048  Group<g_flags_Group>;
2049def : Flag<["-"], "grecord-gcc-switches">, Alias<grecord_command_line>;
2050def : Flag<["-"], "gno-record-gcc-switches">, Alias<gno_record_command_line>;
2051def gstrict_dwarf : Flag<["-"], "gstrict-dwarf">, Group<g_flags_Group>;
2052def gno_strict_dwarf : Flag<["-"], "gno-strict-dwarf">, Group<g_flags_Group>;
2053def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
2054def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
2055def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>;
2056def gsplit_dwarf_EQ : Joined<["-"], "gsplit-dwarf=">, Group<g_flags_Group>,
2057  HelpText<"Set DWARF fission mode to either 'split' or 'single'">,
2058  Values<"split,single">;
2059def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
2060def gno_gnu_pubnames : Flag<["-"], "gno-gnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
2061def gpubnames : Flag<["-"], "gpubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
2062def gno_pubnames : Flag<["-"], "gno-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>;
2063def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>;
2064def gmodules : Flag <["-"], "gmodules">, Group<gN_Group>,
2065  HelpText<"Generate debug info with external references to clang modules"
2066           " or precompiled headers">;
2067def gz : Flag<["-"], "gz">, Group<g_flags_Group>,
2068    HelpText<"DWARF debug sections compression type">;
2069def gz_EQ : Joined<["-"], "gz=">, Group<g_flags_Group>,
2070    HelpText<"DWARF debug sections compression type">;
2071def gembed_source : Flag<["-"], "gembed-source">, Group<g_flags_Group>, Flags<[CC1Option]>,
2072    HelpText<"Embed source text in DWARF debug sections">;
2073def gno_embed_source : Flag<["-"], "gno-embed-source">, Group<g_flags_Group>,
2074    Flags<[DriverOption]>,
2075    HelpText<"Restore the default behavior of not embedding source text in DWARF debug sections">;
2076def headerpad__max__install__names : Joined<["-"], "headerpad_max_install_names">;
2077def help : Flag<["-", "--"], "help">, Flags<[CC1Option,CC1AsOption]>,
2078  HelpText<"Display available options">;
2079def index_header_map : Flag<["-"], "index-header-map">, Flags<[CC1Option]>,
2080  HelpText<"Make the next included directory (-I or -F) an indexer header map">;
2081def idirafter : JoinedOrSeparate<["-"], "idirafter">, Group<clang_i_Group>, Flags<[CC1Option]>,
2082  HelpText<"Add directory to AFTER include search path">;
2083def iframework : JoinedOrSeparate<["-"], "iframework">, Group<clang_i_Group>, Flags<[CC1Option]>,
2084  HelpText<"Add directory to SYSTEM framework search path">;
2085def iframeworkwithsysroot : JoinedOrSeparate<["-"], "iframeworkwithsysroot">,
2086  Group<clang_i_Group>,
2087  HelpText<"Add directory to SYSTEM framework search path, "
2088           "absolute paths are relative to -isysroot">,
2089  MetaVarName<"<directory>">, Flags<[CC1Option]>;
2090def imacros : JoinedOrSeparate<["-", "--"], "imacros">, Group<clang_i_Group>, Flags<[CC1Option]>,
2091  HelpText<"Include macros from file before parsing">, MetaVarName<"<file>">;
2092def image__base : Separate<["-"], "image_base">;
2093def include_ : JoinedOrSeparate<["-", "--"], "include">, Group<clang_i_Group>, EnumName<"include">,
2094    MetaVarName<"<file>">, HelpText<"Include file before parsing">, Flags<[CC1Option]>;
2095def include_pch : Separate<["-"], "include-pch">, Group<clang_i_Group>, Flags<[CC1Option]>,
2096  HelpText<"Include precompiled header file">, MetaVarName<"<file>">;
2097def relocatable_pch : Flag<["-", "--"], "relocatable-pch">, Flags<[CC1Option]>,
2098  HelpText<"Whether to build a relocatable precompiled header">;
2099def verify_pch : Flag<["-"], "verify-pch">, Group<Action_Group>, Flags<[CC1Option]>,
2100  HelpText<"Load and verify that a pre-compiled header file is not stale">;
2101def init : Separate<["-"], "init">;
2102def install__name : Separate<["-"], "install_name">;
2103def iprefix : JoinedOrSeparate<["-"], "iprefix">, Group<clang_i_Group>, Flags<[CC1Option]>,
2104  HelpText<"Set the -iwithprefix/-iwithprefixbefore prefix">, MetaVarName<"<dir>">;
2105def iquote : JoinedOrSeparate<["-"], "iquote">, Group<clang_i_Group>, Flags<[CC1Option]>,
2106  HelpText<"Add directory to QUOTE include search path">, MetaVarName<"<directory>">;
2107def isysroot : JoinedOrSeparate<["-"], "isysroot">, Group<clang_i_Group>, Flags<[CC1Option]>,
2108  HelpText<"Set the system root directory (usually /)">, MetaVarName<"<dir>">;
2109def isystem : JoinedOrSeparate<["-"], "isystem">, Group<clang_i_Group>,
2110  Flags<[CC1Option]>,
2111  HelpText<"Add directory to SYSTEM include search path">, MetaVarName<"<directory>">;
2112def isystem_after : JoinedOrSeparate<["-"], "isystem-after">,
2113  Group<clang_i_Group>, Flags<[DriverOption]>, MetaVarName<"<directory>">,
2114  HelpText<"Add directory to end of the SYSTEM include search path">;
2115def iwithprefixbefore : JoinedOrSeparate<["-"], "iwithprefixbefore">, Group<clang_i_Group>,
2116  HelpText<"Set directory to include search path with prefix">, MetaVarName<"<dir>">,
2117  Flags<[CC1Option]>;
2118def iwithprefix : JoinedOrSeparate<["-"], "iwithprefix">, Group<clang_i_Group>, Flags<[CC1Option]>,
2119  HelpText<"Set directory to SYSTEM include search path with prefix">, MetaVarName<"<dir>">;
2120def iwithsysroot : JoinedOrSeparate<["-"], "iwithsysroot">, Group<clang_i_Group>,
2121  HelpText<"Add directory to SYSTEM include search path, "
2122           "absolute paths are relative to -isysroot">, MetaVarName<"<directory>">,
2123  Flags<[CC1Option]>;
2124def ivfsoverlay : JoinedOrSeparate<["-"], "ivfsoverlay">, Group<clang_i_Group>, Flags<[CC1Option]>,
2125  HelpText<"Overlay the virtual filesystem described by file over the real file system">;
2126def imultilib : Separate<["-"], "imultilib">, Group<gfortran_Group>;
2127def keep__private__externs : Flag<["-"], "keep_private_externs">;
2128def l : JoinedOrSeparate<["-"], "l">, Flags<[LinkerInput, RenderJoined]>,
2129        Group<Link_Group>;
2130def lazy__framework : Separate<["-"], "lazy_framework">, Flags<[LinkerInput]>;
2131def lazy__library : Separate<["-"], "lazy_library">, Flags<[LinkerInput]>;
2132def mlittle_endian : Flag<["-"], "mlittle-endian">, Flags<[DriverOption]>;
2133def EL : Flag<["-"], "EL">, Alias<mlittle_endian>;
2134def mbig_endian : Flag<["-"], "mbig-endian">, Flags<[DriverOption]>;
2135def EB : Flag<["-"], "EB">, Alias<mbig_endian>;
2136def m16 : Flag<["-"], "m16">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2137def m32 : Flag<["-"], "m32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2138def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group<m_Group>, Flags<[DriverOption,CC1Option]>,
2139  HelpText<"Enable hexagon-qdsp6 backward compatibility">;
2140def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2141def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2142def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>;
2143def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[DriverOption, CoreOption]>,
2144  HelpText<"Use Intel MCU ABI">;
2145def mno_iamcu : Flag<["-"], "mno-iamcu">, Group<m_Group>, Flags<[DriverOption, CoreOption]>;
2146def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group<clang_ignored_m_Group>;
2147def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group<clang_ignored_m_Group>;
2148def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group<clang_ignored_m_Group>;
2149def malign_branch_EQ : CommaJoined<["-"], "malign-branch=">, Group<m_Group>;
2150def malign_branch_boundary_EQ : Joined<["-"], "malign-branch-boundary=">, Group<m_Group>;
2151def malign_branch_prefix_size_EQ : Joined<["-"], "malign-branch-prefix-size=">, Group<m_Group>;
2152def mbranches_within_32B_boundaries : Flag<["-"], "mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group<m_Group>;
2153def mfancy_math_387 : Flag<["-"], "mfancy-math-387">, Group<clang_ignored_m_Group>;
2154def mlong_calls : Flag<["-"], "mlong-calls">, Group<m_Group>,
2155  HelpText<"Generate branches with extended addressability, usually via indirect jumps.">;
2156def LongDouble_Group : OptionGroup<"<LongDouble group>">, Group<m_Group>,
2157  DocName<"Long double flags">,
2158  DocBrief<[{Selects the long double implementation}]>;
2159def mlong_double_64 : Flag<["-"], "mlong-double-64">, Group<LongDouble_Group>, Flags<[CC1Option]>,
2160  HelpText<"Force long double to be 64 bits">;
2161def mlong_double_80 : Flag<["-"], "mlong-double-80">, Group<LongDouble_Group>, Flags<[CC1Option]>,
2162  HelpText<"Force long double to be 80 bits, padded to 128 bits for storage">;
2163def mlong_double_128 : Flag<["-"], "mlong-double-128">, Group<LongDouble_Group>, Flags<[CC1Option]>,
2164  HelpText<"Force long double to be 128 bits">;
2165def mno_long_calls : Flag<["-"], "mno-long-calls">, Group<m_Group>,
2166  HelpText<"Restore the default behaviour of not generating long calls">;
2167def mexecute_only : Flag<["-"], "mexecute-only">, Group<m_arm_Features_Group>,
2168  HelpText<"Disallow generation of data access to code sections (ARM only)">;
2169def mno_execute_only : Flag<["-"], "mno-execute-only">, Group<m_arm_Features_Group>,
2170  HelpText<"Allow generation of data access to code sections (ARM only)">;
2171def mtp_mode_EQ : Joined<["-"], "mtp=">, Group<m_arm_Features_Group>, Values<"soft,cp15,el0,el1,el2,el3">,
2172  HelpText<"Thread pointer access method (AArch32/AArch64 only)">;
2173def mpure_code : Flag<["-"], "mpure-code">, Alias<mexecute_only>; // Alias for GCC compatibility
2174def mno_pure_code : Flag<["-"], "mno-pure-code">, Alias<mno_execute_only>;
2175def mtvos_version_min_EQ : Joined<["-"], "mtvos-version-min=">, Group<m_Group>;
2176def mappletvos_version_min_EQ : Joined<["-"], "mappletvos-version-min=">, Alias<mtvos_version_min_EQ>;
2177def mtvos_simulator_version_min_EQ : Joined<["-"], "mtvos-simulator-version-min=">;
2178def mappletvsimulator_version_min_EQ : Joined<["-"], "mappletvsimulator-version-min=">, Alias<mtvos_simulator_version_min_EQ>;
2179def mwatchos_version_min_EQ : Joined<["-"], "mwatchos-version-min=">, Group<m_Group>;
2180def mwatchos_simulator_version_min_EQ : Joined<["-"], "mwatchos-simulator-version-min=">;
2181def mwatchsimulator_version_min_EQ : Joined<["-"], "mwatchsimulator-version-min=">, Alias<mwatchos_simulator_version_min_EQ>;
2182def march_EQ : Joined<["-"], "march=">, Group<m_Group>, Flags<[CoreOption]>;
2183def masm_EQ : Joined<["-"], "masm=">, Group<m_Group>, Flags<[DriverOption]>;
2184def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>;
2185def mtls_size_EQ : Joined<["-"], "mtls-size=">, Group<m_Group>, Flags<[DriverOption, CC1Option]>,
2186  HelpText<"Specify bit size of immediate TLS offsets (AArch64 ELF only): "
2187           "12 (for 4KB) | 24 (for 16MB, default) | 32 (for 4GB) | 48 (for 256TB, needs -mcmodel=large)">;
2188def mimplicit_it_EQ : Joined<["-"], "mimplicit-it=">, Group<m_Group>;
2189def mdefault_build_attributes : Joined<["-"], "mdefault-build-attributes">, Group<m_Group>;
2190def mno_default_build_attributes : Joined<["-"], "mno-default-build-attributes">, Group<m_Group>;
2191def mconstant_cfstrings : Flag<["-"], "mconstant-cfstrings">, Group<clang_ignored_m_Group>;
2192def mconsole : Joined<["-"], "mconsole">, Group<m_Group>, Flags<[DriverOption]>;
2193def mwindows : Joined<["-"], "mwindows">, Group<m_Group>, Flags<[DriverOption]>;
2194def mdll : Joined<["-"], "mdll">, Group<m_Group>, Flags<[DriverOption]>;
2195def municode : Joined<["-"], "municode">, Group<m_Group>, Flags<[DriverOption]>;
2196def mthreads : Joined<["-"], "mthreads">, Group<m_Group>, Flags<[DriverOption]>;
2197def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>;
2198def mmcu_EQ : Joined<["-"], "mmcu=">, Group<m_Group>;
2199def mdynamic_no_pic : Joined<["-"], "mdynamic-no-pic">, Group<m_Group>;
2200def mfix_and_continue : Flag<["-"], "mfix-and-continue">, Group<clang_ignored_m_Group>;
2201def mieee_fp : Flag<["-"], "mieee-fp">, Group<clang_ignored_m_Group>;
2202def minline_all_stringops : Flag<["-"], "minline-all-stringops">, Group<clang_ignored_m_Group>;
2203def mno_inline_all_stringops : Flag<["-"], "mno-inline-all-stringops">, Group<clang_ignored_m_Group>;
2204def malign_double : Flag<["-"], "malign-double">, Group<m_Group>, Flags<[CC1Option]>,
2205  HelpText<"Align doubles to two words in structs (x86 only)">;
2206def mfloat_abi_EQ : Joined<["-"], "mfloat-abi=">, Group<m_Group>, Values<"soft,softfp,hard">;
2207def mfpmath_EQ : Joined<["-"], "mfpmath=">, Group<m_Group>;
2208def mfpu_EQ : Joined<["-"], "mfpu=">, Group<m_Group>;
2209def mhwdiv_EQ : Joined<["-"], "mhwdiv=">, Group<m_Group>;
2210def mhwmult_EQ : Joined<["-"], "mhwmult=">, Group<m_Group>;
2211def mglobal_merge : Flag<["-"], "mglobal-merge">, Group<m_Group>, Flags<[CC1Option]>,
2212  HelpText<"Enable merging of globals">;
2213def mhard_float : Flag<["-"], "mhard-float">, Group<m_Group>;
2214def miphoneos_version_min_EQ : Joined<["-"], "miphoneos-version-min=">, Group<m_Group>;
2215def mios_version_min_EQ : Joined<["-"], "mios-version-min=">,
2216  Alias<miphoneos_version_min_EQ>, HelpText<"Set iOS deployment target">;
2217def mios_simulator_version_min_EQ : Joined<["-"], "mios-simulator-version-min=">;
2218def miphonesimulator_version_min_EQ : Joined<["-"], "miphonesimulator-version-min=">, Alias<mios_simulator_version_min_EQ>;
2219def mkernel : Flag<["-"], "mkernel">, Group<m_Group>;
2220def mlinker_version_EQ : Joined<["-"], "mlinker-version=">,
2221  Flags<[DriverOption]>;
2222def mllvm : Separate<["-"], "mllvm">, Flags<[CC1Option,CC1AsOption,CoreOption]>,
2223  HelpText<"Additional arguments to forward to LLVM's option processing">;
2224def mmacosx_version_min_EQ : Joined<["-"], "mmacosx-version-min=">,
2225  Group<m_Group>, HelpText<"Set Mac OS X deployment target">;
2226def mmacos_version_min_EQ : Joined<["-"], "mmacos-version-min=">,
2227  Group<m_Group>, Alias<mmacosx_version_min_EQ>;
2228def mms_bitfields : Flag<["-"], "mms-bitfields">, Group<m_Group>, Flags<[CC1Option]>,
2229  HelpText<"Set the default structure layout to be compatible with the Microsoft compiler standard">;
2230def moutline : Flag<["-"], "moutline">, Group<f_clang_Group>, Flags<[CC1Option]>,
2231    HelpText<"Enable function outlining (AArch64 only)">;
2232def mno_outline : Flag<["-"], "mno-outline">, Group<f_clang_Group>, Flags<[CC1Option]>,
2233    HelpText<"Disable function outlining (AArch64 only)">;
2234def mno_ms_bitfields : Flag<["-"], "mno-ms-bitfields">, Group<m_Group>,
2235  HelpText<"Do not set the default structure layout to be compatible with the Microsoft compiler standard">;
2236def mstackrealign : Flag<["-"], "mstackrealign">, Group<m_Group>, Flags<[CC1Option]>,
2237  HelpText<"Force realign the stack at entry to every function">;
2238def mstack_alignment : Joined<["-"], "mstack-alignment=">, Group<m_Group>, Flags<[CC1Option]>,
2239  HelpText<"Set the stack alignment">;
2240def mstack_probe_size : Joined<["-"], "mstack-probe-size=">, Group<m_Group>, Flags<[CC1Option]>,
2241  HelpText<"Set the stack probe size">;
2242def mstack_arg_probe : Flag<["-"], "mstack-arg-probe">, Group<m_Group>,
2243  HelpText<"Enable stack probes">;
2244def mno_stack_arg_probe : Flag<["-"], "mno-stack-arg-probe">, Group<m_Group>, Flags<[CC1Option]>,
2245  HelpText<"Disable stack probes which are enabled by default">;
2246def mthread_model : Separate<["-"], "mthread-model">, Group<m_Group>, Flags<[CC1Option]>,
2247  HelpText<"The thread model to use, e.g. posix, single (posix by default)">, Values<"posix,single">;
2248def meabi : Separate<["-"], "meabi">, Group<m_Group>, Flags<[CC1Option]>,
2249  HelpText<"Set EABI type, e.g. 4, 5 or gnu (default depends on triple)">, Values<"default,4,5,gnu">;
2250
2251def mno_constant_cfstrings : Flag<["-"], "mno-constant-cfstrings">, Group<m_Group>;
2252def mno_global_merge : Flag<["-"], "mno-global-merge">, Group<m_Group>, Flags<[CC1Option]>,
2253  HelpText<"Disable merging of globals">;
2254def mno_pascal_strings : Flag<["-"], "mno-pascal-strings">,
2255  Alias<fno_pascal_strings>;
2256def mno_red_zone : Flag<["-"], "mno-red-zone">, Group<m_Group>;
2257def mno_tls_direct_seg_refs : Flag<["-"], "mno-tls-direct-seg-refs">, Group<m_Group>, Flags<[CC1Option]>,
2258  HelpText<"Disable direct TLS access through segment registers">;
2259def mno_relax_all : Flag<["-"], "mno-relax-all">, Group<m_Group>;
2260def mno_rtd: Flag<["-"], "mno-rtd">, Group<m_Group>;
2261def mno_soft_float : Flag<["-"], "mno-soft-float">, Group<m_Group>;
2262def mno_stackrealign : Flag<["-"], "mno-stackrealign">, Group<m_Group>;
2263
2264def mretpoline : Flag<["-"], "mretpoline">, Group<m_Group>, Flags<[CoreOption,DriverOption]>;
2265def mno_retpoline : Flag<["-"], "mno-retpoline">, Group<m_Group>, Flags<[CoreOption,DriverOption]>;
2266def mspeculative_load_hardening : Flag<["-"], "mspeculative-load-hardening">,
2267  Group<m_Group>, Flags<[CoreOption,CC1Option]>;
2268def mno_speculative_load_hardening : Flag<["-"], "mno-speculative-load-hardening">,
2269  Group<m_Group>, Flags<[CoreOption]>;
2270def mlvi_hardening : Flag<["-"], "mlvi-hardening">, Group<m_Group>, Flags<[CoreOption,DriverOption]>,
2271  HelpText<"Enable all mitigations for Load Value Injection (LVI)">;
2272def mno_lvi_hardening : Flag<["-"], "mno-lvi-hardening">, Group<m_Group>, Flags<[CoreOption,DriverOption]>,
2273  HelpText<"Disable mitigations for Load Value Injection (LVI)">;
2274def mlvi_cfi : Flag<["-"], "mlvi-cfi">, Group<m_Group>, Flags<[CoreOption,DriverOption]>,
2275  HelpText<"Enable only control-flow mitigations for Load Value Injection (LVI)">;
2276def mno_lvi_cfi : Flag<["-"], "mno-lvi-cfi">, Group<m_Group>, Flags<[CoreOption,DriverOption]>,
2277  HelpText<"Disable control-flow mitigations for Load Value Injection (LVI)">;
2278
2279def mrelax : Flag<["-"], "mrelax">, Group<m_riscv_Features_Group>,
2280  HelpText<"Enable linker relaxation">;
2281def mno_relax : Flag<["-"], "mno-relax">, Group<m_riscv_Features_Group>,
2282  HelpText<"Disable linker relaxation">;
2283def msave_restore : Flag<["-"], "msave-restore">, Group<m_riscv_Features_Group>,
2284  HelpText<"Enable using library calls for save and restore">;
2285def mno_save_restore : Flag<["-"], "mno-save-restore">, Group<m_riscv_Features_Group>,
2286  HelpText<"Disable using library calls for save and restore">;
2287def mcmodel_EQ_medlow : Flag<["-"], "mcmodel=medlow">, Group<m_riscv_Features_Group>,
2288  Flags<[CC1Option]>, Alias<mcmodel_EQ>, AliasArgs<["small"]>,
2289  HelpText<"Equivalent to -mcmodel=small, compatible with RISC-V gcc.">;
2290def mcmodel_EQ_medany : Flag<["-"], "mcmodel=medany">, Group<m_riscv_Features_Group>,
2291  Flags<[CC1Option]>, Alias<mcmodel_EQ>, AliasArgs<["medium"]>,
2292  HelpText<"Equivalent to -mcmodel=medium, compatible with RISC-V gcc.">;
2293
2294def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_arm_Features_Group>,
2295  HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">;
2296def mno_unaligned_access : Flag<["-"], "mno-unaligned-access">, Group<m_arm_Features_Group>,
2297  HelpText<"Force all memory accesses to be aligned (AArch32/AArch64 only)">;
2298def mstrict_align : Flag<["-"], "mstrict-align">, Alias<mno_unaligned_access>, Flags<[CC1Option,HelpHidden]>,
2299  HelpText<"Force all memory accesses to be aligned (same as mno-unaligned-access)">;
2300def mno_thumb : Flag<["-"], "mno-thumb">, Group<m_arm_Features_Group>;
2301def mrestrict_it: Flag<["-"], "mrestrict-it">, Group<m_arm_Features_Group>,
2302  HelpText<"Disallow generation of deprecated IT blocks for ARMv8. It is on by default for ARMv8 Thumb mode.">;
2303def mno_restrict_it: Flag<["-"], "mno-restrict-it">, Group<m_arm_Features_Group>,
2304  HelpText<"Allow generation of deprecated IT blocks for ARMv8. It is off by default for ARMv8 Thumb mode">;
2305def marm : Flag<["-"], "marm">, Alias<mno_thumb>;
2306def ffixed_r9 : Flag<["-"], "ffixed-r9">, Group<m_arm_Features_Group>,
2307  HelpText<"Reserve the r9 register (ARM only)">;
2308def mno_movt : Flag<["-"], "mno-movt">, Group<m_arm_Features_Group>,
2309  HelpText<"Disallow use of movt/movw pairs (ARM only)">;
2310def mcrc : Flag<["-"], "mcrc">, Group<m_Group>,
2311  HelpText<"Allow use of CRC instructions (ARM/Mips only)">;
2312def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>,
2313  HelpText<"Disallow use of CRC instructions (ARM only)">;
2314def mno_neg_immediates: Flag<["-"], "mno-neg-immediates">, Group<m_arm_Features_Group>,
2315  HelpText<"Disallow converting instructions with negative immediates to their negation or inversion.">;
2316def mcmse : Flag<["-"], "mcmse">, Group<m_arm_Features_Group>,
2317  Flags<[DriverOption,CC1Option]>,
2318  HelpText<"Allow use of CMSE (Armv8-M Security Extensions)">;
2319
2320def mgeneral_regs_only : Flag<["-"], "mgeneral-regs-only">, Group<m_aarch64_Features_Group>,
2321  HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">;
2322def mfix_cortex_a53_835769 : Flag<["-"], "mfix-cortex-a53-835769">,
2323  Group<m_aarch64_Features_Group>,
2324  HelpText<"Workaround Cortex-A53 erratum 835769 (AArch64 only)">;
2325def mno_fix_cortex_a53_835769 : Flag<["-"], "mno-fix-cortex-a53-835769">,
2326  Group<m_aarch64_Features_Group>,
2327  HelpText<"Don't workaround Cortex-A53 erratum 835769 (AArch64 only)">;
2328foreach i = {1-31} in
2329  def ffixed_x#i : Flag<["-"], "ffixed-x"#i>, Group<m_Group>,
2330    HelpText<"Reserve the "#i#" register (AArch64/RISC-V only)">;
2331
2332foreach i = {8-15,18} in
2333  def fcall_saved_x#i : Flag<["-"], "fcall-saved-x"#i>, Group<m_aarch64_Features_Group>,
2334    HelpText<"Make the x"#i#" register call-saved (AArch64 only)">;
2335
2336def msign_return_address_EQ : Joined<["-"], "msign-return-address=">,
2337  Flags<[CC1Option]>, Group<m_Group>, Values<"none,all,non-leaf">,
2338  HelpText<"Select return address signing scope">;
2339def mbranch_protection_EQ : Joined<["-"], "mbranch-protection=">,
2340  HelpText<"Enforce targets of indirect branches and function returns">;
2341
2342def msimd128 : Flag<["-"], "msimd128">, Group<m_wasm_Features_Group>;
2343def munimplemented_simd128 : Flag<["-"], "munimplemented-simd128">, Group<m_wasm_Features_Group>;
2344def mno_unimplemented_simd128 : Flag<["-"], "mno-unimplemented-simd128">, Group<m_wasm_Features_Group>;
2345def mno_simd128 : Flag<["-"], "mno-simd128">, Group<m_wasm_Features_Group>;
2346def mnontrapping_fptoint : Flag<["-"], "mnontrapping-fptoint">, Group<m_wasm_Features_Group>;
2347def mno_nontrapping_fptoint : Flag<["-"], "mno-nontrapping-fptoint">, Group<m_wasm_Features_Group>;
2348def msign_ext : Flag<["-"], "msign-ext">, Group<m_wasm_Features_Group>;
2349def mno_sign_ext : Flag<["-"], "mno-sign-ext">, Group<m_wasm_Features_Group>;
2350def mexception_handing : Flag<["-"], "mexception-handling">, Group<m_wasm_Features_Group>;
2351def mno_exception_handing : Flag<["-"], "mno-exception-handling">, Group<m_wasm_Features_Group>;
2352def matomics : Flag<["-"], "matomics">, Group<m_wasm_Features_Group>;
2353def mno_atomics : Flag<["-"], "mno-atomics">, Group<m_wasm_Features_Group>;
2354def mbulk_memory : Flag<["-"], "mbulk-memory">, Group<m_wasm_Features_Group>;
2355def mno_bulk_memory : Flag<["-"], "mno-bulk-memory">, Group<m_wasm_Features_Group>;
2356def mmutable_globals : Flag<["-"], "mmutable-globals">, Group<m_wasm_Features_Group>;
2357def mno_mutable_globals : Flag<["-"], "mno-mutable-globals">, Group<m_wasm_Features_Group>;
2358def mmultivalue : Flag<["-"], "mmultivalue">, Group<m_wasm_Features_Group>;
2359def mno_multivalue : Flag<["-"], "mno-multivalue">, Group<m_wasm_Features_Group>;
2360def mtail_call : Flag<["-"], "mtail-call">, Group<m_wasm_Features_Group>;
2361def mno_tail_call : Flag<["-"], "mno-tail-call">, Group<m_wasm_Features_Group>;
2362def mreference_types : Flag<["-"], "mreference-types">, Group<m_wasm_Features_Group>;
2363def mno_reference_types : Flag<["-"], "mno-reference-types">, Group<m_wasm_Features_Group>;
2364
2365def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
2366  Flags<[HelpHidden]>,
2367  Group<m_Group>,
2368  HelpText<"Generate additional code for specified <version> of debugger ABI (AMDGPU only)">,
2369  MetaVarName<"<version>">;
2370
2371def mcode_object_v3 : Flag<["-"], "mcode-object-v3">, Group<m_amdgpu_Features_Group>,
2372  HelpText<"Enable code object v3 (AMDGPU only)">;
2373def mno_code_object_v3 : Flag<["-"], "mno-code-object-v3">, Group<m_amdgpu_Features_Group>,
2374  HelpText<"Disable code object v3 (AMDGPU only)">;
2375def mxnack : Flag<["-"], "mxnack">, Group<m_amdgpu_Features_Group>,
2376  HelpText<"Enable XNACK (AMDGPU only)">;
2377def mno_xnack : Flag<["-"], "mno-xnack">, Group<m_amdgpu_Features_Group>,
2378  HelpText<"Disable XNACK (AMDGPU only)">;
2379def msram_ecc : Flag<["-"], "msram-ecc">, Group<m_amdgpu_Features_Group>,
2380  HelpText<"Enable SRAM ECC (AMDGPU only)">;
2381def mno_sram_ecc : Flag<["-"], "mno-sram-ecc">, Group<m_amdgpu_Features_Group>,
2382  HelpText<"Disable SRAM ECC (AMDGPU only)">;
2383
2384def mcumode : Flag<["-"], "mcumode">, Group<m_amdgpu_Features_Group>,
2385  HelpText<"CU wavefront execution mode is used (AMDGPU only)">;
2386def mno_cumode : Flag<["-"], "mno-cumode">, Group<m_amdgpu_Features_Group>,
2387  HelpText<"WGP wavefront execution mode is used (AMDGPU only)">;
2388
2389def mwavefrontsize64 : Flag<["-"], "mwavefrontsize64">,
2390  Group<m_Group>, HelpText<"Wavefront size 64 is used">;
2391def mno_wavefrontsize64 : Flag<["-"], "mno-wavefrontsize64">,
2392  Group<m_Group>, HelpText<"Wavefront size 32 is used">;
2393
2394def faltivec : Flag<["-"], "faltivec">, Group<f_Group>, Flags<[DriverOption]>;
2395def fno_altivec : Flag<["-"], "fno-altivec">, Group<f_Group>, Flags<[DriverOption]>;
2396def maltivec : Flag<["-"], "maltivec">, Group<m_ppc_Features_Group>;
2397def mno_altivec : Flag<["-"], "mno-altivec">, Group<m_ppc_Features_Group>;
2398def mspe : Flag<["-"], "mspe">, Group<m_ppc_Features_Group>;
2399def mno_spe : Flag<["-"], "mno-spe">, Group<m_ppc_Features_Group>;
2400def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
2401def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
2402def msecure_plt : Flag<["-"], "msecure-plt">, Group<m_ppc_Features_Group>;
2403def mpower8_vector : Flag<["-"], "mpower8-vector">,
2404    Group<m_ppc_Features_Group>;
2405def mno_power8_vector : Flag<["-"], "mno-power8-vector">,
2406    Group<m_ppc_Features_Group>;
2407def mpower9_vector : Flag<["-"], "mpower9-vector">,
2408    Group<m_ppc_Features_Group>;
2409def mno_power9_vector : Flag<["-"], "mno-power9-vector">,
2410    Group<m_ppc_Features_Group>;
2411def mpower8_crypto : Flag<["-"], "mcrypto">,
2412    Group<m_ppc_Features_Group>;
2413def mnopower8_crypto : Flag<["-"], "mno-crypto">,
2414    Group<m_ppc_Features_Group>;
2415def mdirect_move : Flag<["-"], "mdirect-move">,
2416    Group<m_ppc_Features_Group>;
2417def mnodirect_move : Flag<["-"], "mno-direct-move">,
2418    Group<m_ppc_Features_Group>;
2419def mhtm : Flag<["-"], "mhtm">, Group<m_ppc_Features_Group>;
2420def mno_htm : Flag<["-"], "mno-htm">, Group<m_ppc_Features_Group>;
2421def mfprnd : Flag<["-"], "mfprnd">, Group<m_ppc_Features_Group>;
2422def mno_fprnd : Flag<["-"], "mno-fprnd">, Group<m_ppc_Features_Group>;
2423def mcmpb : Flag<["-"], "mcmpb">, Group<m_ppc_Features_Group>;
2424def mno_cmpb : Flag<["-"], "mno-cmpb">, Group<m_ppc_Features_Group>;
2425def misel : Flag<["-"], "misel">, Group<m_ppc_Features_Group>;
2426def mno_isel : Flag<["-"], "mno-isel">, Group<m_ppc_Features_Group>;
2427def mmfocrf : Flag<["-"], "mmfocrf">, Group<m_ppc_Features_Group>;
2428def mmfcrf : Flag<["-"], "mmfcrf">, Alias<mmfocrf>;
2429def mno_mfocrf : Flag<["-"], "mno-mfocrf">, Group<m_ppc_Features_Group>;
2430def mno_mfcrf : Flag<["-"], "mno-mfcrf">, Alias<mno_mfocrf>;
2431def mpopcntd : Flag<["-"], "mpopcntd">, Group<m_ppc_Features_Group>;
2432def mno_popcntd : Flag<["-"], "mno-popcntd">, Group<m_ppc_Features_Group>;
2433def mqpx : Flag<["-"], "mqpx">, Group<m_ppc_Features_Group>;
2434def mno_qpx : Flag<["-"], "mno-qpx">, Group<m_ppc_Features_Group>;
2435def mcrbits : Flag<["-"], "mcrbits">, Group<m_ppc_Features_Group>;
2436def mno_crbits : Flag<["-"], "mno-crbits">, Group<m_ppc_Features_Group>;
2437def minvariant_function_descriptors :
2438  Flag<["-"], "minvariant-function-descriptors">, Group<m_ppc_Features_Group>;
2439def mno_invariant_function_descriptors :
2440  Flag<["-"], "mno-invariant-function-descriptors">,
2441  Group<m_ppc_Features_Group>;
2442def mfloat128: Flag<["-"], "mfloat128">,
2443    Group<m_ppc_Features_Group>;
2444def mno_float128 : Flag<["-"], "mno-float128">,
2445    Group<m_ppc_Features_Group>;
2446def mlongcall: Flag<["-"], "mlongcall">,
2447    Group<m_ppc_Features_Group>;
2448def mno_longcall : Flag<["-"], "mno-longcall">,
2449    Group<m_ppc_Features_Group>;
2450def maix_struct_return : Flag<["-"], "maix-struct-return">,
2451  Group<m_Group>, Flags<[CC1Option]>,
2452  HelpText<"Return all structs in memory (PPC32 only)">;
2453def msvr4_struct_return : Flag<["-"], "msvr4-struct-return">,
2454  Group<m_Group>, Flags<[CC1Option]>,
2455  HelpText<"Return small structs in registers (PPC32 only)">;
2456
2457def mvx : Flag<["-"], "mvx">, Group<m_Group>;
2458def mno_vx : Flag<["-"], "mno-vx">, Group<m_Group>;
2459
2460def fzvector : Flag<["-"], "fzvector">, Group<f_Group>, Flags<[CC1Option]>,
2461  HelpText<"Enable System z vector language extension">;
2462def fno_zvector : Flag<["-"], "fno-zvector">, Group<f_Group>,
2463  Flags<[CC1Option]>;
2464def mzvector : Flag<["-"], "mzvector">, Alias<fzvector>;
2465def mno_zvector : Flag<["-"], "mno-zvector">, Alias<fno_zvector>;
2466
2467def mbackchain : Flag<["-"], "mbackchain">, Group<m_Group>, Flags<[DriverOption,CC1Option]>,
2468  HelpText<"Link stack frames through backchain on System Z">;
2469def mno_backchain : Flag<["-"], "mno-backchain">, Group<m_Group>, Flags<[DriverOption,CC1Option]>;
2470
2471def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>;
2472def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>;
2473def momit_leaf_frame_pointer : Flag<["-"], "momit-leaf-frame-pointer">, Group<m_Group>,
2474  HelpText<"Omit frame pointer setup for leaf functions">;
2475def moslib_EQ : Joined<["-"], "moslib=">, Group<m_Group>;
2476def mpascal_strings : Flag<["-"], "mpascal-strings">, Alias<fpascal_strings>;
2477def mred_zone : Flag<["-"], "mred-zone">, Group<m_Group>;
2478def mtls_direct_seg_refs : Flag<["-"], "mtls-direct-seg-refs">, Group<m_Group>,
2479  HelpText<"Enable direct TLS access through segment registers (default)">;
2480def mregparm_EQ : Joined<["-"], "mregparm=">, Group<m_Group>;
2481def mrelax_all : Flag<["-"], "mrelax-all">, Group<m_Group>, Flags<[CC1Option,CC1AsOption]>,
2482  HelpText<"(integrated-as) Relax all machine instructions">;
2483def mincremental_linker_compatible : Flag<["-"], "mincremental-linker-compatible">, Group<m_Group>,
2484  Flags<[CC1Option,CC1AsOption]>,
2485  HelpText<"(integrated-as) Emit an object file which can be used with an incremental linker">;
2486def mno_incremental_linker_compatible : Flag<["-"], "mno-incremental-linker-compatible">, Group<m_Group>,
2487  HelpText<"(integrated-as) Emit an object file which cannot be used with an incremental linker">;
2488def mrtd : Flag<["-"], "mrtd">, Group<m_Group>, Flags<[CC1Option]>,
2489  HelpText<"Make StdCall calling convention the default">;
2490def msmall_data_threshold_EQ : Joined <["-"], "msmall-data-threshold=">,
2491  Group<m_Group>, Alias<G>;
2492def msoft_float : Flag<["-"], "msoft-float">, Group<m_Group>, Flags<[CC1Option]>,
2493  HelpText<"Use software floating point">;
2494def mno_implicit_float : Flag<["-"], "mno-implicit-float">, Group<m_Group>,
2495  HelpText<"Don't generate implicit floating point instructions">;
2496def mimplicit_float : Flag<["-"], "mimplicit-float">, Group<m_Group>;
2497def mrecip : Flag<["-"], "mrecip">, Group<m_Group>;
2498def mrecip_EQ : CommaJoined<["-"], "mrecip=">, Group<m_Group>, Flags<[CC1Option]>;
2499def mprefer_vector_width_EQ : Joined<["-"], "mprefer-vector-width=">, Group<m_Group>, Flags<[CC1Option]>,
2500  HelpText<"Specifies preferred vector width for auto-vectorization. Defaults to 'none' which allows target specific decisions.">;
2501def mpie_copy_relocations : Flag<["-"], "mpie-copy-relocations">, Group<m_Group>,
2502  Flags<[CC1Option]>,
2503  HelpText<"Use copy relocations support for PIE builds">;
2504def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group<m_Group>;
2505def mfentry : Flag<["-"], "mfentry">, HelpText<"Insert calls to fentry at function entry (x86/SystemZ only)">,
2506  Flags<[CC1Option]>, Group<m_Group>;
2507def mnop_mcount : Flag<["-"], "mnop-mcount">, HelpText<"Generate mcount/__fentry__ calls as nops. To activate they need to be patched in.">,
2508  Flags<[CC1Option]>, Group<m_Group>;
2509def mrecord_mcount : Flag<["-"], "mrecord-mcount">, HelpText<"Generate a __mcount_loc section entry for each __fentry__ call.">,
2510  Flags<[CC1Option]>, Group<m_Group>;
2511def mpacked_stack : Flag<["-"], "mpacked-stack">, HelpText<"Use packed stack layout (SystemZ only).">,
2512  Flags<[CC1Option]>, Group<m_Group>;
2513def mno_packed_stack : Flag<["-"], "mno-packed-stack">, Flags<[CC1Option]>, Group<m_Group>;
2514def mips16 : Flag<["-"], "mips16">, Group<m_mips_Features_Group>;
2515def mno_mips16 : Flag<["-"], "mno-mips16">, Group<m_mips_Features_Group>;
2516def mmicromips : Flag<["-"], "mmicromips">, Group<m_mips_Features_Group>;
2517def mno_micromips : Flag<["-"], "mno-micromips">, Group<m_mips_Features_Group>;
2518def mxgot : Flag<["-"], "mxgot">, Group<m_mips_Features_Group>;
2519def mno_xgot : Flag<["-"], "mno-xgot">, Group<m_mips_Features_Group>;
2520def mldc1_sdc1 : Flag<["-"], "mldc1-sdc1">, Group<m_mips_Features_Group>;
2521def mno_ldc1_sdc1 : Flag<["-"], "mno-ldc1-sdc1">, Group<m_mips_Features_Group>;
2522def mcheck_zero_division : Flag<["-"], "mcheck-zero-division">,
2523                           Group<m_mips_Features_Group>;
2524def mno_check_zero_division : Flag<["-"], "mno-check-zero-division">,
2525                              Group<m_mips_Features_Group>;
2526def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
2527                           Group<m_mips_Features_Group>;
2528def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
2529  IgnoredGCCCompat;
2530def mno_branch_likely : Flag<["-"], "mno-branch-likely">, Group<m_Group>,
2531  IgnoredGCCCompat;
2532def mindirect_jump_EQ : Joined<["-"], "mindirect-jump=">,
2533  Group<m_mips_Features_Group>,
2534  HelpText<"Change indirect jump instructions to inhibit speculation">;
2535def mdsp : Flag<["-"], "mdsp">, Group<m_mips_Features_Group>;
2536def mno_dsp : Flag<["-"], "mno-dsp">, Group<m_mips_Features_Group>;
2537def mdspr2 : Flag<["-"], "mdspr2">, Group<m_mips_Features_Group>;
2538def mno_dspr2 : Flag<["-"], "mno-dspr2">, Group<m_mips_Features_Group>;
2539def msingle_float : Flag<["-"], "msingle-float">, Group<m_mips_Features_Group>;
2540def mdouble_float : Flag<["-"], "mdouble-float">, Group<m_mips_Features_Group>;
2541def mmadd4 : Flag<["-"], "mmadd4">, Group<m_mips_Features_Group>,
2542  HelpText<"Enable the generation of 4-operand madd.s, madd.d and related instructions.">;
2543def mno_madd4 : Flag<["-"], "mno-madd4">, Group<m_mips_Features_Group>,
2544  HelpText<"Disable the generation of 4-operand madd.s, madd.d and related instructions.">;
2545def mmsa : Flag<["-"], "mmsa">, Group<m_mips_Features_Group>,
2546  HelpText<"Enable MSA ASE (MIPS only)">;
2547def mno_msa : Flag<["-"], "mno-msa">, Group<m_mips_Features_Group>,
2548  HelpText<"Disable MSA ASE (MIPS only)">;
2549def mmt : Flag<["-"], "mmt">, Group<m_mips_Features_Group>,
2550  HelpText<"Enable MT ASE (MIPS only)">;
2551def mno_mt : Flag<["-"], "mno-mt">, Group<m_mips_Features_Group>,
2552  HelpText<"Disable MT ASE (MIPS only)">;
2553def mfp64 : Flag<["-"], "mfp64">, Group<m_mips_Features_Group>,
2554  HelpText<"Use 64-bit floating point registers (MIPS only)">;
2555def mfp32 : Flag<["-"], "mfp32">, Group<m_mips_Features_Group>,
2556  HelpText<"Use 32-bit floating point registers (MIPS only)">;
2557def mgpopt : Flag<["-"], "mgpopt">, Group<m_mips_Features_Group>,
2558  HelpText<"Use GP relative accesses for symbols known to be in a small"
2559           " data section (MIPS)">;
2560def mno_gpopt : Flag<["-"], "mno-gpopt">, Group<m_mips_Features_Group>,
2561  HelpText<"Do not use GP relative accesses for symbols known to be in a small"
2562           " data section (MIPS)">;
2563def mlocal_sdata : Flag<["-"], "mlocal-sdata">,
2564  Group<m_mips_Features_Group>,
2565  HelpText<"Extend the -G behaviour to object local data (MIPS)">;
2566def mno_local_sdata : Flag<["-"], "mno-local-sdata">,
2567  Group<m_mips_Features_Group>,
2568  HelpText<"Do not extend the -G behaviour to object local data (MIPS)">;
2569def mextern_sdata : Flag<["-"], "mextern-sdata">,
2570  Group<m_mips_Features_Group>,
2571  HelpText<"Assume that externally defined data is in the small data if it"
2572           " meets the -G <size> threshold (MIPS)">;
2573def mno_extern_sdata : Flag<["-"], "mno-extern-sdata">,
2574  Group<m_mips_Features_Group>,
2575  HelpText<"Do not assume that externally defined data is in the small data if"
2576           " it meets the -G <size> threshold (MIPS)">;
2577def membedded_data : Flag<["-"], "membedded-data">,
2578  Group<m_mips_Features_Group>,
2579  HelpText<"Place constants in the .rodata section instead of the .sdata "
2580           "section even if they meet the -G <size> threshold (MIPS)">;
2581def mno_embedded_data : Flag<["-"], "mno-embedded-data">,
2582  Group<m_mips_Features_Group>,
2583  HelpText<"Do not place constants in the .rodata section instead of the "
2584           ".sdata if they meet the -G <size> threshold (MIPS)">;
2585def mnan_EQ : Joined<["-"], "mnan=">, Group<m_mips_Features_Group>;
2586def mabs_EQ : Joined<["-"], "mabs=">, Group<m_mips_Features_Group>;
2587def mabicalls : Flag<["-"], "mabicalls">, Group<m_mips_Features_Group>,
2588  HelpText<"Enable SVR4-style position-independent code (Mips only)">;
2589def mno_abicalls : Flag<["-"], "mno-abicalls">, Group<m_mips_Features_Group>,
2590  HelpText<"Disable SVR4-style position-independent code (Mips only)">;
2591def mno_crc : Flag<["-"], "mno-crc">, Group<m_mips_Features_Group>,
2592  HelpText<"Disallow use of CRC instructions (Mips only)">;
2593def mvirt : Flag<["-"], "mvirt">, Group<m_mips_Features_Group>;
2594def mno_virt : Flag<["-"], "mno-virt">, Group<m_mips_Features_Group>;
2595def mginv : Flag<["-"], "mginv">, Group<m_mips_Features_Group>;
2596def mno_ginv : Flag<["-"], "mno-ginv">, Group<m_mips_Features_Group>;
2597def mips1 : Flag<["-"], "mips1">,
2598  Alias<march_EQ>, AliasArgs<["mips1"]>, Group<m_mips_Features_Group>,
2599  HelpText<"Equivalent to -march=mips1">, Flags<[HelpHidden]>;
2600def mips2 : Flag<["-"], "mips2">,
2601  Alias<march_EQ>, AliasArgs<["mips2"]>, Group<m_mips_Features_Group>,
2602  HelpText<"Equivalent to -march=mips2">, Flags<[HelpHidden]>;
2603def mips3 : Flag<["-"], "mips3">,
2604  Alias<march_EQ>, AliasArgs<["mips3"]>, Group<m_mips_Features_Group>,
2605  HelpText<"Equivalent to -march=mips3">, Flags<[HelpHidden]>;
2606def mips4 : Flag<["-"], "mips4">,
2607  Alias<march_EQ>, AliasArgs<["mips4"]>, Group<m_mips_Features_Group>,
2608  HelpText<"Equivalent to -march=mips4">, Flags<[HelpHidden]>;
2609def mips5 : Flag<["-"], "mips5">,
2610  Alias<march_EQ>, AliasArgs<["mips5"]>, Group<m_mips_Features_Group>,
2611  HelpText<"Equivalent to -march=mips5">, Flags<[HelpHidden]>;
2612def mips32 : Flag<["-"], "mips32">,
2613  Alias<march_EQ>, AliasArgs<["mips32"]>, Group<m_mips_Features_Group>,
2614  HelpText<"Equivalent to -march=mips32">, Flags<[HelpHidden]>;
2615def mips32r2 : Flag<["-"], "mips32r2">,
2616  Alias<march_EQ>, AliasArgs<["mips32r2"]>, Group<m_mips_Features_Group>,
2617  HelpText<"Equivalent to -march=mips32r2">, Flags<[HelpHidden]>;
2618def mips32r3 : Flag<["-"], "mips32r3">,
2619  Alias<march_EQ>, AliasArgs<["mips32r3"]>, Group<m_mips_Features_Group>,
2620  HelpText<"Equivalent to -march=mips32r3">, Flags<[HelpHidden]>;
2621def mips32r5 : Flag<["-"], "mips32r5">,
2622  Alias<march_EQ>, AliasArgs<["mips32r5"]>, Group<m_mips_Features_Group>,
2623  HelpText<"Equivalent to -march=mips32r5">, Flags<[HelpHidden]>;
2624def mips32r6 : Flag<["-"], "mips32r6">,
2625  Alias<march_EQ>, AliasArgs<["mips32r6"]>, Group<m_mips_Features_Group>,
2626  HelpText<"Equivalent to -march=mips32r6">, Flags<[HelpHidden]>;
2627def mips64 : Flag<["-"], "mips64">,
2628  Alias<march_EQ>, AliasArgs<["mips64"]>, Group<m_mips_Features_Group>,
2629  HelpText<"Equivalent to -march=mips64">, Flags<[HelpHidden]>;
2630def mips64r2 : Flag<["-"], "mips64r2">,
2631  Alias<march_EQ>, AliasArgs<["mips64r2"]>, Group<m_mips_Features_Group>,
2632  HelpText<"Equivalent to -march=mips64r2">, Flags<[HelpHidden]>;
2633def mips64r3 : Flag<["-"], "mips64r3">,
2634  Alias<march_EQ>, AliasArgs<["mips64r3"]>, Group<m_mips_Features_Group>,
2635  HelpText<"Equivalent to -march=mips64r3">, Flags<[HelpHidden]>;
2636def mips64r5 : Flag<["-"], "mips64r5">,
2637  Alias<march_EQ>, AliasArgs<["mips64r5"]>, Group<m_mips_Features_Group>,
2638  HelpText<"Equivalent to -march=mips64r5">, Flags<[HelpHidden]>;
2639def mips64r6 : Flag<["-"], "mips64r6">,
2640  Alias<march_EQ>, AliasArgs<["mips64r6"]>, Group<m_mips_Features_Group>,
2641  HelpText<"Equivalent to -march=mips64r6">, Flags<[HelpHidden]>;
2642def mfpxx : Flag<["-"], "mfpxx">, Group<m_mips_Features_Group>,
2643  HelpText<"Avoid FPU mode dependent operations when used with the O32 ABI">,
2644  Flags<[HelpHidden]>;
2645def modd_spreg : Flag<["-"], "modd-spreg">, Group<m_mips_Features_Group>,
2646  HelpText<"Enable odd single-precision floating point registers">,
2647  Flags<[HelpHidden]>;
2648def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_mips_Features_Group>,
2649  HelpText<"Disable odd single-precision floating point registers">,
2650  Flags<[HelpHidden]>;
2651def mrelax_pic_calls : Flag<["-"], "mrelax-pic-calls">,
2652  Group<m_mips_Features_Group>,
2653  HelpText<"Produce relaxation hints for linkers to try optimizing PIC "
2654           "call sequences into direct calls (MIPS only)">, Flags<[HelpHidden]>;
2655def mno_relax_pic_calls : Flag<["-"], "mno-relax-pic-calls">,
2656  Group<m_mips_Features_Group>,
2657  HelpText<"Do not produce relaxation hints for linkers to try optimizing PIC "
2658           "call sequences into direct calls (MIPS only)">, Flags<[HelpHidden]>;
2659def mglibc : Flag<["-"], "mglibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
2660def muclibc : Flag<["-"], "muclibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
2661def module_file_info : Flag<["-"], "module-file-info">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
2662  HelpText<"Provide information about a particular module file">;
2663def mthumb : Flag<["-"], "mthumb">, Group<m_Group>;
2664def mtune_EQ : Joined<["-"], "mtune=">, Group<m_Group>;
2665def multi__module : Flag<["-"], "multi_module">;
2666def multiply__defined__unused : Separate<["-"], "multiply_defined_unused">;
2667def multiply__defined : Separate<["-"], "multiply_defined">;
2668def mwarn_nonportable_cfstrings : Flag<["-"], "mwarn-nonportable-cfstrings">, Group<m_Group>;
2669def no_canonical_prefixes : Flag<["-"], "no-canonical-prefixes">, Flags<[HelpHidden, CoreOption]>,
2670  HelpText<"Use relative instead of canonical paths">;
2671def no_cpp_precomp : Flag<["-"], "no-cpp-precomp">, Group<clang_ignored_f_Group>;
2672def no_integrated_cpp : Flag<["-", "--"], "no-integrated-cpp">, Flags<[DriverOption]>;
2673def no_pedantic : Flag<["-", "--"], "no-pedantic">, Group<pedantic_Group>;
2674def no__dead__strip__inits__and__terms : Flag<["-"], "no_dead_strip_inits_and_terms">;
2675def nobuiltininc : Flag<["-"], "nobuiltininc">, Flags<[CC1Option, CoreOption]>,
2676  HelpText<"Disable builtin #include directories">;
2677def nocudainc : Flag<["-"], "nocudainc">;
2678def nogpulib : Flag<["-"], "nogpulib">,
2679  HelpText<"Do not link device library for CUDA/HIP device compilation">;
2680def : Flag<["-"], "nocudalib">, Alias<nogpulib>;
2681def nodefaultlibs : Flag<["-"], "nodefaultlibs">;
2682def nofixprebinding : Flag<["-"], "nofixprebinding">;
2683def nolibc : Flag<["-"], "nolibc">;
2684def nomultidefs : Flag<["-"], "nomultidefs">;
2685def nopie : Flag<["-"], "nopie">;
2686def no_pie : Flag<["-"], "no-pie">, Alias<nopie>;
2687def noprebind : Flag<["-"], "noprebind">;
2688def noprofilelib : Flag<["-"], "noprofilelib">;
2689def noseglinkedit : Flag<["-"], "noseglinkedit">;
2690def nostartfiles : Flag<["-"], "nostartfiles">;
2691def nostdinc : Flag<["-"], "nostdinc">, Flags<[CoreOption]>;
2692def nostdlibinc : Flag<["-"], "nostdlibinc">;
2693def nostdincxx : Flag<["-"], "nostdinc++">, Flags<[CC1Option]>,
2694  HelpText<"Disable standard #include directories for the C++ standard library">;
2695def nostdlib : Flag<["-"], "nostdlib">;
2696def nostdlibxx : Flag<["-"], "nostdlib++">;
2697def object : Flag<["-"], "object">;
2698def o : JoinedOrSeparate<["-"], "o">, Flags<[DriverOption, RenderAsInput, CC1Option, CC1AsOption]>,
2699  HelpText<"Write output to <file>">, MetaVarName<"<file>">;
2700def pagezero__size : JoinedOrSeparate<["-"], "pagezero_size">;
2701def pass_exit_codes : Flag<["-", "--"], "pass-exit-codes">, Flags<[Unsupported]>;
2702def pedantic_errors : Flag<["-", "--"], "pedantic-errors">, Group<pedantic_Group>, Flags<[CC1Option]>;
2703def pedantic : Flag<["-", "--"], "pedantic">, Group<pedantic_Group>, Flags<[CC1Option]>;
2704def pg : Flag<["-"], "pg">, HelpText<"Enable mcount instrumentation">, Flags<[CC1Option]>;
2705def pipe : Flag<["-", "--"], "pipe">,
2706  HelpText<"Use pipes between commands, when possible">;
2707def prebind__all__twolevel__modules : Flag<["-"], "prebind_all_twolevel_modules">;
2708def prebind : Flag<["-"], "prebind">;
2709def preload : Flag<["-"], "preload">;
2710def print_file_name_EQ : Joined<["-", "--"], "print-file-name=">,
2711  HelpText<"Print the full library path of <file>">, MetaVarName<"<file>">;
2712def print_ivar_layout : Flag<["-"], "print-ivar-layout">, Flags<[CC1Option]>,
2713  HelpText<"Enable Objective-C Ivar layout bitmap print trace">;
2714def print_libgcc_file_name : Flag<["-", "--"], "print-libgcc-file-name">,
2715  HelpText<"Print the library path for the currently used compiler runtime "
2716           "library (\"libgcc.a\" or \"libclang_rt.builtins.*.a\")">;
2717def print_multi_directory : Flag<["-", "--"], "print-multi-directory">;
2718def print_multi_lib : Flag<["-", "--"], "print-multi-lib">;
2719def print_multi_os_directory : Flag<["-", "--"], "print-multi-os-directory">,
2720  Flags<[Unsupported]>;
2721def print_target_triple : Flag<["-", "--"], "print-target-triple">,
2722  HelpText<"Print the normalized target triple">;
2723def print_effective_triple : Flag<["-", "--"], "print-effective-triple">,
2724  HelpText<"Print the effective target triple">;
2725def print_prog_name_EQ : Joined<["-", "--"], "print-prog-name=">,
2726  HelpText<"Print the full program path of <name>">, MetaVarName<"<name>">;
2727def print_resource_dir : Flag<["-", "--"], "print-resource-dir">,
2728  HelpText<"Print the resource directory pathname">;
2729def print_search_dirs : Flag<["-", "--"], "print-search-dirs">,
2730  HelpText<"Print the paths used for finding libraries and programs">;
2731def private__bundle : Flag<["-"], "private_bundle">;
2732def pthreads : Flag<["-"], "pthreads">;
2733def pthread : Flag<["-"], "pthread">, Flags<[CC1Option]>,
2734  HelpText<"Support POSIX threads in generated code">;
2735def no_pthread : Flag<["-"], "no-pthread">, Flags<[CC1Option]>;
2736def p : Flag<["-"], "p">;
2737def pie : Flag<["-"], "pie">;
2738def static_pie : Flag<["-"], "static-pie">;
2739def read__only__relocs : Separate<["-"], "read_only_relocs">;
2740def remap : Flag<["-"], "remap">;
2741def rewrite_objc : Flag<["-"], "rewrite-objc">, Flags<[DriverOption,CC1Option]>,
2742  HelpText<"Rewrite Objective-C source to C++">, Group<Action_Group>;
2743def rewrite_legacy_objc : Flag<["-"], "rewrite-legacy-objc">, Flags<[DriverOption]>,
2744  HelpText<"Rewrite Legacy Objective-C source to C++">;
2745def rdynamic : Flag<["-"], "rdynamic">;
2746def resource_dir : Separate<["-"], "resource-dir">,
2747  Flags<[DriverOption, CC1Option, CoreOption, HelpHidden]>,
2748  HelpText<"The directory which holds the compiler resource files">;
2749def resource_dir_EQ : Joined<["-"], "resource-dir=">, Flags<[DriverOption, CoreOption]>,
2750  Alias<resource_dir>;
2751def rpath : Separate<["-"], "rpath">, Flags<[LinkerInput]>, Group<Link_Group>;
2752def rtlib_EQ : Joined<["-", "--"], "rtlib=">,
2753  HelpText<"Compiler runtime library to use">;
2754def frtlib_add_rpath: Flag<["-"], "frtlib-add-rpath">, Flags<[NoArgumentUnused]>,
2755  HelpText<"Add -rpath with architecture-specific resource directory to the linker flags">;
2756def fno_rtlib_add_rpath: Flag<["-"], "fno-rtlib-add-rpath">, Flags<[NoArgumentUnused]>,
2757  HelpText<"Do not add -rpath with architecture-specific resource directory to the linker flags">;
2758def r : Flag<["-"], "r">, Flags<[LinkerInput,NoArgumentUnused]>,
2759        Group<Link_Group>;
2760def save_temps_EQ : Joined<["-", "--"], "save-temps=">, Flags<[CC1Option, DriverOption]>,
2761  HelpText<"Save intermediate compilation results.">;
2762def save_temps : Flag<["-", "--"], "save-temps">, Flags<[DriverOption]>,
2763  Alias<save_temps_EQ>, AliasArgs<["cwd"]>,
2764  HelpText<"Save intermediate compilation results">;
2765def save_stats_EQ : Joined<["-", "--"], "save-stats=">, Flags<[DriverOption]>,
2766  HelpText<"Save llvm statistics.">;
2767def save_stats : Flag<["-", "--"], "save-stats">, Flags<[DriverOption]>,
2768  Alias<save_stats_EQ>, AliasArgs<["cwd"]>,
2769  HelpText<"Save llvm statistics.">;
2770def via_file_asm : Flag<["-", "--"], "via-file-asm">, InternalDebugOpt,
2771  HelpText<"Write assembly to file for input to assemble jobs">;
2772def sectalign : MultiArg<["-"], "sectalign", 3>;
2773def sectcreate : MultiArg<["-"], "sectcreate", 3>;
2774def sectobjectsymbols : MultiArg<["-"], "sectobjectsymbols", 2>;
2775def sectorder : MultiArg<["-"], "sectorder", 3>;
2776def seg1addr : JoinedOrSeparate<["-"], "seg1addr">;
2777def seg__addr__table__filename : Separate<["-"], "seg_addr_table_filename">;
2778def seg__addr__table : Separate<["-"], "seg_addr_table">;
2779def segaddr : MultiArg<["-"], "segaddr", 2>;
2780def segcreate : MultiArg<["-"], "segcreate", 3>;
2781def seglinkedit : Flag<["-"], "seglinkedit">;
2782def segprot : MultiArg<["-"], "segprot", 3>;
2783def segs__read__only__addr : Separate<["-"], "segs_read_only_addr">;
2784def segs__read__write__addr : Separate<["-"], "segs_read_write_addr">;
2785def segs__read__ : Joined<["-"], "segs_read_">;
2786def shared_libgcc : Flag<["-"], "shared-libgcc">;
2787def shared : Flag<["-", "--"], "shared">;
2788def single__module : Flag<["-"], "single_module">;
2789def specs_EQ : Joined<["-", "--"], "specs=">;
2790def specs : Separate<["-", "--"], "specs">, Flags<[Unsupported]>;
2791def static_libgcc : Flag<["-"], "static-libgcc">;
2792def static_libstdcxx : Flag<["-"], "static-libstdc++">;
2793def static : Flag<["-", "--"], "static">, Flags<[NoArgumentUnused]>;
2794def std_default_EQ : Joined<["-"], "std-default=">;
2795def std_EQ : Joined<["-", "--"], "std=">, Flags<[CC1Option]>,
2796  Group<CompileOnly_Group>, HelpText<"Language standard to compile for">,
2797  ValuesCode<[{
2798    const char *Values =
2799    #define LANGSTANDARD(id, name, lang, desc, features) name ","
2800    #define LANGSTANDARD_ALIAS(id, alias) alias ","
2801    #include "clang/Basic/LangStandards.def"
2802    ;
2803  }]>;
2804def stdlib_EQ : Joined<["-", "--"], "stdlib=">, Flags<[CC1Option]>,
2805  HelpText<"C++ standard library to use">, Values<"libc++,libstdc++,platform">;
2806def stdlibxx_isystem : JoinedOrSeparate<["-"], "stdlib++-isystem">,
2807  Group<clang_i_Group>,
2808  HelpText<"Use directory as the C++ standard library include path">,
2809  Flags<[DriverOption]>, MetaVarName<"<directory>">;
2810def unwindlib_EQ : Joined<["-", "--"], "unwindlib=">, Flags<[CC1Option]>,
2811  HelpText<"Unwind library to use">, Values<"libgcc,unwindlib,platform">;
2812def sub__library : JoinedOrSeparate<["-"], "sub_library">;
2813def sub__umbrella : JoinedOrSeparate<["-"], "sub_umbrella">;
2814def system_header_prefix : Joined<["--"], "system-header-prefix=">,
2815  Group<clang_i_Group>, Flags<[CC1Option]>, MetaVarName<"<prefix>">,
2816  HelpText<"Treat all #include paths starting with <prefix> as including a "
2817           "system header.">;
2818def : Separate<["--"], "system-header-prefix">, Alias<system_header_prefix>;
2819def no_system_header_prefix : Joined<["--"], "no-system-header-prefix=">,
2820  Group<clang_i_Group>, Flags<[CC1Option]>, MetaVarName<"<prefix>">,
2821  HelpText<"Treat all #include paths starting with <prefix> as not including a "
2822           "system header.">;
2823def : Separate<["--"], "no-system-header-prefix">, Alias<no_system_header_prefix>;
2824def s : Flag<["-"], "s">, Group<Link_Group>;
2825def target : Joined<["--"], "target=">, Flags<[DriverOption, CoreOption]>,
2826  HelpText<"Generate code for the given target">;
2827def print_supported_cpus : Flag<["-", "--"], "print-supported-cpus">,
2828  Group<CompileOnly_Group>, Flags<[CC1Option, CoreOption]>,
2829  HelpText<"Print supported cpu models for the given target (if target is not specified,"
2830           " it will print the supported cpus for the default target)">;
2831def mcpu_EQ_QUESTION : Flag<["-"], "mcpu=?">, Alias<print_supported_cpus>;
2832def mtune_EQ_QUESTION : Flag<["-"], "mtune=?">, Alias<print_supported_cpus>;
2833def gcc_toolchain : Joined<["--"], "gcc-toolchain=">, Flags<[DriverOption]>,
2834  HelpText<"Use the gcc toolchain at the given directory">;
2835def time : Flag<["-"], "time">,
2836  HelpText<"Time individual commands">;
2837def traditional_cpp : Flag<["-", "--"], "traditional-cpp">, Flags<[CC1Option]>,
2838  HelpText<"Enable some traditional CPP emulation">;
2839def traditional : Flag<["-", "--"], "traditional">;
2840def trigraphs : Flag<["-", "--"], "trigraphs">, Alias<ftrigraphs>,
2841  HelpText<"Process trigraph sequences">;
2842def twolevel__namespace__hints : Flag<["-"], "twolevel_namespace_hints">;
2843def twolevel__namespace : Flag<["-"], "twolevel_namespace">;
2844def t : Flag<["-"], "t">, Group<Link_Group>;
2845def umbrella : Separate<["-"], "umbrella">;
2846def undefined : JoinedOrSeparate<["-"], "undefined">, Group<u_Group>;
2847def undef : Flag<["-"], "undef">, Group<u_Group>, Flags<[CC1Option]>,
2848  HelpText<"undef all system defines">;
2849def unexported__symbols__list : Separate<["-"], "unexported_symbols_list">;
2850def u : JoinedOrSeparate<["-"], "u">, Group<u_Group>;
2851def v : Flag<["-"], "v">, Flags<[CC1Option, CoreOption]>,
2852  HelpText<"Show commands to run and use verbose output">;
2853def verify_debug_info : Flag<["--"], "verify-debug-info">, Flags<[DriverOption]>,
2854  HelpText<"Verify the binary representation of debug output">;
2855def weak_l : Joined<["-"], "weak-l">, Flags<[LinkerInput]>;
2856def weak__framework : Separate<["-"], "weak_framework">, Flags<[LinkerInput]>;
2857def weak__library : Separate<["-"], "weak_library">, Flags<[LinkerInput]>;
2858def weak__reference__mismatches : Separate<["-"], "weak_reference_mismatches">;
2859def whatsloaded : Flag<["-"], "whatsloaded">;
2860def whyload : Flag<["-"], "whyload">;
2861def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">, Flags<[CC1Option]>;
2862def x : JoinedOrSeparate<["-"], "x">, Flags<[DriverOption,CC1Option]>,
2863  HelpText<"Treat subsequent input files as having type <language>">,
2864  MetaVarName<"<language>">;
2865def y : Joined<["-"], "y">;
2866
2867def fintegrated_as : Flag<["-"], "fintegrated-as">, Flags<[DriverOption]>,
2868                     Group<f_Group>, HelpText<"Enable the integrated assembler">;
2869def fno_integrated_as : Flag<["-"], "fno-integrated-as">,
2870                        Flags<[CC1Option, DriverOption]>, Group<f_Group>,
2871                        HelpText<"Disable the integrated assembler">;
2872
2873def fintegrated_cc1 : Flag<["-"], "fintegrated-cc1">,
2874                      Flags<[CoreOption, DriverOption]>, Group<f_Group>,
2875                      HelpText<"Run cc1 in-process">;
2876def fno_integrated_cc1 : Flag<["-"], "fno-integrated-cc1">,
2877                         Flags<[CoreOption, DriverOption]>, Group<f_Group>,
2878                         HelpText<"Spawn a separate process for each cc1">;
2879
2880def : Flag<["-"], "integrated-as">, Alias<fintegrated_as>, Flags<[DriverOption]>;
2881def : Flag<["-"], "no-integrated-as">, Alias<fno_integrated_as>,
2882      Flags<[CC1Option, DriverOption]>;
2883
2884def working_directory : JoinedOrSeparate<["-"], "working-directory">, Flags<[CC1Option]>,
2885  HelpText<"Resolve file paths relative to the specified directory">;
2886def working_directory_EQ : Joined<["-"], "working-directory=">, Flags<[CC1Option]>,
2887  Alias<working_directory>;
2888
2889// Double dash options, which are usually an alias for one of the previous
2890// options.
2891
2892def _mhwdiv_EQ : Joined<["--"], "mhwdiv=">, Alias<mhwdiv_EQ>;
2893def _mhwdiv : Separate<["--"], "mhwdiv">, Alias<mhwdiv_EQ>;
2894def _CLASSPATH_EQ : Joined<["--"], "CLASSPATH=">, Alias<fclasspath_EQ>;
2895def _CLASSPATH : Separate<["--"], "CLASSPATH">, Alias<fclasspath_EQ>;
2896def _all_warnings : Flag<["--"], "all-warnings">, Alias<Wall>;
2897def _analyzer_no_default_checks : Flag<["--"], "analyzer-no-default-checks">, Flags<[DriverOption]>;
2898def _analyzer_output : JoinedOrSeparate<["--"], "analyzer-output">, Flags<[DriverOption]>,
2899  HelpText<"Static analyzer report output format (html|plist|plist-multi-file|plist-html|sarif|text).">;
2900def _analyze : Flag<["--"], "analyze">, Flags<[DriverOption, CoreOption]>,
2901  HelpText<"Run the static analyzer">;
2902def _assemble : Flag<["--"], "assemble">, Alias<S>;
2903def _assert_EQ : Joined<["--"], "assert=">, Alias<A>;
2904def _assert : Separate<["--"], "assert">, Alias<A>;
2905def _bootclasspath_EQ : Joined<["--"], "bootclasspath=">, Alias<fbootclasspath_EQ>;
2906def _bootclasspath : Separate<["--"], "bootclasspath">, Alias<fbootclasspath_EQ>;
2907def _classpath_EQ : Joined<["--"], "classpath=">, Alias<fclasspath_EQ>;
2908def _classpath : Separate<["--"], "classpath">, Alias<fclasspath_EQ>;
2909def _comments_in_macros : Flag<["--"], "comments-in-macros">, Alias<CC>;
2910def _comments : Flag<["--"], "comments">, Alias<C>;
2911def _compile : Flag<["--"], "compile">, Alias<c>;
2912def _constant_cfstrings : Flag<["--"], "constant-cfstrings">;
2913def _debug_EQ : Joined<["--"], "debug=">, Alias<g_Flag>;
2914def _debug : Flag<["--"], "debug">, Alias<g_Flag>;
2915def _define_macro_EQ : Joined<["--"], "define-macro=">, Alias<D>;
2916def _define_macro : Separate<["--"], "define-macro">, Alias<D>;
2917def _dependencies : Flag<["--"], "dependencies">, Alias<M>;
2918def _dyld_prefix_EQ : Joined<["--"], "dyld-prefix=">;
2919def _dyld_prefix : Separate<["--"], "dyld-prefix">, Alias<_dyld_prefix_EQ>;
2920def _encoding_EQ : Joined<["--"], "encoding=">, Alias<fencoding_EQ>;
2921def _encoding : Separate<["--"], "encoding">, Alias<fencoding_EQ>;
2922def _entry : Flag<["--"], "entry">, Alias<e>;
2923def _extdirs_EQ : Joined<["--"], "extdirs=">, Alias<fextdirs_EQ>;
2924def _extdirs : Separate<["--"], "extdirs">, Alias<fextdirs_EQ>;
2925def _extra_warnings : Flag<["--"], "extra-warnings">, Alias<W_Joined>;
2926def _for_linker_EQ : Joined<["--"], "for-linker=">, Alias<Xlinker>;
2927def _for_linker : Separate<["--"], "for-linker">, Alias<Xlinker>;
2928def _force_link_EQ : Joined<["--"], "force-link=">, Alias<u>;
2929def _force_link : Separate<["--"], "force-link">, Alias<u>;
2930def _help_hidden : Flag<["--"], "help-hidden">,
2931  HelpText<"Display help for hidden options">;
2932def _imacros_EQ : Joined<["--"], "imacros=">, Alias<imacros>;
2933def _include_barrier : Flag<["--"], "include-barrier">, Alias<I_>;
2934def _include_directory_after_EQ : Joined<["--"], "include-directory-after=">, Alias<idirafter>;
2935def _include_directory_after : Separate<["--"], "include-directory-after">, Alias<idirafter>;
2936def _include_directory_EQ : Joined<["--"], "include-directory=">, Alias<I>;
2937def _include_directory : Separate<["--"], "include-directory">, Alias<I>;
2938def _include_prefix_EQ : Joined<["--"], "include-prefix=">, Alias<iprefix>;
2939def _include_prefix : Separate<["--"], "include-prefix">, Alias<iprefix>;
2940def _include_with_prefix_after_EQ : Joined<["--"], "include-with-prefix-after=">, Alias<iwithprefix>;
2941def _include_with_prefix_after : Separate<["--"], "include-with-prefix-after">, Alias<iwithprefix>;
2942def _include_with_prefix_before_EQ : Joined<["--"], "include-with-prefix-before=">, Alias<iwithprefixbefore>;
2943def _include_with_prefix_before : Separate<["--"], "include-with-prefix-before">, Alias<iwithprefixbefore>;
2944def _include_with_prefix_EQ : Joined<["--"], "include-with-prefix=">, Alias<iwithprefix>;
2945def _include_with_prefix : Separate<["--"], "include-with-prefix">, Alias<iwithprefix>;
2946def _include_EQ : Joined<["--"], "include=">, Alias<include_>;
2947def _language_EQ : Joined<["--"], "language=">, Alias<x>;
2948def _language : Separate<["--"], "language">, Alias<x>;
2949def _library_directory_EQ : Joined<["--"], "library-directory=">, Alias<L>;
2950def _library_directory : Separate<["--"], "library-directory">, Alias<L>;
2951def _no_line_commands : Flag<["--"], "no-line-commands">, Alias<P>;
2952def _no_standard_includes : Flag<["--"], "no-standard-includes">, Alias<nostdinc>;
2953def _no_standard_libraries : Flag<["--"], "no-standard-libraries">, Alias<nostdlib>;
2954def _no_undefined : Flag<["--"], "no-undefined">, Flags<[LinkerInput]>;
2955def _no_warnings : Flag<["--"], "no-warnings">, Alias<w>;
2956def _optimize_EQ : Joined<["--"], "optimize=">, Alias<O>;
2957def _optimize : Flag<["--"], "optimize">, Alias<O>;
2958def _output_class_directory_EQ : Joined<["--"], "output-class-directory=">, Alias<foutput_class_dir_EQ>;
2959def _output_class_directory : Separate<["--"], "output-class-directory">, Alias<foutput_class_dir_EQ>;
2960def _output_EQ : Joined<["--"], "output=">, Alias<o>;
2961def _output : Separate<["--"], "output">, Alias<o>;
2962def _param : Separate<["--"], "param">, Group<CompileOnly_Group>;
2963def _param_EQ : Joined<["--"], "param=">, Alias<_param>;
2964def _precompile : Flag<["--"], "precompile">, Flags<[DriverOption]>,
2965  Group<Action_Group>, HelpText<"Only precompile the input">;
2966def _prefix_EQ : Joined<["--"], "prefix=">, Alias<B>;
2967def _prefix : Separate<["--"], "prefix">, Alias<B>;
2968def _preprocess : Flag<["--"], "preprocess">, Alias<E>;
2969def _print_diagnostic_categories : Flag<["--"], "print-diagnostic-categories">;
2970def _print_file_name : Separate<["--"], "print-file-name">, Alias<print_file_name_EQ>;
2971def _print_missing_file_dependencies : Flag<["--"], "print-missing-file-dependencies">, Alias<MG>;
2972def _print_prog_name : Separate<["--"], "print-prog-name">, Alias<print_prog_name_EQ>;
2973def _profile_blocks : Flag<["--"], "profile-blocks">, Alias<a>;
2974def _profile : Flag<["--"], "profile">, Alias<p>;
2975def _resource_EQ : Joined<["--"], "resource=">, Alias<fcompile_resource_EQ>;
2976def _resource : Separate<["--"], "resource">, Alias<fcompile_resource_EQ>;
2977def _rtlib : Separate<["--"], "rtlib">, Alias<rtlib_EQ>;
2978def _serialize_diags : Separate<["-", "--"], "serialize-diagnostics">, Flags<[DriverOption]>,
2979  HelpText<"Serialize compiler diagnostics to a file">;
2980// We give --version different semantics from -version.
2981def _version : Flag<["--"], "version">, Flags<[CoreOption, CC1Option]>,
2982  HelpText<"Print version information">;
2983def _signed_char : Flag<["--"], "signed-char">, Alias<fsigned_char>;
2984def _std : Separate<["--"], "std">, Alias<std_EQ>;
2985def _stdlib : Separate<["--"], "stdlib">, Alias<stdlib_EQ>;
2986def _sysroot_EQ : Joined<["--"], "sysroot=">;
2987def _sysroot : Separate<["--"], "sysroot">, Alias<_sysroot_EQ>;
2988def _target_help : Flag<["--"], "target-help">;
2989def _trace_includes : Flag<["--"], "trace-includes">, Alias<H>;
2990def _undefine_macro_EQ : Joined<["--"], "undefine-macro=">, Alias<U>;
2991def _undefine_macro : Separate<["--"], "undefine-macro">, Alias<U>;
2992def _unsigned_char : Flag<["--"], "unsigned-char">, Alias<funsigned_char>;
2993def _user_dependencies : Flag<["--"], "user-dependencies">, Alias<MM>;
2994def _verbose : Flag<["--"], "verbose">, Alias<v>;
2995def _warn__EQ : Joined<["--"], "warn-=">, Alias<W_Joined>;
2996def _warn_ : Joined<["--"], "warn-">, Alias<W_Joined>;
2997def _write_dependencies : Flag<["--"], "write-dependencies">, Alias<MD>;
2998def _write_user_dependencies : Flag<["--"], "write-user-dependencies">, Alias<MMD>;
2999def _ : Joined<["--"], "">, Flags<[Unsupported]>;
3000
3001// Hexagon feature flags.
3002def mieee_rnd_near : Flag<["-"], "mieee-rnd-near">,
3003  Group<m_hexagon_Features_Group>;
3004def mv5 : Flag<["-"], "mv5">, Group<m_hexagon_Features_Group>, Alias<mcpu_EQ>,
3005  AliasArgs<["hexagonv5"]>;
3006def mv55 : Flag<["-"], "mv55">, Group<m_hexagon_Features_Group>,
3007  Alias<mcpu_EQ>, AliasArgs<["hexagonv55"]>;
3008def mv60 : Flag<["-"], "mv60">, Group<m_hexagon_Features_Group>,
3009  Alias<mcpu_EQ>, AliasArgs<["hexagonv60"]>;
3010def mv62 : Flag<["-"], "mv62">, Group<m_hexagon_Features_Group>,
3011  Alias<mcpu_EQ>, AliasArgs<["hexagonv62"]>;
3012def mv65 : Flag<["-"], "mv65">, Group<m_hexagon_Features_Group>,
3013  Alias<mcpu_EQ>, AliasArgs<["hexagonv65"]>;
3014def mv66 : Flag<["-"], "mv66">, Group<m_hexagon_Features_Group>,
3015  Alias<mcpu_EQ>, AliasArgs<["hexagonv66"]>;
3016def mhexagon_hvx : Flag<["-"], "mhvx">, Group<m_hexagon_Features_HVX_Group>,
3017  HelpText<"Enable Hexagon Vector eXtensions">;
3018def mhexagon_hvx_EQ : Joined<["-"], "mhvx=">,
3019  Group<m_hexagon_Features_HVX_Group>,
3020  HelpText<"Enable Hexagon Vector eXtensions">;
3021def mno_hexagon_hvx : Flag<["-"], "mno-hvx">,
3022  Group<m_hexagon_Features_HVX_Group>,
3023  HelpText<"Disable Hexagon Vector eXtensions">;
3024def mhexagon_hvx_length_EQ : Joined<["-"], "mhvx-length=">,
3025  Group<m_hexagon_Features_HVX_Group>, HelpText<"Set Hexagon Vector Length">,
3026  Values<"64B,128B">;
3027def ffixed_r19: Flag<["-"], "ffixed-r19">,
3028  HelpText<"Reserve register r19 (Hexagon only)">;
3029def mmemops : Flag<["-"], "mmemops">, Group<m_hexagon_Features_Group>,
3030  Flags<[CC1Option]>, HelpText<"Enable generation of memop instructions">;
3031def mno_memops : Flag<["-"], "mno-memops">, Group<m_hexagon_Features_Group>,
3032  Flags<[CC1Option]>, HelpText<"Disable generation of memop instructions">;
3033def mpackets : Flag<["-"], "mpackets">, Group<m_hexagon_Features_Group>,
3034  Flags<[CC1Option]>, HelpText<"Enable generation of instruction packets">;
3035def mno_packets : Flag<["-"], "mno-packets">, Group<m_hexagon_Features_Group>,
3036  Flags<[CC1Option]>, HelpText<"Disable generation of instruction packets">;
3037def mnvj : Flag<["-"], "mnvj">, Group<m_hexagon_Features_Group>,
3038  Flags<[CC1Option]>, HelpText<"Enable generation of new-value jumps">;
3039def mno_nvj : Flag<["-"], "mno-nvj">, Group<m_hexagon_Features_Group>,
3040  Flags<[CC1Option]>, HelpText<"Disable generation of new-value jumps">;
3041def mnvs : Flag<["-"], "mnvs">, Group<m_hexagon_Features_Group>,
3042  Flags<[CC1Option]>, HelpText<"Enable generation of new-value stores">;
3043def mno_nvs : Flag<["-"], "mno-nvs">, Group<m_hexagon_Features_Group>,
3044  Flags<[CC1Option]>, HelpText<"Disable generation of new-value stores">;
3045
3046
3047// X86 feature flags
3048def mx87 : Flag<["-"], "mx87">, Group<m_x86_Features_Group>;
3049def mno_x87 : Flag<["-"], "mno-x87">, Group<m_x86_Features_Group>;
3050def m80387 : Flag<["-"], "m80387">, Alias<mx87>;
3051def mno_80387 : Flag<["-"], "mno-80387">, Alias<mno_x87>;
3052def mmmx : Flag<["-"], "mmmx">, Group<m_x86_Features_Group>;
3053def mno_mmx : Flag<["-"], "mno-mmx">, Group<m_x86_Features_Group>;
3054def m3dnow : Flag<["-"], "m3dnow">, Group<m_x86_Features_Group>;
3055def mno_3dnow : Flag<["-"], "mno-3dnow">, Group<m_x86_Features_Group>;
3056def m3dnowa : Flag<["-"], "m3dnowa">, Group<m_x86_Features_Group>;
3057def mno_3dnowa : Flag<["-"], "mno-3dnowa">, Group<m_x86_Features_Group>;
3058def msse : Flag<["-"], "msse">, Group<m_x86_Features_Group>;
3059def mno_sse : Flag<["-"], "mno-sse">, Group<m_x86_Features_Group>;
3060def msse2 : Flag<["-"], "msse2">, Group<m_x86_Features_Group>;
3061def mno_sse2 : Flag<["-"], "mno-sse2">, Group<m_x86_Features_Group>;
3062def msse3 : Flag<["-"], "msse3">, Group<m_x86_Features_Group>;
3063def mno_sse3 : Flag<["-"], "mno-sse3">, Group<m_x86_Features_Group>;
3064def mssse3 : Flag<["-"], "mssse3">, Group<m_x86_Features_Group>;
3065def mno_ssse3 : Flag<["-"], "mno-ssse3">, Group<m_x86_Features_Group>;
3066def msse4_1 : Flag<["-"], "msse4.1">, Group<m_x86_Features_Group>;
3067def mno_sse4_1 : Flag<["-"], "mno-sse4.1">, Group<m_x86_Features_Group>;
3068def msse4_2 : Flag<["-"], "msse4.2">, Group<m_x86_Features_Group>;
3069def mno_sse4_2 : Flag<["-"], "mno-sse4.2">, Group<m_x86_Features_Group>;
3070def msse4 : Flag<["-"], "msse4">, Alias<msse4_2>;
3071// -mno-sse4 turns off sse4.1 which has the effect of turning off everything
3072// later than 4.1. -msse4 turns on 4.2 which has the effect of turning on
3073// everything earlier than 4.2.
3074def mno_sse4 : Flag<["-"], "mno-sse4">, Alias<mno_sse4_1>;
3075def msse4a : Flag<["-"], "msse4a">, Group<m_x86_Features_Group>;
3076def mno_sse4a : Flag<["-"], "mno-sse4a">, Group<m_x86_Features_Group>;
3077def mavx : Flag<["-"], "mavx">, Group<m_x86_Features_Group>;
3078def mno_avx : Flag<["-"], "mno-avx">, Group<m_x86_Features_Group>;
3079def mavx2 : Flag<["-"], "mavx2">, Group<m_x86_Features_Group>;
3080def mno_avx2 : Flag<["-"], "mno-avx2">, Group<m_x86_Features_Group>;
3081def mavx512f : Flag<["-"], "mavx512f">, Group<m_x86_Features_Group>;
3082def mno_avx512f : Flag<["-"], "mno-avx512f">, Group<m_x86_Features_Group>;
3083def mavx512bf16 : Flag<["-"], "mavx512bf16">, Group<m_x86_Features_Group>;
3084def mno_avx512bf16 : Flag<["-"], "mno-avx512bf16">, Group<m_x86_Features_Group>;
3085def mavx512bitalg : Flag<["-"], "mavx512bitalg">, Group<m_x86_Features_Group>;
3086def mno_avx512bitalg : Flag<["-"], "mno-avx512bitalg">, Group<m_x86_Features_Group>;
3087def mavx512bw : Flag<["-"], "mavx512bw">, Group<m_x86_Features_Group>;
3088def mno_avx512bw : Flag<["-"], "mno-avx512bw">, Group<m_x86_Features_Group>;
3089def mavx512cd : Flag<["-"], "mavx512cd">, Group<m_x86_Features_Group>;
3090def mno_avx512cd : Flag<["-"], "mno-avx512cd">, Group<m_x86_Features_Group>;
3091def mavx512dq : Flag<["-"], "mavx512dq">, Group<m_x86_Features_Group>;
3092def mno_avx512dq : Flag<["-"], "mno-avx512dq">, Group<m_x86_Features_Group>;
3093def mavx512er : Flag<["-"], "mavx512er">, Group<m_x86_Features_Group>;
3094def mno_avx512er : Flag<["-"], "mno-avx512er">, Group<m_x86_Features_Group>;
3095def mavx512ifma : Flag<["-"], "mavx512ifma">, Group<m_x86_Features_Group>;
3096def mno_avx512ifma : Flag<["-"], "mno-avx512ifma">, Group<m_x86_Features_Group>;
3097def mavx512pf : Flag<["-"], "mavx512pf">, Group<m_x86_Features_Group>;
3098def mno_avx512pf : Flag<["-"], "mno-avx512pf">, Group<m_x86_Features_Group>;
3099def mavx512vbmi : Flag<["-"], "mavx512vbmi">, Group<m_x86_Features_Group>;
3100def mno_avx512vbmi : Flag<["-"], "mno-avx512vbmi">, Group<m_x86_Features_Group>;
3101def mavx512vbmi2 : Flag<["-"], "mavx512vbmi2">, Group<m_x86_Features_Group>;
3102def mno_avx512vbmi2 : Flag<["-"], "mno-avx512vbmi2">, Group<m_x86_Features_Group>;
3103def mavx512vl : Flag<["-"], "mavx512vl">, Group<m_x86_Features_Group>;
3104def mno_avx512vl : Flag<["-"], "mno-avx512vl">, Group<m_x86_Features_Group>;
3105def mavx512vnni : Flag<["-"], "mavx512vnni">, Group<m_x86_Features_Group>;
3106def mno_avx512vnni : Flag<["-"], "mno-avx512vnni">, Group<m_x86_Features_Group>;
3107def mavx512vpopcntdq : Flag<["-"], "mavx512vpopcntdq">, Group<m_x86_Features_Group>;
3108def mno_avx512vpopcntdq : Flag<["-"], "mno-avx512vpopcntdq">, Group<m_x86_Features_Group>;
3109def mavx512vp2intersect : Flag<["-"], "mavx512vp2intersect">, Group<m_x86_Features_Group>;
3110def mno_avx512vp2intersect : Flag<["-"], "mno-avx512vp2intersect">, Group<m_x86_Features_Group>;
3111def madx : Flag<["-"], "madx">, Group<m_x86_Features_Group>;
3112def mno_adx : Flag<["-"], "mno-adx">, Group<m_x86_Features_Group>;
3113def maes : Flag<["-"], "maes">, Group<m_x86_Features_Group>;
3114def mno_aes : Flag<["-"], "mno-aes">, Group<m_x86_Features_Group>;
3115def mbmi : Flag<["-"], "mbmi">, Group<m_x86_Features_Group>;
3116def mno_bmi : Flag<["-"], "mno-bmi">, Group<m_x86_Features_Group>;
3117def mbmi2 : Flag<["-"], "mbmi2">, Group<m_x86_Features_Group>;
3118def mno_bmi2 : Flag<["-"], "mno-bmi2">, Group<m_x86_Features_Group>;
3119def mcldemote : Flag<["-"], "mcldemote">, Group<m_x86_Features_Group>;
3120def mno_cldemote : Flag<["-"], "mno-cldemote">, Group<m_x86_Features_Group>;
3121def mclflushopt : Flag<["-"], "mclflushopt">, Group<m_x86_Features_Group>;
3122def mno_clflushopt : Flag<["-"], "mno-clflushopt">, Group<m_x86_Features_Group>;
3123def mclwb : Flag<["-"], "mclwb">, Group<m_x86_Features_Group>;
3124def mno_clwb : Flag<["-"], "mno-clwb">, Group<m_x86_Features_Group>;
3125def mwbnoinvd : Flag<["-"], "mwbnoinvd">, Group<m_x86_Features_Group>;
3126def mno_wbnoinvd : Flag<["-"], "mno-wbnoinvd">, Group<m_x86_Features_Group>;
3127def mclzero : Flag<["-"], "mclzero">, Group<m_x86_Features_Group>;
3128def mno_clzero : Flag<["-"], "mno-clzero">, Group<m_x86_Features_Group>;
3129def mcx16 : Flag<["-"], "mcx16">, Group<m_x86_Features_Group>;
3130def mno_cx16 : Flag<["-"], "mno-cx16">, Group<m_x86_Features_Group>;
3131def menqcmd : Flag<["-"], "menqcmd">, Group<m_x86_Features_Group>;
3132def mno_enqcmd : Flag<["-"], "mno-enqcmd">, Group<m_x86_Features_Group>;
3133def mf16c : Flag<["-"], "mf16c">, Group<m_x86_Features_Group>;
3134def mno_f16c : Flag<["-"], "mno-f16c">, Group<m_x86_Features_Group>;
3135def mfma : Flag<["-"], "mfma">, Group<m_x86_Features_Group>;
3136def mno_fma : Flag<["-"], "mno-fma">, Group<m_x86_Features_Group>;
3137def mfma4 : Flag<["-"], "mfma4">, Group<m_x86_Features_Group>;
3138def mno_fma4 : Flag<["-"], "mno-fma4">, Group<m_x86_Features_Group>;
3139def mfsgsbase : Flag<["-"], "mfsgsbase">, Group<m_x86_Features_Group>;
3140def mno_fsgsbase : Flag<["-"], "mno-fsgsbase">, Group<m_x86_Features_Group>;
3141def mfxsr : Flag<["-"], "mfxsr">, Group<m_x86_Features_Group>;
3142def mno_fxsr : Flag<["-"], "mno-fxsr">, Group<m_x86_Features_Group>;
3143def minvpcid : Flag<["-"], "minvpcid">, Group<m_x86_Features_Group>;
3144def mno_invpcid : Flag<["-"], "mno-invpcid">, Group<m_x86_Features_Group>;
3145def mgfni : Flag<["-"], "mgfni">, Group<m_x86_Features_Group>;
3146def mno_gfni : Flag<["-"], "mno-gfni">, Group<m_x86_Features_Group>;
3147def mlwp : Flag<["-"], "mlwp">, Group<m_x86_Features_Group>;
3148def mno_lwp : Flag<["-"], "mno-lwp">, Group<m_x86_Features_Group>;
3149def mlzcnt : Flag<["-"], "mlzcnt">, Group<m_x86_Features_Group>;
3150def mno_lzcnt : Flag<["-"], "mno-lzcnt">, Group<m_x86_Features_Group>;
3151def mmovbe : Flag<["-"], "mmovbe">, Group<m_x86_Features_Group>;
3152def mno_movbe : Flag<["-"], "mno-movbe">, Group<m_x86_Features_Group>;
3153def mmovdiri : Flag<["-"], "mmovdiri">, Group<m_x86_Features_Group>;
3154def mno_movdiri : Flag<["-"], "mno-movdiri">, Group<m_x86_Features_Group>;
3155def mmovdir64b : Flag<["-"], "mmovdir64b">, Group<m_x86_Features_Group>;
3156def mno_movdir64b : Flag<["-"], "mno-movdir64b">, Group<m_x86_Features_Group>;
3157def mmwaitx : Flag<["-"], "mmwaitx">, Group<m_x86_Features_Group>;
3158def mno_mwaitx : Flag<["-"], "mno-mwaitx">, Group<m_x86_Features_Group>;
3159def mpku : Flag<["-"], "mpku">, Group<m_x86_Features_Group>;
3160def mno_pku : Flag<["-"], "mno-pku">, Group<m_x86_Features_Group>;
3161def mpclmul : Flag<["-"], "mpclmul">, Group<m_x86_Features_Group>;
3162def mno_pclmul : Flag<["-"], "mno-pclmul">, Group<m_x86_Features_Group>;
3163def mpconfig : Flag<["-"], "mpconfig">, Group<m_x86_Features_Group>;
3164def mno_pconfig : Flag<["-"], "mno-pconfig">, Group<m_x86_Features_Group>;
3165def mpopcnt : Flag<["-"], "mpopcnt">, Group<m_x86_Features_Group>;
3166def mno_popcnt : Flag<["-"], "mno-popcnt">, Group<m_x86_Features_Group>;
3167def mprefetchwt1 : Flag<["-"], "mprefetchwt1">, Group<m_x86_Features_Group>;
3168def mno_prefetchwt1 : Flag<["-"], "mno-prefetchwt1">, Group<m_x86_Features_Group>;
3169def mprfchw : Flag<["-"], "mprfchw">, Group<m_x86_Features_Group>;
3170def mno_prfchw : Flag<["-"], "mno-prfchw">, Group<m_x86_Features_Group>;
3171def mptwrite : Flag<["-"], "mptwrite">, Group<m_x86_Features_Group>;
3172def mno_ptwrite : Flag<["-"], "mno-ptwrite">, Group<m_x86_Features_Group>;
3173def mrdpid : Flag<["-"], "mrdpid">, Group<m_x86_Features_Group>;
3174def mno_rdpid : Flag<["-"], "mno-rdpid">, Group<m_x86_Features_Group>;
3175def mrdrnd : Flag<["-"], "mrdrnd">, Group<m_x86_Features_Group>;
3176def mno_rdrnd : Flag<["-"], "mno-rdrnd">, Group<m_x86_Features_Group>;
3177def mrtm : Flag<["-"], "mrtm">, Group<m_x86_Features_Group>;
3178def mno_rtm : Flag<["-"], "mno-rtm">, Group<m_x86_Features_Group>;
3179def mrdseed : Flag<["-"], "mrdseed">, Group<m_x86_Features_Group>;
3180def mno_rdseed : Flag<["-"], "mno-rdseed">, Group<m_x86_Features_Group>;
3181def msahf : Flag<["-"], "msahf">, Group<m_x86_Features_Group>;
3182def mno_sahf : Flag<["-"], "mno-sahf">, Group<m_x86_Features_Group>;
3183def msgx : Flag<["-"], "msgx">, Group<m_x86_Features_Group>;
3184def mno_sgx : Flag<["-"], "mno-sgx">, Group<m_x86_Features_Group>;
3185def msha : Flag<["-"], "msha">, Group<m_x86_Features_Group>;
3186def mno_sha : Flag<["-"], "mno-sha">, Group<m_x86_Features_Group>;
3187def mtbm : Flag<["-"], "mtbm">, Group<m_x86_Features_Group>;
3188def mno_tbm : Flag<["-"], "mno-tbm">, Group<m_x86_Features_Group>;
3189def mvaes : Flag<["-"], "mvaes">, Group<m_x86_Features_Group>;
3190def mno_vaes : Flag<["-"], "mno-vaes">, Group<m_x86_Features_Group>;
3191def mvpclmulqdq : Flag<["-"], "mvpclmulqdq">, Group<m_x86_Features_Group>;
3192def mno_vpclmulqdq : Flag<["-"], "mno-vpclmulqdq">, Group<m_x86_Features_Group>;
3193def mwaitpkg : Flag<["-"], "mwaitpkg">, Group<m_x86_Features_Group>;
3194def mno_waitpkg : Flag<["-"], "mno-waitpkg">, Group<m_x86_Features_Group>;
3195def mxop : Flag<["-"], "mxop">, Group<m_x86_Features_Group>;
3196def mno_xop : Flag<["-"], "mno-xop">, Group<m_x86_Features_Group>;
3197def mxsave : Flag<["-"], "mxsave">, Group<m_x86_Features_Group>;
3198def mno_xsave : Flag<["-"], "mno-xsave">, Group<m_x86_Features_Group>;
3199def mxsavec : Flag<["-"], "mxsavec">, Group<m_x86_Features_Group>;
3200def mno_xsavec : Flag<["-"], "mno-xsavec">, Group<m_x86_Features_Group>;
3201def mxsaveopt : Flag<["-"], "mxsaveopt">, Group<m_x86_Features_Group>;
3202def mno_xsaveopt : Flag<["-"], "mno-xsaveopt">, Group<m_x86_Features_Group>;
3203def mxsaves : Flag<["-"], "mxsaves">, Group<m_x86_Features_Group>;
3204def mno_xsaves : Flag<["-"], "mno-xsaves">, Group<m_x86_Features_Group>;
3205def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Features_Group>;
3206def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
3207def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
3208def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
3209def mvzeroupper : Flag<["-"], "mvzeroupper">, Group<m_x86_Features_Group>;
3210def mno_vzeroupper : Flag<["-"], "mno-vzeroupper">, Group<m_x86_Features_Group>;
3211
3212// These are legacy user-facing driver-level option spellings. They are always
3213// aliases for options that are spelled using the more common Unix / GNU flag
3214// style of double-dash and equals-joined flags.
3215def gcc_toolchain_legacy_spelling : Separate<["-"], "gcc-toolchain">, Alias<gcc_toolchain>;
3216def target_legacy_spelling : Separate<["-"], "target">, Alias<target>;
3217
3218// Special internal option to handle -Xlinker --no-demangle.
3219def Z_Xlinker__no_demangle : Flag<["-"], "Z-Xlinker-no-demangle">,
3220    Flags<[Unsupported, NoArgumentUnused]>;
3221
3222// Special internal option to allow forwarding arbitrary arguments to linker.
3223def Zlinker_input : Separate<["-"], "Zlinker-input">,
3224    Flags<[Unsupported, NoArgumentUnused]>;
3225
3226// Reserved library options.
3227def Z_reserved_lib_stdcxx : Flag<["-"], "Z-reserved-lib-stdc++">,
3228    Flags<[LinkerInput, NoArgumentUnused, Unsupported]>, Group<reserved_lib_Group>;
3229def Z_reserved_lib_cckext : Flag<["-"], "Z-reserved-lib-cckext">,
3230    Flags<[LinkerInput, NoArgumentUnused, Unsupported]>, Group<reserved_lib_Group>;
3231
3232// Ignored options
3233// FIXME: multiclasess produce suffixes, not prefixes. This is fine for now
3234// since it is only used in ignored options.
3235multiclass BooleanFFlag<string name> {
3236  def _f : Flag<["-"], "f"#name>;
3237  def _fno : Flag<["-"], "fno-"#name>;
3238}
3239
3240defm : BooleanFFlag<"keep-inline-functions">, Group<clang_ignored_gcc_optimization_f_Group>;
3241
3242def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<f_Group>;
3243
3244def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<f_Group>, Flags<[CoreOption]>;
3245
3246defm align_labels : BooleanFFlag<"align-labels">, Group<clang_ignored_gcc_optimization_f_Group>;
3247def falign_labels_EQ : Joined<["-"], "falign-labels=">, Group<clang_ignored_gcc_optimization_f_Group>;
3248defm align_loops : BooleanFFlag<"align-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3249def falign_loops_EQ : Joined<["-"], "falign-loops=">, Group<clang_ignored_gcc_optimization_f_Group>;
3250defm align_jumps : BooleanFFlag<"align-jumps">, Group<clang_ignored_gcc_optimization_f_Group>;
3251def falign_jumps_EQ : Joined<["-"], "falign-jumps=">, Group<clang_ignored_gcc_optimization_f_Group>;
3252
3253// FIXME: This option should be supported and wired up to our diognostics, but
3254// ignore it for now to avoid breaking builds that use it.
3255def fdiagnostics_show_location_EQ : Joined<["-"], "fdiagnostics-show-location=">, Group<clang_ignored_f_Group>;
3256
3257defm fcheck_new : BooleanFFlag<"check-new">, Group<clang_ignored_f_Group>;
3258defm caller_saves : BooleanFFlag<"caller-saves">, Group<clang_ignored_gcc_optimization_f_Group>;
3259defm reorder_blocks : BooleanFFlag<"reorder-blocks">, Group<clang_ignored_gcc_optimization_f_Group>;
3260defm eliminate_unused_debug_types : BooleanFFlag<"eliminate-unused-debug-types">, Group<clang_ignored_f_Group>;
3261defm branch_count_reg : BooleanFFlag<"branch-count-reg">, Group<clang_ignored_gcc_optimization_f_Group>;
3262defm default_inline : BooleanFFlag<"default-inline">, Group<clang_ignored_gcc_optimization_f_Group>;
3263defm fat_lto_objects : BooleanFFlag<"fat-lto-objects">, Group<clang_ignored_gcc_optimization_f_Group>;
3264defm float_store : BooleanFFlag<"float-store">, Group<clang_ignored_gcc_optimization_f_Group>;
3265defm friend_injection : BooleanFFlag<"friend-injection">, Group<clang_ignored_f_Group>;
3266defm function_attribute_list : BooleanFFlag<"function-attribute-list">, Group<clang_ignored_f_Group>;
3267defm gcse : BooleanFFlag<"gcse">, Group<clang_ignored_gcc_optimization_f_Group>;
3268defm gcse_after_reload: BooleanFFlag<"gcse-after-reload">, Group<clang_ignored_gcc_optimization_f_Group>;
3269defm gcse_las: BooleanFFlag<"gcse-las">, Group<clang_ignored_gcc_optimization_f_Group>;
3270defm gcse_sm: BooleanFFlag<"gcse-sm">, Group<clang_ignored_gcc_optimization_f_Group>;
3271defm gnu : BooleanFFlag<"gnu">, Group<clang_ignored_f_Group>;
3272defm implicit_templates : BooleanFFlag<"implicit-templates">, Group<clang_ignored_f_Group>;
3273defm implement_inlines : BooleanFFlag<"implement-inlines">, Group<clang_ignored_f_Group>;
3274defm merge_constants : BooleanFFlag<"merge-constants">, Group<clang_ignored_gcc_optimization_f_Group>;
3275defm modulo_sched : BooleanFFlag<"modulo-sched">, Group<clang_ignored_gcc_optimization_f_Group>;
3276defm modulo_sched_allow_regmoves : BooleanFFlag<"modulo-sched-allow-regmoves">,
3277    Group<clang_ignored_gcc_optimization_f_Group>;
3278defm inline_functions_called_once : BooleanFFlag<"inline-functions-called-once">,
3279    Group<clang_ignored_gcc_optimization_f_Group>;
3280def finline_limit_EQ : Joined<["-"], "finline-limit=">, Group<clang_ignored_gcc_optimization_f_Group>;
3281defm finline_limit : BooleanFFlag<"inline-limit">, Group<clang_ignored_gcc_optimization_f_Group>;
3282defm inline_small_functions : BooleanFFlag<"inline-small-functions">,
3283    Group<clang_ignored_gcc_optimization_f_Group>;
3284defm ipa_cp : BooleanFFlag<"ipa-cp">,
3285    Group<clang_ignored_gcc_optimization_f_Group>;
3286defm ivopts : BooleanFFlag<"ivopts">, Group<clang_ignored_gcc_optimization_f_Group>;
3287def : Flag<["-"], "fno-semantic-interposition">, Group<clang_ignored_f_Group>;
3288defm non_call_exceptions : BooleanFFlag<"non-call-exceptions">, Group<clang_ignored_f_Group>;
3289defm peel_loops : BooleanFFlag<"peel-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3290defm permissive : BooleanFFlag<"permissive">, Group<clang_ignored_f_Group>;
3291defm prefetch_loop_arrays : BooleanFFlag<"prefetch-loop-arrays">, Group<clang_ignored_gcc_optimization_f_Group>;
3292defm printf : BooleanFFlag<"printf">, Group<clang_ignored_f_Group>;
3293defm profile : BooleanFFlag<"profile">, Group<clang_ignored_f_Group>;
3294defm profile_correction : BooleanFFlag<"profile-correction">, Group<clang_ignored_gcc_optimization_f_Group>;
3295defm profile_generate_sampling : BooleanFFlag<"profile-generate-sampling">, Group<clang_ignored_f_Group>;
3296defm profile_reusedist : BooleanFFlag<"profile-reusedist">, Group<clang_ignored_f_Group>;
3297defm profile_values : BooleanFFlag<"profile-values">, Group<clang_ignored_gcc_optimization_f_Group>;
3298defm regs_graph : BooleanFFlag<"regs-graph">, Group<clang_ignored_f_Group>;
3299defm rename_registers : BooleanFFlag<"rename-registers">, Group<clang_ignored_gcc_optimization_f_Group>;
3300defm ripa : BooleanFFlag<"ripa">, Group<clang_ignored_f_Group>;
3301defm schedule_insns : BooleanFFlag<"schedule-insns">, Group<clang_ignored_gcc_optimization_f_Group>;
3302defm schedule_insns2 : BooleanFFlag<"schedule-insns2">, Group<clang_ignored_gcc_optimization_f_Group>;
3303defm see : BooleanFFlag<"see">, Group<clang_ignored_f_Group>;
3304defm signaling_nans : BooleanFFlag<"signaling-nans">, Group<clang_ignored_gcc_optimization_f_Group>;
3305defm single_precision_constant : BooleanFFlag<"single-precision-constant">,
3306    Group<clang_ignored_gcc_optimization_f_Group>;
3307defm spec_constr_count : BooleanFFlag<"spec-constr-count">, Group<clang_ignored_f_Group>;
3308defm stack_check : BooleanFFlag<"stack-check">, Group<clang_ignored_f_Group>;
3309defm strength_reduce :
3310    BooleanFFlag<"strength-reduce">, Group<clang_ignored_gcc_optimization_f_Group>;
3311defm tls_model : BooleanFFlag<"tls-model">, Group<clang_ignored_f_Group>;
3312defm tracer : BooleanFFlag<"tracer">, Group<clang_ignored_gcc_optimization_f_Group>;
3313defm tree_dce : BooleanFFlag<"tree-dce">, Group<clang_ignored_gcc_optimization_f_Group>;
3314defm tree_loop_im : BooleanFFlag<"tree_loop_im">,  Group<clang_ignored_gcc_optimization_f_Group>;
3315defm tree_loop_ivcanon : BooleanFFlag<"tree_loop_ivcanon">,  Group<clang_ignored_gcc_optimization_f_Group>;
3316defm tree_loop_linear : BooleanFFlag<"tree_loop_linear">,  Group<clang_ignored_gcc_optimization_f_Group>;
3317defm tree_salias : BooleanFFlag<"tree-salias">, Group<clang_ignored_f_Group>;
3318defm tree_ter : BooleanFFlag<"tree-ter">, Group<clang_ignored_gcc_optimization_f_Group>;
3319defm tree_vectorizer_verbose : BooleanFFlag<"tree-vectorizer-verbose">, Group<clang_ignored_f_Group>;
3320defm tree_vrp : BooleanFFlag<"tree-vrp">, Group<clang_ignored_gcc_optimization_f_Group>;
3321defm unroll_all_loops : BooleanFFlag<"unroll-all-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3322defm unsafe_loop_optimizations : BooleanFFlag<"unsafe-loop-optimizations">,
3323    Group<clang_ignored_gcc_optimization_f_Group>;
3324defm unswitch_loops : BooleanFFlag<"unswitch-loops">, Group<clang_ignored_gcc_optimization_f_Group>;
3325defm use_linker_plugin : BooleanFFlag<"use-linker-plugin">, Group<clang_ignored_gcc_optimization_f_Group>;
3326defm vect_cost_model : BooleanFFlag<"vect-cost-model">, Group<clang_ignored_gcc_optimization_f_Group>;
3327defm variable_expansion_in_unroller : BooleanFFlag<"variable-expansion-in-unroller">,
3328    Group<clang_ignored_gcc_optimization_f_Group>;
3329defm web : BooleanFFlag<"web">, Group<clang_ignored_gcc_optimization_f_Group>;
3330defm whole_program : BooleanFFlag<"whole-program">, Group<clang_ignored_gcc_optimization_f_Group>;
3331defm devirtualize : BooleanFFlag<"devirtualize">, Group<clang_ignored_gcc_optimization_f_Group>;
3332defm devirtualize_speculatively : BooleanFFlag<"devirtualize-speculatively">,
3333    Group<clang_ignored_gcc_optimization_f_Group>;
3334
3335// Generic gfortran options.
3336def A_DASH : Joined<["-"], "A-">, Group<gfortran_Group>;
3337def J : JoinedOrSeparate<["-"], "J">, Flags<[RenderJoined]>, Group<gfortran_Group>;
3338def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>;
3339def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>;
3340def static_libgfortran : Flag<["-"], "static-libgfortran">, Group<gfortran_Group>;
3341
3342// "f" options with values for gfortran.
3343def fblas_matmul_limit_EQ : Joined<["-"], "fblas-matmul-limit=">, Group<gfortran_Group>;
3344def fcheck_EQ : Joined<["-"], "fcheck=">, Group<gfortran_Group>;
3345def fcoarray_EQ : Joined<["-"], "fcoarray=">, Group<gfortran_Group>;
3346def fconvert_EQ : Joined<["-"], "fconvert=">, Group<gfortran_Group>;
3347def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>;
3348def ffpe_trap_EQ : Joined<["-"], "ffpe-trap=">, Group<gfortran_Group>;
3349def ffree_line_length_VALUE : Joined<["-"], "ffree-line-length-">, Group<gfortran_Group>;
3350def finit_character_EQ : Joined<["-"], "finit-character=">, Group<gfortran_Group>;
3351def finit_integer_EQ : Joined<["-"], "finit-integer=">, Group<gfortran_Group>;
3352def finit_logical_EQ : Joined<["-"], "finit-logical=">, Group<gfortran_Group>;
3353def finit_real_EQ : Joined<["-"], "finit-real=">, Group<gfortran_Group>;
3354def fmax_array_constructor_EQ : Joined<["-"], "fmax-array-constructor=">, Group<gfortran_Group>;
3355def fmax_errors_EQ : Joined<["-"], "fmax-errors=">, Group<gfortran_Group>;
3356def fmax_stack_var_size_EQ : Joined<["-"], "fmax-stack-var-size=">, Group<gfortran_Group>;
3357def fmax_subrecord_length_EQ : Joined<["-"], "fmax-subrecord-length=">, Group<gfortran_Group>;
3358def frecord_marker_EQ : Joined<["-"], "frecord-marker=">, Group<gfortran_Group>;
3359
3360// "f" flags for gfortran.
3361defm aggressive_function_elimination : BooleanFFlag<"aggressive-function-elimination">, Group<gfortran_Group>;
3362defm align_commons : BooleanFFlag<"align-commons">, Group<gfortran_Group>;
3363defm all_intrinsics : BooleanFFlag<"all-intrinsics">, Group<gfortran_Group>;
3364defm automatic : BooleanFFlag<"automatic">, Group<gfortran_Group>;
3365defm backslash : BooleanFFlag<"backslash">, Group<gfortran_Group>;
3366defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>;
3367defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>;
3368defm check_array_temporaries : BooleanFFlag<"check-array-temporaries">, Group<gfortran_Group>;
3369defm cray_pointer : BooleanFFlag<"cray-pointer">, Group<gfortran_Group>;
3370defm d_lines_as_code : BooleanFFlag<"d-lines-as-code">, Group<gfortran_Group>;
3371defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, Group<gfortran_Group>;
3372defm default_double_8 : BooleanFFlag<"default-double-8">, Group<gfortran_Group>;
3373defm default_integer_8 : BooleanFFlag<"default-integer-8">, Group<gfortran_Group>;
3374defm default_real_8 : BooleanFFlag<"default-real-8">, Group<gfortran_Group>;
3375defm dollar_ok : BooleanFFlag<"dollar-ok">, Group<gfortran_Group>;
3376defm dump_fortran_optimized : BooleanFFlag<"dump-fortran-optimized">, Group<gfortran_Group>;
3377defm dump_fortran_original : BooleanFFlag<"dump-fortran-original">, Group<gfortran_Group>;
3378defm dump_parse_tree : BooleanFFlag<"dump-parse-tree">, Group<gfortran_Group>;
3379defm external_blas : BooleanFFlag<"external-blas">, Group<gfortran_Group>;
3380defm f2c : BooleanFFlag<"f2c">, Group<gfortran_Group>;
3381defm fixed_form : BooleanFFlag<"fixed-form">, Group<gfortran_Group>;
3382defm free_form : BooleanFFlag<"free-form">, Group<gfortran_Group>;
3383defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<gfortran_Group>;
3384defm implicit_none : BooleanFFlag<"implicit-none">, Group<gfortran_Group>;
3385defm init_local_zero : BooleanFFlag<"init-local-zero">, Group<gfortran_Group>;
3386defm integer_4_integer_8 : BooleanFFlag<"integer-4-integer-8">, Group<gfortran_Group>;
3387defm intrinsic_modules_path : BooleanFFlag<"intrinsic-modules-path">, Group<gfortran_Group>;
3388defm max_identifier_length : BooleanFFlag<"max-identifier-length">, Group<gfortran_Group>;
3389defm module_private : BooleanFFlag<"module-private">, Group<gfortran_Group>;
3390defm pack_derived : BooleanFFlag<"pack-derived">, Group<gfortran_Group>;
3391defm protect_parens : BooleanFFlag<"protect-parens">, Group<gfortran_Group>;
3392defm range_check : BooleanFFlag<"range-check">, Group<gfortran_Group>;
3393defm real_4_real_10 : BooleanFFlag<"real-4-real-10">, Group<gfortran_Group>;
3394defm real_4_real_16 : BooleanFFlag<"real-4-real-16">, Group<gfortran_Group>;
3395defm real_4_real_8 : BooleanFFlag<"real-4-real-8">, Group<gfortran_Group>;
3396defm real_8_real_10 : BooleanFFlag<"real-8-real-10">, Group<gfortran_Group>;
3397defm real_8_real_16 : BooleanFFlag<"real-8-real-16">, Group<gfortran_Group>;
3398defm real_8_real_4 : BooleanFFlag<"real-8-real-4">, Group<gfortran_Group>;
3399defm realloc_lhs : BooleanFFlag<"realloc-lhs">, Group<gfortran_Group>;
3400defm recursive : BooleanFFlag<"recursive">, Group<gfortran_Group>;
3401defm repack_arrays : BooleanFFlag<"repack-arrays">, Group<gfortran_Group>;
3402defm second_underscore : BooleanFFlag<"second-underscore">, Group<gfortran_Group>;
3403defm sign_zero : BooleanFFlag<"sign-zero">, Group<gfortran_Group>;
3404defm stack_arrays : BooleanFFlag<"stack-arrays">, Group<gfortran_Group>;
3405defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>;
3406defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>;
3407
3408
3409include "CC1Options.td"
3410
3411include "CLCompatOptions.td"
3412