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