diff options
Diffstat (limited to 'include/clang/Driver')
-rw-r--r-- | include/clang/Driver/Action.h | 113 | ||||
-rw-r--r-- | include/clang/Driver/CC1Options.td | 31 | ||||
-rw-r--r-- | include/clang/Driver/CLCompatOptions.td | 17 | ||||
-rw-r--r-- | include/clang/Driver/Compilation.h | 61 | ||||
-rw-r--r-- | include/clang/Driver/Distro.h | 3 | ||||
-rw-r--r-- | include/clang/Driver/Driver.h | 93 | ||||
-rw-r--r-- | include/clang/Driver/Job.h | 35 | ||||
-rw-r--r-- | include/clang/Driver/Multilib.h | 54 | ||||
-rw-r--r-- | include/clang/Driver/Options.td | 488 | ||||
-rw-r--r-- | include/clang/Driver/SanitizerArgs.h | 2 | ||||
-rw-r--r-- | include/clang/Driver/Tool.h | 8 | ||||
-rw-r--r-- | include/clang/Driver/ToolChain.h | 136 | ||||
-rw-r--r-- | include/clang/Driver/Types.def | 3 | ||||
-rw-r--r-- | include/clang/Driver/Types.h | 3 | ||||
-rw-r--r-- | include/clang/Driver/XRayArgs.h | 10 |
15 files changed, 727 insertions, 330 deletions
diff --git a/include/clang/Driver/Action.h b/include/clang/Driver/Action.h index 72456d34a0d95..723fbbed3598a 100644 --- a/include/clang/Driver/Action.h +++ b/include/clang/Driver/Action.h @@ -1,4 +1,4 @@ -//===--- Action.h - Abstract compilation steps ------------------*- C++ -*-===// +//===- Action.h - Abstract compilation steps --------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -10,20 +10,23 @@ #ifndef LLVM_CLANG_DRIVER_ACTION_H #define LLVM_CLANG_DRIVER_ACTION_H -#include "clang/Basic/Cuda.h" +#include "clang/Basic/LLVM.h" #include "clang/Driver/Types.h" #include "clang/Driver/Util.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/iterator_range.h" +#include <string> namespace llvm { +namespace opt { -class StringRef; +class Arg; -namespace opt { - class Arg; -} -} +} // namespace opt +} // namespace llvm namespace clang { namespace driver { @@ -44,11 +47,11 @@ class ToolChain; /// actions via MakeAction(). class Action { public: - typedef ActionList::size_type size_type; - typedef ActionList::iterator input_iterator; - typedef ActionList::const_iterator input_const_iterator; - typedef llvm::iterator_range<input_iterator> input_range; - typedef llvm::iterator_range<input_const_iterator> input_const_range; + using size_type = ActionList::size_type; + using input_iterator = ActionList::iterator; + using input_const_iterator = ActionList::const_iterator; + using input_range = llvm::iterator_range<input_iterator>; + using input_const_range = llvm::iterator_range<input_const_iterator>; enum ActionClass { InputClass = 0, @@ -78,11 +81,14 @@ public: // to designate the host offloading tool chain. enum OffloadKind { OFK_None = 0x00, + // The host offloading tool chain. OFK_Host = 0x01, + // The device offloading tool chains - one bit for each programming model. OFK_Cuda = 0x02, OFK_OpenMP = 0x04, + OFK_HIP = 0x08, }; static const char *getClassName(ActionClass AC); @@ -110,8 +116,10 @@ protected: /// Multiple programming models may be supported simultaneously by the same /// host. unsigned ActiveOffloadKindMask = 0u; + /// Offloading kind of the device. OffloadKind OffloadingDeviceKind = OFK_None; + /// The Offloading architecture associated with this action. const char *OffloadingArch = nullptr; @@ -149,6 +157,7 @@ public: void setCannotBeCollapsedWithNextDependentAction() { CanBeCollapsedWithNextDependentAction = false; } + /// Return true if this function can be collapsed with others. bool isCollapsingWithNextDependentActionLegal() const { return CanBeCollapsedWithNextDependentAction; @@ -156,22 +165,26 @@ public: /// Return a string containing the offload kind of the action. std::string getOffloadingKindPrefix() const; + /// Return a string that can be used as prefix in order to generate unique /// files for each offloading kind. By default, no prefix is used for /// non-device kinds, except if \a CreatePrefixForHost is set. static std::string GetOffloadingFileNamePrefix(OffloadKind Kind, - llvm::StringRef NormalizedTriple, + StringRef NormalizedTriple, bool CreatePrefixForHost = false); + /// Return a string containing a offload kind name. static StringRef GetOffloadKindName(OffloadKind Kind); /// Set the device offload info of this action and propagate it to its /// dependences. void propagateDeviceOffloadInfo(OffloadKind OKind, const char *OArch); + /// Append the host offload info of this action and propagate it to its /// dependences. void propagateHostOffloadInfo(unsigned OKinds, const char *OArch); + /// Set the offload info of this action to be the same as the provided action, /// and propagate it to its dependences. void propagateOffloadInfo(const Action *A); @@ -179,6 +192,7 @@ public: unsigned getOffloadingHostActiveKinds() const { return ActiveOffloadKindMask; } + OffloadKind getOffloadingDeviceKind() const { return OffloadingDeviceKind; } const char *getOffloadingArch() const { return OffloadingArch; } @@ -196,9 +210,10 @@ public: }; class InputAction : public Action { - virtual void anchor(); const llvm::opt::Arg &Input; + virtual void anchor(); + public: InputAction(const llvm::opt::Arg &Input, types::ID Type); @@ -211,6 +226,7 @@ public: class BindArchAction : public Action { virtual void anchor(); + /// The architecture to bind, or 0 if the default architecture /// should be bound. StringRef ArchName; @@ -236,9 +252,9 @@ public: /// toolchain, and offload kind to each action. class DeviceDependences final { public: - typedef SmallVector<const ToolChain *, 3> ToolChainList; - typedef SmallVector<const char *, 3> BoundArchList; - typedef SmallVector<OffloadKind, 3> OffloadKindList; + using ToolChainList = SmallVector<const ToolChain *, 3>; + using BoundArchList = SmallVector<const char *, 3>; + using OffloadKindList = SmallVector<OffloadKind, 3>; private: // Lists that keep the information for each dependency. All the lists are @@ -248,10 +264,13 @@ public: /// The dependence actions. ActionList DeviceActions; + /// The offloading toolchains that should be used with the action. ToolChainList DeviceToolChains; + /// The architectures that should be used with this action. BoundArchList DeviceBoundArchs; + /// The offload kind of each dependence. OffloadKindList DeviceOffloadKinds; @@ -262,12 +281,12 @@ public: OffloadKind OKind); /// Get each of the individual arrays. - const ActionList &getActions() const { return DeviceActions; }; - const ToolChainList &getToolChains() const { return DeviceToolChains; }; - const BoundArchList &getBoundArchs() const { return DeviceBoundArchs; }; + const ActionList &getActions() const { return DeviceActions; } + const ToolChainList &getToolChains() const { return DeviceToolChains; } + const BoundArchList &getBoundArchs() const { return DeviceBoundArchs; } const OffloadKindList &getOffloadKinds() const { return DeviceOffloadKinds; - }; + } }; /// Type used to communicate host actions. It associates bound architecture, @@ -275,10 +294,13 @@ public: class HostDependence final { /// The dependence action. Action &HostAction; + /// The offloading toolchain that should be used with the action. const ToolChain &HostToolChain; + /// The architectures that should be used with this action. const char *HostBoundArch = nullptr; + /// The offload kind of each dependence. unsigned HostOffloadKinds = 0u; @@ -286,19 +308,20 @@ public: HostDependence(Action &A, const ToolChain &TC, const char *BoundArch, const unsigned OffloadKinds) : HostAction(A), HostToolChain(TC), HostBoundArch(BoundArch), - HostOffloadKinds(OffloadKinds){}; + HostOffloadKinds(OffloadKinds) {} + /// Constructor version that obtains the offload kinds from the device /// dependencies. HostDependence(Action &A, const ToolChain &TC, const char *BoundArch, const DeviceDependences &DDeps); - Action *getAction() const { return &HostAction; }; - const ToolChain *getToolChain() const { return &HostToolChain; }; - const char *getBoundArch() const { return HostBoundArch; }; - unsigned getOffloadKinds() const { return HostOffloadKinds; }; + Action *getAction() const { return &HostAction; } + const ToolChain *getToolChain() const { return &HostToolChain; } + const char *getBoundArch() const { return HostBoundArch; } + unsigned getOffloadKinds() const { return HostOffloadKinds; } }; - typedef llvm::function_ref<void(Action *, const ToolChain *, const char *)> - OffloadActionWorkTy; + using OffloadActionWorkTy = + llvm::function_ref<void(Action *, const ToolChain *, const char *)>; private: /// The host offloading toolchain that should be used with the action. @@ -349,6 +372,7 @@ public: class JobAction : public Action { virtual void anchor(); + protected: JobAction(ActionClass Kind, Action *Input, types::ID Type); JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type); @@ -362,6 +386,7 @@ public: class PreprocessJobAction : public JobAction { void anchor() override; + public: PreprocessJobAction(Action *Input, types::ID OutputType); @@ -372,6 +397,7 @@ public: class PrecompileJobAction : public JobAction { void anchor() override; + public: PrecompileJobAction(Action *Input, types::ID OutputType); @@ -382,6 +408,7 @@ public: class AnalyzeJobAction : public JobAction { void anchor() override; + public: AnalyzeJobAction(Action *Input, types::ID OutputType); @@ -392,6 +419,7 @@ public: class MigrateJobAction : public JobAction { void anchor() override; + public: MigrateJobAction(Action *Input, types::ID OutputType); @@ -402,6 +430,7 @@ public: class CompileJobAction : public JobAction { void anchor() override; + public: CompileJobAction(Action *Input, types::ID OutputType); @@ -412,6 +441,7 @@ public: class BackendJobAction : public JobAction { void anchor() override; + public: BackendJobAction(Action *Input, types::ID OutputType); @@ -422,6 +452,7 @@ public: class AssembleJobAction : public JobAction { void anchor() override; + public: AssembleJobAction(Action *Input, types::ID OutputType); @@ -432,6 +463,7 @@ public: class LinkJobAction : public JobAction { void anchor() override; + public: LinkJobAction(ActionList &Inputs, types::ID Type); @@ -442,6 +474,7 @@ public: class LipoJobAction : public JobAction { void anchor() override; + public: LipoJobAction(ActionList &Inputs, types::ID Type); @@ -452,6 +485,7 @@ public: class DsymutilJobAction : public JobAction { void anchor() override; + public: DsymutilJobAction(ActionList &Inputs, types::ID Type); @@ -462,8 +496,10 @@ public: class VerifyJobAction : public JobAction { void anchor() override; + public: VerifyJobAction(ActionClass Kind, Action *Input, types::ID Type); + static bool classof(const Action *A) { return A->getKind() == VerifyDebugInfoJobClass || A->getKind() == VerifyPCHJobClass; @@ -472,8 +508,10 @@ public: class VerifyDebugInfoJobAction : public VerifyJobAction { void anchor() override; + public: VerifyDebugInfoJobAction(Action *Input, types::ID Type); + static bool classof(const Action *A) { return A->getKind() == VerifyDebugInfoJobClass; } @@ -481,8 +519,10 @@ public: class VerifyPCHJobAction : public VerifyJobAction { void anchor() override; + public: VerifyPCHJobAction(Action *Input, types::ID Type); + static bool classof(const Action *A) { return A->getKind() == VerifyPCHJobClass; } @@ -507,18 +547,21 @@ public: /// Type that provides information about the actions that depend on this /// unbundling action. struct DependentActionInfo final { - /// \brief The tool chain of the dependent action. + /// The tool chain of the dependent action. const ToolChain *DependentToolChain = nullptr; - /// \brief The bound architecture of the dependent action. + + /// The bound architecture of the dependent action. StringRef DependentBoundArch; - /// \brief The offload kind of the dependent action. + + /// The offload kind of the dependent action. const OffloadKind DependentOffloadKind = OFK_None; + DependentActionInfo(const ToolChain *DependentToolChain, StringRef DependentBoundArch, const OffloadKind DependentOffloadKind) : DependentToolChain(DependentToolChain), DependentBoundArch(DependentBoundArch), - DependentOffloadKind(DependentOffloadKind){}; + DependentOffloadKind(DependentOffloadKind) {} }; private: @@ -546,7 +589,7 @@ public: } }; -} // end namespace driver -} // end namespace clang +} // namespace driver +} // namespace clang -#endif +#endif // LLVM_CLANG_DRIVER_ACTION_H diff --git a/include/clang/Driver/CC1Options.td b/include/clang/Driver/CC1Options.td index 7dea88b62cc19..7cb9724a57e19 100644 --- a/include/clang/Driver/CC1Options.td +++ b/include/clang/Driver/CC1Options.td @@ -36,6 +36,10 @@ def triple_EQ : Joined<["-"], "triple=">, Alias<triple>; def mfpmath : Separate<["-"], "mfpmath">, HelpText<"Which unit to use for fp math">; +def fpadding_on_unsigned_fixed_point : Flag<["-"], "fpadding-on-unsigned-fixed-point">, + HelpText<"Force each unsigned fixed point type to have an extra bit of padding to align their scales with those of signed fixed point types">; +def fno_padding_on_unsigned_fixed_point : Flag<["-"], "fno-padding-on-unsigned-fixed-point">; + //===----------------------------------------------------------------------===// // Analyzer Options //===----------------------------------------------------------------------===// @@ -275,8 +279,6 @@ def split_stacks : Flag<["-"], "split-stacks">, HelpText<"Try to use a split stack if possible.">; def mno_zero_initialized_in_bss : Flag<["-"], "mno-zero-initialized-in-bss">, HelpText<"Do not put zero initialized data in the BSS">; -def backend_option : Separate<["-"], "backend-option">, - HelpText<"Additional arguments to forward to LLVM backend (during code gen)">; def mregparm : Separate<["-"], "mregparm">, HelpText<"Limit the number of registers available for integer arguments">; def munwind_tables : Flag<["-"], "munwind-tables">, @@ -447,6 +449,8 @@ def no_code_completion_ns_level_decls : Flag<["-"], "no-code-completion-ns-level HelpText<"Do not include declarations inside namespaces (incl. global namespace) in the code-completion results.">; def code_completion_brief_comments : Flag<["-"], "code-completion-brief-comments">, HelpText<"Include brief documentation comments in code-completion results.">; +def code_completion_with_fixits : Flag<["-"], "code-completion-with-fixits">, + HelpText<"Include code completion results which require small fix-its.">; def disable_free : Flag<["-"], "disable-free">, HelpText<"Disable freeing of memory on exit">; def discard_value_names : Flag<["-"], "discard-value-names">, @@ -533,6 +537,8 @@ def ast_dump : Flag<["-"], "ast-dump">, HelpText<"Build ASTs and then debug dump them">; def ast_dump_all : Flag<["-"], "ast-dump-all">, HelpText<"Build ASTs and then debug dump them, forcing deserialization">; +def templight_dump : Flag<["-"], "templight-dump">, + HelpText<"Dump templight information to stdout">; def ast_dump_lookups : Flag<["-"], "ast-dump-lookups">, HelpText<"Build ASTs and then debug dump their name lookup tables">; def ast_view : Flag<["-"], "ast-view">, @@ -561,6 +567,8 @@ def rewrite_macros : Flag<["-"], "rewrite-macros">, HelpText<"Expand macros without full preprocessing">; def migrate : Flag<["-"], "migrate">, HelpText<"Migrate source code">; +def compiler_options_dump : Flag<["-"], "compiler-options-dump">, + HelpText<"Dump the compiler configuration options">; } def emit_llvm_uselists : Flag<["-"], "emit-llvm-uselists">, @@ -599,13 +607,14 @@ def fixit_to_temp : Flag<["-"], "fixit-to-temporary">, def foverride_record_layout_EQ : Joined<["-"], "foverride-record-layout=">, HelpText<"Override record layouts with those in the given file">; -def find_pch_source_EQ : Joined<["-"], "find-pch-source=">, - HelpText<"When building a pch, try to find the input file in include " - "directories, as if it had been included by the argument passed " - "to this flag.">; +def pch_through_header_EQ : Joined<["-"], "pch-through-header=">, + HelpText<"Stop PCH generation after including this file. When using a PCH, " + "skip tokens until after this file is included.">; def fno_pch_timestamp : Flag<["-"], "fno-pch-timestamp">, HelpText<"Disable inclusion of timestamp in precompiled headers">; - +def building_pch_with_obj : Flag<["-"], "building-pch-with-obj">, + HelpText<"This compilation is part of building a PCH with corresponding object file.">; + def aligned_alloc_unavailable : Flag<["-"], "faligned-alloc-unavailable">, HelpText<"Aligned allocation/deallocation functions are unavailable">; @@ -619,6 +628,8 @@ def version : Flag<["-"], "version">, HelpText<"Print the compiler version">; def main_file_name : Separate<["-"], "main-file-name">, HelpText<"Main file name to use for debug info">; +def split_dwarf_file : Separate<["-"], "split-dwarf-file">, + HelpText<"File name to use for split dwarf debug info output">; } @@ -628,8 +639,6 @@ def fexternc_nounwind : Flag<["-"], "fexternc-nounwind">, HelpText<"Assume all functions with C linkage do not unwind">; def enable_split_dwarf : Flag<["-"], "enable-split-dwarf">, HelpText<"Use split dwarf/Fission">; -def split_dwarf_file : Separate<["-"], "split-dwarf-file">, - HelpText<"File name to use for split dwarf debug info output">; def fno_wchar : Flag<["-"], "fno-wchar">, HelpText<"Disable C++ builtin type wchar_t">; def fconstant_string_class : Separate<["-"], "fconstant-string-class">, @@ -645,6 +654,8 @@ def disable_objc_default_synthesize_properties : Flag<["-"], "disable-objc-defau HelpText<"disable the default synthesis of Objective-C properties">; def fencode_extended_block_signature : Flag<["-"], "fencode-extended-block-signature">, HelpText<"enable extended encoding of block type signature">; +def function_alignment : Separate<["-"], "function-alignment">, + HelpText<"default alignment for functions">; def pic_level : Separate<["-"], "pic-level">, HelpText<"Value for __PIC__">; def pic_is_pie : Flag<["-"], "pic-is-pie">, @@ -705,8 +716,6 @@ def fobjc_subscripting_legacy_runtime : Flag<["-"], "fobjc-subscripting-legacy-r HelpText<"Allow Objective-C array and dictionary subscripting in legacy runtime">; def vtordisp_mode_EQ : Joined<["-"], "vtordisp-mode=">, HelpText<"Control vtordisp placement on win32 targets">; -def fno_rtti_data : Flag<["-"], "fno-rtti-data">, - HelpText<"Control emission of RTTI data">; def fnative_half_type: Flag<["-"], "fnative-half-type">, HelpText<"Use the native half type for __fp16 instead of promoting to float">; def fnative_half_arguments_and_returns : Flag<["-"], "fnative-half-arguments-and-returns">, diff --git a/include/clang/Driver/CLCompatOptions.td b/include/clang/Driver/CLCompatOptions.td index c1f0a89b5dc8f..78667851ca19c 100644 --- a/include/clang/Driver/CLCompatOptions.td +++ b/include/clang/Driver/CLCompatOptions.td @@ -61,6 +61,8 @@ def _SLASH_Brepro_ : CLFlag<"Brepro-">, def _SLASH_C : CLFlag<"C">, HelpText<"Don't discard comments when preprocessing">, Alias<C>; def _SLASH_c : CLFlag<"c">, HelpText<"Compile only">, Alias<c>; +def _SLASH_d1PP : CLFlag<"d1PP">, + HelpText<"Retain macro definitions in /E mode">, Alias<dD>; def _SLASH_d1reportAllClassLayout : CLFlag<"d1reportAllClassLayout">, HelpText<"Dump record layout information">, Alias<fdump_record_layouts>; def _SLASH_diagnostics_caret : CLFlag<"diagnostics:caret">, @@ -164,6 +166,9 @@ def _SLASH_wd4996 : CLFlag<"wd4996">, Alias<W_Joined>, AliasArgs<["no-deprecated-declarations"]>; def _SLASH_vd : CLJoined<"vd">, HelpText<"Control vtordisp placement">, Alias<vtordisp_mode_EQ>; +def _SLASH_X : CLFlag<"X">, + HelpText<"Don't add %INCLUDE% to the include search path">, + Alias<nostdlibinc>; def _SLASH_Zc_sizedDealloc : CLFlag<"Zc:sizedDealloc">, HelpText<"Enable C++14 sized global deallocation functions">, Alias<fsized_deallocation>; @@ -235,10 +240,12 @@ def _SLASH_Fi : CLCompileJoined<"Fi">, def _SLASH_Fo : CLCompileJoined<"Fo">, HelpText<"Set output object file, or directory (ends in / or \\) (with /c)">, MetaVarName<"<file or directory>">; +def _SLASH_Guard : CLJoined<"guard:">, + HelpText<"Enable Control Flow Guard with /guard:cf">; def _SLASH_GX : CLFlag<"GX">, HelpText<"Enable exception handling">; def _SLASH_GX_ : CLFlag<"GX-">, - HelpText<"Enable exception handling">; + HelpText<"Disable exception handling">; def _SLASH_imsvc : CLJoinedOrSeparate<"imsvc">, HelpText<"Add directory to system include search path, as if part of %INCLUDE%">, MetaVarName<"<dir>">; @@ -324,18 +331,20 @@ def _SLASH_kernel_ : CLIgnoredFlag<"kernel-">; def _SLASH_nologo : CLIgnoredFlag<"nologo">; def _SLASH_Og : CLIgnoredFlag<"Og">; def _SLASH_openmp_ : CLIgnoredFlag<"openmp-">; +def _SLASH_permissive_ : CLIgnoredFlag<"permissive-">; def _SLASH_RTC : CLIgnoredJoined<"RTC">; def _SLASH_sdl : CLIgnoredFlag<"sdl">; def _SLASH_sdl_ : CLIgnoredFlag<"sdl-">; def _SLASH_utf8 : CLIgnoredFlag<"utf-8">, HelpText<"Set source and runtime encoding to UTF-8 (default)">; def _SLASH_w : CLIgnoredJoined<"w">; +def _SLASH_Zc___cplusplus : CLIgnoredFlag<"Zc:__cplusplus">; def _SLASH_Zc_auto : CLIgnoredFlag<"Zc:auto">; def _SLASH_Zc_forScope : CLIgnoredFlag<"Zc:forScope">; def _SLASH_Zc_inline : CLIgnoredFlag<"Zc:inline">; def _SLASH_Zc_rvalueCast : CLIgnoredFlag<"Zc:rvalueCast">; -def _SLASH_Zc_wchar_t : CLIgnoredFlag<"Zc:wchar_t">; def _SLASH_Zc_ternary : CLIgnoredFlag<"Zc:ternary">; +def _SLASH_Zc_wchar_t : CLIgnoredFlag<"Zc:wchar_t">; def _SLASH_Zm : CLIgnoredJoined<"Zm">; def _SLASH_Zo : CLIgnoredFlag<"Zo">; def _SLASH_Zo_ : CLIgnoredFlag<"Zo-">; @@ -344,6 +353,8 @@ def _SLASH_Zo_ : CLIgnoredFlag<"Zo-">; // Unsupported: def _SLASH_AI : CLJoined<"AI">; +def _SLASH_Bt : CLFlag<"Bt">; +def _SLASH_Bt_plus : CLFlag<"Bt+">; def _SLASH_clr : CLJoined<"clr">; def _SLASH_doc : CLJoined<"doc">; def _SLASH_FA_joined : CLJoined<"FA">; @@ -364,7 +375,6 @@ def _SLASH_GL_ : CLFlag<"GL-">; def _SLASH_Gm : CLFlag<"Gm">; def _SLASH_Gm_ : CLFlag<"Gm-">; def _SLASH_GT : CLFlag<"GT">; -def _SLASH_Guard : CLJoined<"guard:">; def _SLASH_GZ : CLFlag<"GZ">; def _SLASH_H : CLFlag<"H">; def _SLASH_homeparams : CLFlag<"homeparams">; @@ -382,7 +392,6 @@ def _SLASH_u : CLFlag<"u">; def _SLASH_V : CLFlag<"V">; def _SLASH_WL : CLFlag<"WL">; def _SLASH_Wp64 : CLFlag<"Wp64">; -def _SLASH_X : CLFlag<"X">; def _SLASH_Yd : CLFlag<"Yd">; def _SLASH_Yl : CLJoined<"Yl">; def _SLASH_Za : CLFlag<"Za">; diff --git a/include/clang/Driver/Compilation.h b/include/clang/Driver/Compilation.h index 89c0def6c57a0..20eb07f6de8bd 100644 --- a/include/clang/Driver/Compilation.h +++ b/include/clang/Driver/Compilation.h @@ -1,4 +1,4 @@ -//===--- Compilation.h - Compilation Task Data Structure --------*- C++ -*-===// +//===- Compilation.h - Compilation Task Data Structure ----------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -10,24 +10,36 @@ #ifndef LLVM_CLANG_DRIVER_COMPILATION_H #define LLVM_CLANG_DRIVER_COMPILATION_H +#include "clang/Basic/LLVM.h" #include "clang/Driver/Action.h" #include "clang/Driver/Job.h" #include "clang/Driver/Util.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/Optional.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Option/Option.h" +#include <cassert> +#include <iterator> #include <map> +#include <memory> +#include <utility> +#include <vector> namespace llvm { namespace opt { - class DerivedArgList; - class InputArgList; -} -} + +class DerivedArgList; +class InputArgList; + +} // namespace opt +} // namespace llvm namespace clang { namespace driver { - class Driver; - class JobList; - class ToolChain; + +class Driver; +class ToolChain; /// Compilation - A set of tasks to perform for a single driver /// invocation. @@ -40,7 +52,7 @@ class Compilation { /// A mask of all the programming models the host has to support in the /// current compilation. - unsigned ActiveOffloadMask; + unsigned ActiveOffloadMask = 0; /// Array with the toolchains of offloading host and devices in the order they /// were requested by the user. We are preserving that order in case the code @@ -73,6 +85,11 @@ class Compilation { const ToolChain *TC = nullptr; StringRef BoundArch; Action::OffloadKind DeviceOffloadKind = Action::OFK_None; + + TCArgsKey(const ToolChain *TC, StringRef BoundArch, + Action::OffloadKind DeviceOffloadKind) + : TC(TC), BoundArch(BoundArch), DeviceOffloadKind(DeviceOffloadKind) {} + bool operator<(const TCArgsKey &K) const { if (TC < K.TC) return true; @@ -83,9 +100,6 @@ class Compilation { return true; return false; } - TCArgsKey(const ToolChain *TC, StringRef BoundArch, - Action::OffloadKind DeviceOffloadKind) - : TC(TC), BoundArch(BoundArch), DeviceOffloadKind(DeviceOffloadKind) {} }; std::map<TCArgsKey, llvm::opt::DerivedArgList *> TCArgs; @@ -103,11 +117,14 @@ class Compilation { std::vector<Optional<StringRef>> Redirects; /// Whether we're compiling for diagnostic purposes. - bool ForDiagnostics; + bool ForDiagnostics = false; /// Whether an error during the parsing of the input args. bool ContainsError; + /// Whether to keep temporary files regardless of -save-temps. + bool ForceKeepTempFiles = false; + public: Compilation(const Driver &D, const ToolChain &DefaultToolChain, llvm::opt::InputArgList *Args, @@ -123,12 +140,12 @@ public: } /// Iterator that visits device toolchains of a given kind. - typedef const std::multimap<Action::OffloadKind, - const ToolChain *>::const_iterator - const_offload_toolchains_iterator; - typedef std::pair<const_offload_toolchains_iterator, - const_offload_toolchains_iterator> - const_offload_toolchains_range; + using const_offload_toolchains_iterator = + const std::multimap<Action::OffloadKind, + const ToolChain *>::const_iterator; + using const_offload_toolchains_range = + std::pair<const_offload_toolchains_iterator, + const_offload_toolchains_iterator>; template <Action::OffloadKind Kind> const_offload_toolchains_range getOffloadToolChains() const { @@ -289,7 +306,7 @@ public: void Redirect(ArrayRef<Optional<StringRef>> Redirects); }; -} // end namespace driver -} // end namespace clang +} // namespace driver +} // namespace clang -#endif +#endif // LLVM_CLANG_DRIVER_COMPILATION_H diff --git a/include/clang/Driver/Distro.h b/include/clang/Driver/Distro.h index 4ab4e2ae99370..7b34a0925603e 100644 --- a/include/clang/Driver/Distro.h +++ b/include/clang/Driver/Distro.h @@ -61,6 +61,7 @@ public: UbuntuZesty, UbuntuArtful, UbuntuBionic, + UbuntuCosmic, UnknownDistro }; @@ -114,7 +115,7 @@ public: } bool IsUbuntu() const { - return DistroVal >= UbuntuHardy && DistroVal <= UbuntuBionic; + return DistroVal >= UbuntuHardy && DistroVal <= UbuntuCosmic; } bool IsAlpineLinux() const { diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h index a3662872a9531..017248c3690f1 100644 --- a/include/clang/Driver/Driver.h +++ b/include/clang/Driver/Driver.h @@ -19,6 +19,8 @@ #include "clang/Driver/Util.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/StringSaver.h" #include <list> #include <map> @@ -26,14 +28,6 @@ namespace llvm { class Triple; - -namespace opt { - class Arg; - class ArgList; - class DerivedArgList; - class InputArgList; - class OptTable; -} } namespace clang { @@ -138,6 +132,12 @@ public: /// The path to the compiler resource directory. std::string ResourceDir; + /// System directory for config files. + std::string SystemConfigDir; + + /// User directory for config files. + std::string UserConfigDir; + /// A prefix directory used to emulate a limited subset of GCC's '-Bprefix' /// functionality. /// FIXME: This type of customization should be removed in favor of the @@ -202,12 +202,27 @@ public: unsigned CCGenDiagnostics : 1; private: - /// Default target triple. - std::string DefaultTargetTriple; + /// Raw target triple. + std::string TargetTriple; /// Name to use when invoking gcc/g++. std::string CCCGenericGCCName; + /// Name of configuration file if used. + std::string ConfigFile; + + /// Allocator for string saver. + llvm::BumpPtrAllocator Alloc; + + /// Object that stores strings read from configuration file. + llvm::StringSaver Saver; + + /// Arguments originated from configuration file. + std::unique_ptr<llvm::opt::InputArgList> CfgOptions; + + /// Arguments originated from command line. + std::unique_ptr<llvm::opt::InputArgList> CLOptions; + /// Whether to check that input files exist when constructing compilation /// jobs. unsigned CheckInputsExist : 1; @@ -228,7 +243,7 @@ private: std::list<std::string> TempFiles; std::list<std::string> ResultFiles; - /// \brief Cache of all the ToolChains in use by the driver. + /// Cache of all the ToolChains in use by the driver. /// /// This maps from the string representation of a triple to a ToolChain /// created targeting that triple. The driver owns all the ToolChain objects @@ -252,7 +267,7 @@ private: void generatePrefixedToolNames(StringRef Tool, const ToolChain &TC, SmallVectorImpl<std::string> &Names) const; - /// \brief Find the appropriate .crash diagonostic file for the child crash + /// Find the appropriate .crash diagonostic file for the child crash /// under this driver and copy it out to a temporary destination with the /// other reproducer related files (.sh, .cache, etc). If not found, suggest a /// directory for the user to look at. @@ -267,7 +282,7 @@ private: SmallString<128> &CrashDiagDir); public: - Driver(StringRef ClangExecutable, StringRef DefaultTargetTriple, + Driver(StringRef ClangExecutable, StringRef TargetTriple, DiagnosticsEngine &Diags, IntrusiveRefCntPtr<vfs::FileSystem> VFS = nullptr); @@ -277,6 +292,8 @@ public: /// Name to use when invoking gcc/g++. const std::string &getCCCGenericGCCName() const { return CCCGenericGCCName; } + const std::string &getConfigFile() const { return ConfigFile; } + const llvm::opt::OptTable &getOpts() const { return *Opts; } const DiagnosticsEngine &getDiags() const { return Diags; } @@ -292,12 +309,14 @@ public: const std::string &getTitle() { return DriverTitle; } void setTitle(std::string Value) { DriverTitle = std::move(Value); } - /// \brief Get the path to the main clang executable. + std::string getTargetTriple() const { return TargetTriple; } + + /// Get the path to the main clang executable. const char *getClangProgramPath() const { return ClangExecutable.c_str(); } - /// \brief Get the path to where the clang executable was installed. + /// Get the path to where the clang executable was installed. const char *getInstalledDir() const { if (!InstalledDir.empty()) return InstalledDir.c_str(); @@ -388,11 +407,19 @@ public: int ExecuteCompilation(Compilation &C, SmallVectorImpl< std::pair<int, const Command *> > &FailingCommands); - /// generateCompilationDiagnostics - Generate diagnostics information + /// Contains the files in the compilation diagnostic report generated by + /// generateCompilationDiagnostics. + struct CompilationDiagnosticReport { + llvm::SmallVector<std::string, 4> TemporaryFiles; + }; + + /// generateCompilationDiagnostics - Generate diagnostics information /// including preprocessed source file(s). - /// - void generateCompilationDiagnostics(Compilation &C, - const Command &FailingCommand); + /// + void generateCompilationDiagnostics( + Compilation &C, const Command &FailingCommand, + StringRef AdditionalInformation = "", + CompilationDiagnosticReport *GeneratedReport = nullptr); /// @} /// @name Helper Methods @@ -425,9 +452,9 @@ public: // FIXME: This should be in CompilationInfo. std::string GetProgramPath(StringRef Name, const ToolChain &TC) const; - /// handleAutocompletions - Handle --autocomplete by searching and printing + /// HandleAutocompletions - Handle --autocomplete by searching and printing /// possible flags, descriptions, and its arguments. - void handleAutocompletions(StringRef PassedFlags) const; + void HandleAutocompletions(StringRef PassedFlags) const; /// HandleImmediateArgs - Handle any arguments which should be /// treated before building actions or binding tools. @@ -439,8 +466,10 @@ public: /// ConstructAction - Construct the appropriate action to do for /// \p Phase on the \p Input, taking in to account arguments /// like -fsyntax-only or --analyze. - Action *ConstructPhaseAction(Compilation &C, const llvm::opt::ArgList &Args, - phases::ID Phase, Action *Input) const; + Action *ConstructPhaseAction( + Compilation &C, const llvm::opt::ArgList &Args, phases::ID Phase, + Action *Input, + Action::OffloadKind TargetDeviceOffloadKind = Action::OFK_None) const; /// BuildJobsForAction - Construct the jobs to perform for the action \p A and /// return an InputInfo for the result of running \p A. Will only construct @@ -493,6 +522,18 @@ public: LTOKind getLTOMode() const { return LTOMode; } private: + + /// Tries to load options from configuration file. + /// + /// \returns true if error occurred. + bool loadConfigFile(); + + /// Read options from the specified file. + /// + /// \param [in] FileName File to read. + /// \returns true, if error occurred while reading. + bool readConfigFile(StringRef FileName); + /// Set the driver mode (cl, gcc, etc) from an option string of the form /// --driver-mode=<mode>. void setDriverModeFromOption(StringRef Opt); @@ -501,7 +542,7 @@ private: /// compilation based on which -f(no-)?lto(=.*)? option occurs last. void setLTOMode(const llvm::opt::ArgList &Args); - /// \brief Retrieves a ToolChain for a particular \p Target triple. + /// Retrieves a ToolChain for a particular \p Target triple. /// /// Will cache ToolChains for the life of the driver object, and create them /// on-demand. @@ -510,7 +551,7 @@ private: /// @} - /// \brief Get bitmasks for which option flags to include and exclude based on + /// Get bitmasks for which option flags to include and exclude based on /// the driver mode. std::pair<unsigned, unsigned> getIncludeExcludeOptionFlagMasks() const; @@ -543,6 +584,8 @@ public: /// no extra characters remaining at the end. static bool GetReleaseVersion(StringRef Str, MutableArrayRef<unsigned> Digits); + /// Compute the default -fmodule-cache-path. + static void getDefaultModuleCachePath(SmallVectorImpl<char> &Result); }; /// \return True if the last defined optimization level is -Ofast. diff --git a/include/clang/Driver/Job.h b/include/clang/Driver/Job.h index b74b3b4b35e1b..47d9e992ba503 100644 --- a/include/clang/Driver/Job.h +++ b/include/clang/Driver/Job.h @@ -1,4 +1,4 @@ -//===--- Job.h - Commands to Execute ----------------------------*- C++ -*-===// +//===- Job.h - Commands to Execute ------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -12,21 +12,22 @@ #include "clang/Basic/LLVM.h" #include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" #include "llvm/ADT/iterator.h" #include "llvm/Option/Option.h" #include <memory> - -namespace llvm { - class raw_ostream; -} +#include <string> +#include <utility> +#include <vector> namespace clang { namespace driver { + class Action; -class Command; -class Tool; class InputInfo; +class Tool; // Re-export this as clang::driver::ArgStringList. using llvm::opt::ArgStringList; @@ -60,7 +61,7 @@ class Command { /// Response file name, if this command is set to use one, or nullptr /// otherwise - const char *ResponseFile; + const char *ResponseFile = nullptr; /// The input file list in case we need to emit a file list instead of a /// proper response file @@ -92,7 +93,7 @@ public: // FIXME: This really shouldn't be copyable, but is currently copied in some // error handling in Driver::generateCompilationDiagnostics. Command(const Command &) = default; - virtual ~Command() {} + virtual ~Command() = default; virtual void Print(llvm::raw_ostream &OS, const char *Terminator, bool Quote, CrashReportInfo *CrashInfo = nullptr) const; @@ -115,7 +116,7 @@ public: InputFileList = std::move(List); } - /// \brief Sets the environment to be used by the new process. + /// Sets the environment to be used by the new process. /// \param NewEnvironment An array of environment variables. /// \remark If the environment remains unset, then the environment /// from the parent process will be used. @@ -165,10 +166,10 @@ public: /// JobList - A sequence of jobs to perform. class JobList { public: - typedef SmallVector<std::unique_ptr<Command>, 4> list_type; - typedef list_type::size_type size_type; - typedef llvm::pointee_iterator<list_type::iterator> iterator; - typedef llvm::pointee_iterator<list_type::const_iterator> const_iterator; + using list_type = SmallVector<std::unique_ptr<Command>, 4>; + using size_type = list_type::size_type; + using iterator = llvm::pointee_iterator<list_type::iterator>; + using const_iterator = llvm::pointee_iterator<list_type::const_iterator>; private: list_type Jobs; @@ -193,7 +194,7 @@ public: const_iterator end() const { return Jobs.end(); } }; -} // end namespace driver -} // end namespace clang +} // namespace driver +} // namespace clang -#endif +#endif // LLVM_CLANG_DRIVER_JOB_H diff --git a/include/clang/Driver/Multilib.h b/include/clang/Driver/Multilib.h index 36d2493b1afca..132d981854fcb 100644 --- a/include/clang/Driver/Multilib.h +++ b/include/clang/Driver/Multilib.h @@ -1,4 +1,4 @@ -//===--- Multilib.h ---------------------------------------------*- C++ -*-===// +//===- Multilib.h -----------------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -11,10 +11,14 @@ #define LLVM_CLANG_DRIVER_MULTILIB_H #include "clang/Basic/LLVM.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" -#include "llvm/Option/Option.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/Compiler.h" +#include <cassert> #include <functional> #include <string> +#include <utility> #include <vector> namespace clang { @@ -24,7 +28,7 @@ namespace driver { /// by a command line flag class Multilib { public: - typedef std::vector<std::string> flags_list; + using flags_list = std::vector<std::string>; private: std::string GCCSuffix; @@ -33,40 +37,43 @@ private: flags_list Flags; public: - Multilib(StringRef GCCSuffix = "", StringRef OSSuffix = "", - StringRef IncludeSuffix = ""); + Multilib(StringRef GCCSuffix = {}, StringRef OSSuffix = {}, + StringRef IncludeSuffix = {}); - /// \brief Get the detected GCC installation path suffix for the multi-arch + /// Get the detected GCC installation path suffix for the multi-arch /// target variant. Always starts with a '/', unless empty const std::string &gccSuffix() const { assert(GCCSuffix.empty() || (StringRef(GCCSuffix).front() == '/' && GCCSuffix.size() > 1)); return GCCSuffix; } + /// Set the GCC installation path suffix. Multilib &gccSuffix(StringRef S); - /// \brief Get the detected os path suffix for the multi-arch + /// Get the detected os path suffix for the multi-arch /// target variant. Always starts with a '/', unless empty const std::string &osSuffix() const { assert(OSSuffix.empty() || (StringRef(OSSuffix).front() == '/' && OSSuffix.size() > 1)); return OSSuffix; } + /// Set the os path suffix. Multilib &osSuffix(StringRef S); - /// \brief Get the include directory suffix. Always starts with a '/', unless + /// Get the include directory suffix. Always starts with a '/', unless /// empty const std::string &includeSuffix() const { assert(IncludeSuffix.empty() || (StringRef(IncludeSuffix).front() == '/' && IncludeSuffix.size() > 1)); return IncludeSuffix; } + /// Set the include directory suffix Multilib &includeSuffix(StringRef S); - /// \brief Get the flags that indicate or contraindicate this multilib's use + /// Get the flags that indicate or contraindicate this multilib's use /// All elements begin with either '+' or '-' const flags_list &flags() const { return Flags; } flags_list &flags() { return Flags; } @@ -85,7 +92,7 @@ public: } LLVM_DUMP_METHOD void dump() const; - /// \brief print summary of the Multilib + /// print summary of the Multilib void print(raw_ostream &OS) const; /// Check whether any of the 'against' flags contradict the 'for' flags. @@ -102,14 +109,12 @@ raw_ostream &operator<<(raw_ostream &OS, const Multilib &M); class MultilibSet { public: - typedef std::vector<Multilib> multilib_list; - typedef multilib_list::iterator iterator; - typedef multilib_list::const_iterator const_iterator; - - typedef std::function<std::vector<std::string>(const Multilib &M)> - IncludeDirsFunc; - - typedef llvm::function_ref<bool(const Multilib &)> FilterCallback; + using multilib_list = std::vector<Multilib>; + using iterator = multilib_list::iterator; + using const_iterator = multilib_list::const_iterator; + using IncludeDirsFunc = + std::function<std::vector<std::string>(const Multilib &M)>; + using FilterCallback = llvm::function_ref<bool(const Multilib &)>; private: multilib_list Multilibs; @@ -117,7 +122,7 @@ private: IncludeDirsFunc FilePathsCallback; public: - MultilibSet() {} + MultilibSet() = default; /// Add an optional Multilib segment MultilibSet &Maybe(const Multilib &M); @@ -135,6 +140,7 @@ public: /// Filter out some subset of the Multilibs using a user defined callback MultilibSet &FilterOut(FilterCallback F); + /// Filter out those Multilibs whose gccSuffix matches the given expression MultilibSet &FilterOut(const char *Regex); @@ -144,7 +150,7 @@ public: /// Union this set of multilibs with another void combineWith(const MultilibSet &MS); - /// Remove all of thie multilibs from the set + /// Remove all of the multilibs from the set void clear() { Multilibs.clear(); } iterator begin() { return Multilibs.begin(); } @@ -165,12 +171,14 @@ public: IncludeCallback = std::move(F); return *this; } + const IncludeDirsFunc &includeDirsCallback() const { return IncludeCallback; } MultilibSet &setFilePathsCallback(IncludeDirsFunc F) { FilePathsCallback = std::move(F); return *this; } + const IncludeDirsFunc &filePathsCallback() const { return FilePathsCallback; } private: @@ -182,8 +190,8 @@ private: }; raw_ostream &operator<<(raw_ostream &OS, const MultilibSet &MS); -} -} -#endif +} // namespace driver +} // namespace clang +#endif // LLVM_CLANG_DRIVER_MULTILIB_H diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 09efd7b0af63f..2470638bec66b 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -143,14 +143,18 @@ def m_hexagon_Features_Group : OptionGroup<"<hexagon features group>">, // These are explicitly handled. def m_hexagon_Features_HVX_Group : OptionGroup<"<hexagon features group>">, Group<m_Group>, DocName<"Hexagon">; +def m_mips_Features_Group : OptionGroup<"<mips features group>">, + Group<m_Group>, DocName<"MIPS">; def m_ppc_Features_Group : OptionGroup<"<ppc features group>">, Group<m_Group>, DocName<"PowerPC">; def m_wasm_Features_Group : OptionGroup<"<wasm features group>">, Group<m_Group>, DocName<"WebAssembly">; def m_x86_Features_Group : OptionGroup<"<x86 features group>">, Group<m_Group>, Flags<[CoreOption]>, DocName<"X86">; +def m_riscv_Features_Group : OptionGroup<"<riscv features group>">, + Group<m_Group>, DocName<"RISCV">; -def m_libc_Group : OptionGroup<"<m libc group>">, Group<m_Group>, +def m_libc_Group : OptionGroup<"<m libc group>">, Group<m_mips_Features_Group>, Flags<[HelpHidden]>; def O_Group : OptionGroup<"<O group>">, Group<CompileOnly_Group>, @@ -396,7 +400,12 @@ def O_flag : Flag<["-"], "O">, Flags<[CC1Option]>, Alias<O>, AliasArgs<["2"]>; def Ofast : Joined<["-"], "Ofast">, Group<O_Group>, Flags<[CC1Option]>; def P : Flag<["-"], "P">, Flags<[CC1Option]>, Group<Preprocessor_Group>, HelpText<"Disable linemarker output in -E mode">; -def Qn : Flag<["-"], "Qn">, IgnoredGCCCompat; +def Qy : Flag<["-"], "Qy">, Flags<[CC1Option]>, + HelpText<"Emit metadata containing compiler name and version">; +def Qn : Flag<["-"], "Qn">, Flags<[CC1Option]>, + HelpText<"Do not emit metadata containing compiler name and version">; +def : Flag<["-"], "fident">, Group<f_Group>, Alias<Qy>, Flags<[CC1Option]>; +def : Flag<["-"], "fno-ident">, Group<f_Group>, Alias<Qn>, Flags<[CC1Option]>; def Qunused_arguments : Flag<["-"], "Qunused-arguments">, Flags<[DriverOption, CoreOption]>, HelpText<"Don't emit warning for unused driver arguments">; def Q : Flag<["-"], "Q">, IgnoredGCCCompat; @@ -418,9 +427,9 @@ def S : Flag<["-"], "S">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>, def Tbss : JoinedOrSeparate<["-"], "Tbss">, Group<T_Group>, MetaVarName<"<addr>">, HelpText<"Set starting address of BSS to <addr>">; def Tdata : JoinedOrSeparate<["-"], "Tdata">, Group<T_Group>, - MetaVarName<"<addr>">, HelpText<"Set starting address of BSS to <addr>">; + MetaVarName<"<addr>">, HelpText<"Set starting address of DATA to <addr>">; def Ttext : JoinedOrSeparate<["-"], "Ttext">, Group<T_Group>, - MetaVarName<"<addr>">, HelpText<"Set starting address of BSS to <addr>">; + MetaVarName<"<addr>">, HelpText<"Set starting address of TEXT to <addr>">; def T : JoinedOrSeparate<["-"], "T">, Group<T_Group>, MetaVarName<"<script>">, HelpText<"Specify <script> as linker script">; def U : JoinedOrSeparate<["-"], "U">, Group<Preprocessor_Group>, @@ -466,7 +475,8 @@ def Xcuda_ptxas : Separate<["-"], "Xcuda-ptxas">, def Xopenmp_target : Separate<["-"], "Xopenmp-target">, HelpText<"Pass <arg> to the target offloading toolchain.">, MetaVarName<"<arg>">; def Xopenmp_target_EQ : JoinedAndSeparate<["-"], "Xopenmp-target=">, - HelpText<"Pass <arg> to the specified target offloading toolchain. The triple that identifies the toolchain must be provided after the equals sign.">, MetaVarName<"<arg>">; + HelpText<"Pass <arg> to the target offloading toolchain identified by <triple>.">, + MetaVarName<"<triple> <arg>">; def z : Separate<["-"], "z">, Flags<[LinkerInput, RenderAsInput]>, HelpText<"Pass -z <arg> to the linker">, MetaVarName<"<arg>">, Group<Link_Group>; @@ -492,6 +502,8 @@ def bind__at__load : Flag<["-"], "bind_at_load">; def bundle__loader : Separate<["-"], "bundle_loader">; def bundle : Flag<["-"], "bundle">; def b : JoinedOrSeparate<["-"], "b">, Flags<[Unsupported]>; +def cfguard : Flag<["-"], "cfguard">, Flags<[CC1Option]>, + HelpText<"Emit tables required for Windows Control Flow Guard.">; def cl_opt_disable : Flag<["-"], "cl-opt-disable">, Group<opencl_Group>, Flags<[CC1Option]>, HelpText<"OpenCL only. This option disables all optimizations. By default optimizations are enabled.">; def cl_strict_aliasing : Flag<["-"], "cl-strict-aliasing">, Group<opencl_Group>, Flags<[CC1Option]>, @@ -511,14 +523,22 @@ def cl_mad_enable : Flag<["-"], "cl-mad-enable">, Group<opencl_Group>, Flags<[CC def cl_no_signed_zeros : Flag<["-"], "cl-no-signed-zeros">, Group<opencl_Group>, Flags<[CC1Option]>, HelpText<"OpenCL only. Allow use of less precise no signed zeros computations in the generated binary.">; def cl_std_EQ : Joined<["-"], "cl-std=">, Group<opencl_Group>, Flags<[CC1Option]>, - HelpText<"OpenCL language standard to compile for.">, Values<"cl,CL,cl1.1,CL1.1,cl1.2,CL1.2,cl2.0,CL2.0">; + HelpText<"OpenCL language standard to compile for.">, Values<"cl,CL,cl1.1,CL1.1,cl1.2,CL1.2,cl2.0,CL2.0,c++">; def cl_denorms_are_zero : Flag<["-"], "cl-denorms-are-zero">, Group<opencl_Group>, Flags<[CC1Option]>, HelpText<"OpenCL only. Allow denormals to be flushed to zero.">; def cl_fp32_correctly_rounded_divide_sqrt : Flag<["-"], "cl-fp32-correctly-rounded-divide-sqrt">, Group<opencl_Group>, Flags<[CC1Option]>, HelpText<"OpenCL only. Specify that single precision floating-point divide and sqrt used in the program source are correctly rounded.">; +def cl_uniform_work_group_size : Flag<["-"], "cl-uniform-work-group-size">, Group<opencl_Group>, Flags<[CC1Option]>, + HelpText<"OpenCL only. Defines that the global work-size be a multiple of the work-group size specified to clEnqueueNDRangeKernel">; def client__name : JoinedOrSeparate<["-"], "client_name">; def combine : Flag<["-", "--"], "combine">, Flags<[DriverOption, Unsupported]>; def compatibility__version : JoinedOrSeparate<["-"], "compatibility_version">; +def config : Separate<["--"], "config">, Flags<[DriverOption]>, + HelpText<"Specifies configuration file">; +def config_system_dir_EQ : Joined<["--"], "config-system-dir=">, Flags<[DriverOption, HelpHidden]>, + HelpText<"System directory for configuration files">; +def config_user_dir_EQ : Joined<["--"], "config-user-dir=">, Flags<[DriverOption, HelpHidden]>, + HelpText<"User directory for configuration files">; def coverage : Flag<["-", "--"], "coverage">, Flags<[CoreOption]>; def cpp_precomp : Flag<["-"], "cpp-precomp">, Group<clang_ignored_f_Group>; def current__version : JoinedOrSeparate<["-"], "current_version">; @@ -535,8 +555,14 @@ def cuda_host_only : Flag<["--"], "cuda-host-only">, def cuda_compile_host_device : Flag<["--"], "cuda-compile-host-device">, HelpText<"Compile CUDA code for both host and device (default). Has no " "effect on non-CUDA compilations.">; +def cuda_include_ptx_EQ : Joined<["--"], "cuda-include-ptx=">, Flags<[DriverOption]>, + HelpText<"Include PTX for the follwing GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.">; +def no_cuda_include_ptx_EQ : Joined<["--"], "no-cuda-include-ptx=">, Flags<[DriverOption]>, + HelpText<"Do not include PTX for the follwing GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.">; def cuda_gpu_arch_EQ : Joined<["--"], "cuda-gpu-arch=">, Flags<[DriverOption]>, HelpText<"CUDA GPU architecture (e.g. sm_35). May be specified more than once.">; +def hip_link : Flag<["--"], "hip-link">, + HelpText<"Link clang-offload-bundler bundles for HIP">; def no_cuda_gpu_arch_EQ : Joined<["--"], "no-cuda-gpu-arch=">, Flags<[DriverOption]>, HelpText<"Remove GPU architecture (e.g. sm_35) from the list of GPUs to compile for. " "'all' resets the list to its default value.">; @@ -548,6 +574,8 @@ def no_cuda_version_check : Flag<["--"], "no-cuda-version-check">, def no_cuda_noopt_device_debug : Flag<["--"], "no-cuda-noopt-device-debug">; def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>, HelpText<"CUDA installation path">; +def cuda_path_ignore_env : Flag<["--"], "cuda-path-ignore-env">, Group<i_Group>, + HelpText<"Ignore environment variables to detect CUDA installation">; def ptxas_path_EQ : Joined<["--"], "ptxas-path=">, Group<i_Group>, HelpText<"Path to ptxas (used for compiling CUDA code)">; def fcuda_flush_denormals_to_zero : Flag<["-"], "fcuda-flush-denormals-to-zero">, @@ -556,6 +584,18 @@ def fno_cuda_flush_denormals_to_zero : Flag<["-"], "fno-cuda-flush-denormals-to- def fcuda_approx_transcendentals : Flag<["-"], "fcuda-approx-transcendentals">, Flags<[CC1Option]>, HelpText<"Use approximate transcendental functions">; def fno_cuda_approx_transcendentals : Flag<["-"], "fno-cuda-approx-transcendentals">; +def fcuda_rdc : Flag<["-"], "fcuda-rdc">, Flags<[CC1Option]>, + HelpText<"Generate relocatable device code, also known as separate compilation mode.">; +def fno_cuda_rdc : Flag<["-"], "fno-cuda-rdc">; +def fcuda_short_ptr : Flag<["-"], "fcuda-short-ptr">, Flags<[CC1Option]>, + HelpText<"Use 32-bit pointers for accessing const/local/shared address spaces.">; +def fno_cuda_short_ptr : Flag<["-"], "fno-cuda-short-ptr">; +def hip_device_lib_path_EQ : Joined<["--"], "hip-device-lib-path=">, Group<Link_Group>, + HelpText<"HIP device library path">; +def hip_device_lib_EQ : Joined<["--"], "hip-device-lib=">, Group<Link_Group>, + HelpText<"HIP device library">; +def fhip_dump_offload_linker_script : Flag<["-"], "fhip-dump-offload-linker-script">, + Group<f_Group>, Flags<[NoArgumentUnused, HelpHidden]>; def dA : Flag<["-"], "dA">, Group<d_Group>; def dD : Flag<["-"], "dD">, Group<d_Group>, Flags<[CC1Option]>, HelpText<"Print macro definitions in -E mode in addition to normal output">; @@ -591,6 +631,9 @@ def fno_PIC : Flag<["-"], "fno-PIC">, Group<f_Group>; def fPIE : Flag<["-"], "fPIE">, Group<f_Group>; def fno_PIE : Flag<["-"], "fno-PIE">, Group<f_Group>; def faccess_control : Flag<["-"], "faccess-control">, Group<f_Group>; +def falign_functions : Flag<["-"], "falign-functions">, Group<f_Group>; +def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<f_Group>; +def fno_align_functions: Flag<["-"], "fno-align-functions">, Group<f_Group>; def fallow_unsupported : Flag<["-"], "fallow-unsupported">, Group<f_Group>; def fapple_kext : Flag<["-"], "fapple-kext">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use Apple's kernel extensions ABI">; @@ -687,10 +730,10 @@ def fprofile_instr_use_EQ : Joined<["-"], "fprofile-instr-use=">, Group<f_Group>, Flags<[CoreOption]>, HelpText<"Use instrumentation data for profile-guided optimization">; def fcoverage_mapping : Flag<["-"], "fcoverage-mapping">, - Group<f_Group>, Flags<[CC1Option]>, + Group<f_Group>, Flags<[CC1Option, CoreOption]>, HelpText<"Generate coverage mapping to enable code coverage analysis">; def fno_coverage_mapping : Flag<["-"], "fno-coverage-mapping">, - Group<f_Group>, Flags<[DriverOption]>, + Group<f_Group>, Flags<[DriverOption, CoreOption]>, HelpText<"Disable code coverage analysis">; def fprofile_generate : Flag<["-"], "fprofile-generate">, Group<f_Group>, Flags<[DriverOption]>, @@ -715,12 +758,16 @@ def fno_profile_instr_use : Flag<["-"], "fno-profile-instr-use">, def fno_profile_use : Flag<["-"], "fno-profile-use">, Alias<fno_profile_instr_use>; -def fblocks : Flag<["-"], "fblocks">, Group<f_Group>, Flags<[CC1Option]>, +def faddrsig : Flag<["-"], "faddrsig">, Group<f_Group>, Flags<[CoreOption, CC1Option]>, + HelpText<"Emit an address-significance table">; +def fno_addrsig : Flag<["-"], "fno-addrsig">, Group<f_Group>, Flags<[CoreOption]>, + HelpText<"Don't emit an address-significance table">; +def fblocks : Flag<["-"], "fblocks">, Group<f_Group>, Flags<[CoreOption, CC1Option]>, HelpText<"Enable the 'blocks' language feature">; def fbootclasspath_EQ : Joined<["-"], "fbootclasspath=">, Group<f_Group>; def fborland_extensions : Flag<["-"], "fborland-extensions">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Accept non-standard constructs supported by the Borland compiler">; -def fbuiltin : Flag<["-"], "fbuiltin">, Group<f_Group>; +def fbuiltin : Flag<["-"], "fbuiltin">, Group<f_Group>, Flags<[CoreOption]>; def fbuiltin_module_map : Flag <["-"], "fbuiltin-module-map">, Group<f_Group>, Flags<[DriverOption]>, HelpText<"Load the clang builtins module map file.">; def fcaret_diagnostics : Flag<["-"], "fcaret-diagnostics">, Group<f_Group>; @@ -741,6 +788,12 @@ def fcomment_block_commands : CommaJoined<["-"], "fcomment-block-commands=">, Gr def fparse_all_comments : Flag<["-"], "fparse-all-comments">, Group<f_clang_Group>, Flags<[CC1Option]>; def fcommon : Flag<["-"], "fcommon">, Group<f_Group>; def fcompile_resource_EQ : Joined<["-"], "fcompile-resource=">, Group<f_Group>; +def fcomplete_member_pointers : Flag<["-"], "fcomplete-member-pointers">, Group<f_clang_Group>, + Flags<[CoreOption, CC1Option]>, + HelpText<"Require member pointer base types to be complete if they would be significant under the Microsoft ABI">; +def fno_complete_member_pointers : Flag<["-"], "fno-complete-member-pointers">, Group<f_clang_Group>, + Flags<[CoreOption]>, + HelpText<"Do not require member pointer base types to be complete if they would be significant under the Microsoft ABI">; def fconstant_cfstrings : Flag<["-"], "fconstant-cfstrings">, Group<f_Group>; def fconstant_string_class_EQ : Joined<["-"], "fconstant-string-class=">, Group<f_Group>; def fconstexpr_depth_EQ : Joined<["-"], "fconstexpr-depth=">, Group<f_Group>; @@ -749,6 +802,7 @@ def fconstexpr_backtrace_limit_EQ : Joined<["-"], "fconstexpr-backtrace-limit="> Group<f_Group>; def fno_crash_diagnostics : Flag<["-"], "fno-crash-diagnostics">, Group<f_clang_Group>, Flags<[NoArgumentUnused]>, HelpText<"Disable auto-generation of preprocessed source files and a script for reproduction during a clang crash">; +def fcrash_diagnostics_dir : Joined<["-"], "fcrash-diagnostics-dir=">, Group<f_clang_Group>, Flags<[NoArgumentUnused]>; def fcreate_profile : Flag<["-"], "fcreate-profile">, Group<f_Group>; def fcxx_exceptions: Flag<["-"], "fcxx-exceptions">, Group<f_Group>, HelpText<"Enable C++ exceptions">, Flags<[CC1Option]>; @@ -780,6 +834,10 @@ def fdiagnostics_show_template_tree : Flag<["-"], "fdiagnostics-show-template-tr HelpText<"Print a template comparison tree for differing templates">; def fdeclspec : Flag<["-"], "fdeclspec">, Group<f_clang_Group>, HelpText<"Allow __declspec as a keyword">, Flags<[CC1Option]>; +def fdiscard_value_names : Flag<["-"], "fdiscard-value-names">, Group<f_clang_Group>, + HelpText<"Discard value names in LLVM IR">, Flags<[DriverOption]>; +def fno_discard_value_names : Flag<["-"], "fno-discard-value-names">, Group<f_clang_Group>, + HelpText<"Do not discard value names in LLVM IR">, Flags<[DriverOption]>; def fdollars_in_identifiers : Flag<["-"], "fdollars-in-identifiers">, Group<f_Group>, HelpText<"Allow '$' in identifiers">, Flags<[CC1Option]>; def fdwarf2_cfi_asm : Flag<["-"], "fdwarf2-cfi-asm">, Group<clang_ignored_f_Group>; @@ -795,7 +853,7 @@ def femit_all_decls : Flag<["-"], "femit-all-decls">, Group<f_Group>, Flags<[CC1 HelpText<"Emit all declarations, even if unused">; def femulated_tls : Flag<["-"], "femulated-tls">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use emutls functions to access thread_local variables">; -def fno_emulated_tls : Flag<["-"], "fno-emulated-tls">, Group<f_Group>; +def fno_emulated_tls : Flag<["-"], "fno-emulated-tls">, Group<f_Group>, Flags<[CC1Option]>; def fencoding_EQ : Joined<["-"], "fencoding=">, Group<f_Group>; def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>, Flags<[CoreOption]>; def fexceptions : Flag<["-"], "fexceptions">, Group<f_Group>, Flags<[CC1Option]>, @@ -829,6 +887,17 @@ def fno_signaling_math : Flag<["-"], "fno-signaling-math">, Group<f_Group>; def fjump_tables : Flag<["-"], "fjump-tables">, Group<f_Group>; def fno_jump_tables : Flag<["-"], "fno-jump-tables">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Do not use jump tables for lowering switches">; +def fforce_enable_int128 : Flag<["-"], "fforce-enable-int128">, + Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Enable support for int128_t type">; +def fno_force_enable_int128 : Flag<["-"], "fno-force-enable-int128">, + Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Disable support for int128_t type">; + +def ffixed_point : Flag<["-"], "ffixed-point">, Group<f_Group>, + Flags<[CC1Option]>, HelpText<"Enable fixed point types">; +def fno_fixed_point : Flag<["-"], "fno-fixed-point">, Group<f_Group>, + HelpText<"Disable fixed point types">; // Begin sanitizer flags. These should all be core options exposed in all driver // modes. @@ -881,6 +950,14 @@ def fno_sanitize_address_use_after_scope : Flag<["-"], "fno-sanitize-address-use Group<f_clang_Group>, Flags<[CoreOption, DriverOption]>, HelpText<"Disable use-after-scope detection in AddressSanitizer">; +def fsanitize_address_poison_class_member_array_new_cookie + : Flag<[ "-" ], "fsanitize-address-poison-class-member-array-new-cookie">, + Group<f_clang_Group>, + HelpText<"Enable poisoning array cookies when using class member operator new[] in AddressSanitizer">; +def fno_sanitize_address_poison_class_member_array_new_cookie + : Flag<[ "-" ], "fno-sanitize-address-poison-class-member-array-new-cookie">, + Group<f_clang_Group>, + HelpText<"Disable poisoning array cookies when using class member operator new[] in AddressSanitizer">; def fsanitize_address_globals_dead_stripping : Flag<["-"], "fsanitize-address-globals-dead-stripping">, Group<f_clang_Group>, HelpText<"Enable linker dead stripping of globals in AddressSanitizer">; @@ -985,6 +1062,13 @@ def ffp_contract : Joined<["-"], "ffp-contract=">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Form fused FP ops (e.g. FMAs): fast (everywhere)" " | on (according to FP_CONTRACT pragma, default) | off (never fuse)">, Values<"fast,on,off">; +def fstrict_float_cast_overflow : Flag<["-"], + "fstrict-float-cast-overflow">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Assume that overflowing float-to-int casts are undefined (default)">; +def fno_strict_float_cast_overflow : Flag<["-"], + "fno-strict-float-cast-overflow">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Relax language rules and try to match the behavior of the target's native float-to-int conversion instructions">; + def ffor_scope : Flag<["-"], "ffor-scope">, Group<f_Group>; def fno_for_scope : Flag<["-"], "fno-for-scope">, Group<f_Group>; @@ -996,6 +1080,13 @@ def frewrite_imports : Flag<["-"], "frewrite-imports">, Group<f_Group>, Flags<[CC1Option]>; def fno_rewrite_imports : Flag<["-"], "fno-rewrite-imports">, Group<f_Group>; +def fdelete_null_pointer_checks : Flag<["-"], + "fdelete-null-pointer-checks">, Group<f_Group>, + HelpText<"Treat usage of null pointers as undefined behavior.">; +def fno_delete_null_pointer_checks : Flag<["-"], + "fno-delete-null-pointer-checks">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Do not treat usage of null pointers as undefined behavior.">; + def frewrite_map_file : Separate<["-"], "frewrite-map-file">, Group<f_Group>, Flags<[ DriverOption, CC1Option ]>; @@ -1025,6 +1116,8 @@ def finline_functions : Flag<["-"], "finline-functions">, Group<f_clang_Group>, def finline_hint_functions: Flag<["-"], "finline-hint-functions">, Group<f_clang_Group>, Flags<[CC1Option]>, HelpText<"Inline functions which are (explicitly or implicitly) marked inline">; def finline : Flag<["-"], "finline">, Group<clang_ignored_f_Group>; +def fexperimental_isel : Flag<["-"], "fexperimental-isel">, Group<f_clang_Group>, + HelpText<"Enables the experimental global instruction selector">; def fexperimental_new_pass_manager : Flag<["-"], "fexperimental-new-pass-manager">, Group<f_clang_Group>, Flags<[CC1Option]>, HelpText<"Enables an experimental new pass manager in LLVM.">; @@ -1036,6 +1129,11 @@ def finstrument_functions_after_inlining : Flag<["-"], "finstrument-functions-af HelpText<"Like -finstrument-functions, but insert the calls after inlining">; def finstrument_function_entry_bare : Flag<["-"], "finstrument-function-entry-bare">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Instrument function entry only, after inlining, without arguments to the instrumentation call">; +def fcf_protection_EQ : Joined<["-"], "fcf-protection=">, Flags<[CoreOption, CC1Option]>, Group<f_Group>, + HelpText<"Instrument control-flow architecture protection. Options: return, branch, full, none.">, Values<"return,branch,full,none">; +def fcf_protection : Flag<["-"], "fcf-protection">, Group<f_Group>, Flags<[CoreOption, CC1Option]>, + Alias<fcf_protection_EQ>, AliasArgs<["full"]>, + HelpText<"Enable cf-protection in 'full' mode">; def fxray_instrument : Flag<["-"], "fxray-instrument">, Group<f_Group>, Flags<[CC1Option]>, @@ -1054,11 +1152,19 @@ def fxray_instruction_threshold_ : def fxray_always_instrument : JoinedOrSeparate<["-"], "fxray-always-instrument=">, Group<f_Group>, Flags<[CC1Option]>, - HelpText<"Filename defining the whitelist for imbuing the 'always instrument' XRay attribute.">; + HelpText<"DEPRECATED: Filename defining the whitelist for imbuing the 'always instrument' XRay attribute.">; def fxray_never_instrument : JoinedOrSeparate<["-"], "fxray-never-instrument=">, Group<f_Group>, Flags<[CC1Option]>, - HelpText<"Filename defining the whitelist for imbuing the 'never instrument' XRay attribute.">; + HelpText<"DEPRECATED: Filename defining the whitelist for imbuing the 'never instrument' XRay attribute.">; +def fxray_attr_list : + JoinedOrSeparate<["-"], "fxray-attr-list=">, + Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Filename defining the list of functions/types for imbuing XRay attributes.">; +def fxray_modes : + JoinedOrSeparate<["-"], "fxray-modes=">, + Group<f_Group>, Flags<[CC1Option]>, + HelpText<"List of modes to link in by default into XRay instrumented binaries.">; def fxray_always_emit_customevents : Flag<["-"], "fxray-always-emit-customevents">, Group<f_Group>, Flags<[CC1Option]>, @@ -1066,9 +1172,26 @@ def fxray_always_emit_customevents : Flag<["-"], "fxray-always-emit-customevents def fnoxray_always_emit_customevents : Flag<["-"], "fno-xray-always-emit-customevents">, Group<f_Group>, Flags<[CC1Option]>; +def fxray_always_emit_typedevents : Flag<["-"], "fxray-always-emit-typedevents">, Group<f_Group>, + Flags<[CC1Option]>, + HelpText<"Determine whether to always emit __xray_typedevent(...) calls even if the function it appears in is not always instrumented.">; +def fnoxray_always_emit_typedevents : Flag<["-"], "fno-xray-always-emit-typedevents">, Group<f_Group>, + Flags<[CC1Option]>; + +def fxray_link_deps : Flag<["-"], "fxray-link-deps">, Group<f_Group>, + Flags<[CC1Option]>, + HelpText<"Tells clang to add the link dependencies for XRay.">; +def fnoxray_link_deps : Flag<["-"], "fnoxray-link-deps">, Group<f_Group>, + Flags<[CC1Option]>; + +def fxray_instrumentation_bundle : + JoinedOrSeparate<["-"], "fxray-instrumentation-bundle=">, + Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Select which XRay instrumentation points to emit. Options: all, none, function, custom. Default is 'all'.">; + def ffine_grained_bitfield_accesses : Flag<["-"], "ffine-grained-bitfield-accesses">, Group<f_clang_Group>, Flags<[CC1Option]>, - HelpText<"Use separate accesses for bitfields with legal widths and alignments.">; + HelpText<"Use separate accesses for consecutive bitfield runs with legal widths and alignments.">; def fno_fine_grained_bitfield_accesses : Flag<["-"], "fno-fine-grained-bitfield-accesses">, Group<f_clang_Group>, Flags<[CC1Option]>, HelpText<"Use large-integer access for consecutive bitfield runs.">; @@ -1092,7 +1215,8 @@ def fthinlto_index_EQ : Joined<["-"], "fthinlto-index=">, HelpText<"Perform ThinLTO importing using provided function summary index">; def fmacro_backtrace_limit_EQ : Joined<["-"], "fmacro-backtrace-limit=">, Group<f_Group>, Flags<[DriverOption, CoreOption]>; -def fmerge_all_constants : Flag<["-"], "fmerge-all-constants">, Group<f_Group>; +def fmerge_all_constants : Flag<["-"], "fmerge-all-constants">, Group<f_Group>, + Flags<[CC1Option, CoreOption]>, HelpText<"Allow merging of constants">; def fmessage_length_EQ : Joined<["-"], "fmessage-length=">, Group<f_Group>; def fms_extensions : Flag<["-"], "fms-extensions">, Group<f_Group>, Flags<[CC1Option, CoreOption]>, HelpText<"Accept some non-standard constructs supported by the Microsoft compiler">; @@ -1146,6 +1270,8 @@ def fmodules_disable_diagnostic_validation : Flag<["-"], "fmodules-disable-diagn def fmodules_validate_system_headers : Flag<["-"], "fmodules-validate-system-headers">, Group<i_Group>, Flags<[CC1Option]>, HelpText<"Validate the system headers that a module depends on when loading the module">; +def fno_modules_validate_system_headers : Flag<["-"], "fno-modules-validate-system-headers">, + Group<i_Group>, Flags<[DriverOption]>; def fmodules : Flag <["-"], "fmodules">, Group<f_Group>, Flags<[DriverOption, CC1Option]>, HelpText<"Enable the 'modules' language feature">; @@ -1194,11 +1320,11 @@ def fno_asynchronous_unwind_tables : Flag<["-"], "fno-asynchronous-unwind-tables def fno_assume_sane_operator_new : Flag<["-"], "fno-assume-sane-operator-new">, Group<f_Group>, HelpText<"Don't assume that C++'s global operator new can't alias any pointer">, Flags<[CC1Option]>; -def fno_blocks : Flag<["-"], "fno-blocks">, Group<f_Group>; +def fno_blocks : Flag<["-"], "fno-blocks">, Group<f_Group>, Flags<[CoreOption]>; def fno_borland_extensions : Flag<["-"], "fno-borland-extensions">, Group<f_Group>; -def fno_builtin : Flag<["-"], "fno-builtin">, Group<f_Group>, Flags<[CC1Option]>, +def fno_builtin : Flag<["-"], "fno-builtin">, Group<f_Group>, Flags<[CC1Option, CoreOption]>, HelpText<"Disable implicit builtin knowledge of functions">; -def fno_builtin_ : Joined<["-"], "fno-builtin-">, Group<f_Group>, Flags<[CC1Option]>, +def fno_builtin_ : Joined<["-"], "fno-builtin-">, Group<f_Group>, Flags<[CC1Option, CoreOption]>, HelpText<"Disable implicit builtin knowledge of a specific function">; def fno_caret_diagnostics : Flag<["-"], "fno-caret-diagnostics">, Group<f_Group>, Flags<[CC1Option]>; @@ -1220,6 +1346,10 @@ def fno_diagnostics_show_hotness : Flag<["-"], "fno-diagnostics-show-hotness">, def fno_diagnostics_show_option : Flag<["-"], "fno-diagnostics-show-option">, Group<f_Group>; def fno_diagnostics_show_note_include_stack : Flag<["-"], "fno-diagnostics-show-note-include-stack">, Flags<[CC1Option]>, Group<f_Group>; +def fdigraphs : Flag<["-"], "fdigraphs">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Enable alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:' (default)">; +def fno_digraphs : Flag<["-"], "fno-digraphs">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Disallow alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:'">; def fno_declspec : Flag<["-"], "fno-declspec">, Group<f_clang_Group>, HelpText<"Disallow __declspec as a keyword">, Flags<[CC1Option]>; def fno_dollars_in_identifiers : Flag<["-"], "fno-dollars-in-identifiers">, Group<f_Group>, @@ -1231,6 +1361,8 @@ def fno_exceptions : Flag<["-"], "fno-exceptions">, Group<f_Group>; def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, Flags<[CC1Option]>; def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>; def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Option]>; +def fno_experimental_isel : Flag<["-"], "fno-experimental-isel">, Group<f_clang_Group>, + HelpText<"Disables the experimental global instruction selector">; def fno_experimental_new_pass_manager : Flag<["-"], "fno-experimental-new-pass-manager">, Group<f_clang_Group>, Flags<[CC1Option]>, HelpText<"Disables an experimental new pass manager in LLVM.">; @@ -1239,7 +1371,7 @@ def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, Flags<[CC1Option]>, def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>, HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>; def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>, - Flags<[CC1Option]>, HelpText<"Disallow merging of constants">; + HelpText<"Disallow merging of constants">; def fno_modules : Flag <["-"], "fno-modules">, Group<f_Group>, Flags<[DriverOption]>; def fno_implicit_module_maps : Flag <["-"], "fno-implicit-module-maps">, Group<f_Group>, @@ -1272,6 +1404,8 @@ def fno_operator_names : Flag<["-"], "fno-operator-names">, Group<f_Group>, def fno_pascal_strings : Flag<["-"], "fno-pascal-strings">, Group<f_Group>; def fno_rtti : Flag<["-"], "fno-rtti">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Disable generation of rtti information">; +def fno_rtti_data : Flag<["-"], "fno-rtti-data">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Control emission of RTTI data">; def fno_short_enums : Flag<["-"], "fno-short-enums">, Group<f_Group>; def fno_show_column : Flag<["-"], "fno-show-column">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Do not include column number on diagnostics">; @@ -1295,6 +1429,8 @@ def fno_threadsafe_statics : Flag<["-"], "fno-threadsafe-statics">, Group<f_Grou Flags<[CC1Option]>, HelpText<"Do not emit code to make initialization of local statics thread safe">; def fno_use_cxa_atexit : Flag<["-"], "fno-use-cxa-atexit">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Don't use __cxa_atexit for calling destructors">; +def fno_register_global_dtors_with_atexit : Flag<["-"], "fno-register-global-dtors-with-atexit">, Group<f_Group>, + HelpText<"Don't use atexit or __cxa_atexit to register global destructors">; def fno_use_init_array : Flag<["-"], "fno-use-init-array">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Don't use .init_array instead of .ctors">; def fno_unit_at_a_time : Flag<["-"], "fno-unit-at-a-time">, Group<f_Group>; @@ -1361,22 +1497,34 @@ def fno_objc_nonfragile_abi : Flag<["-"], "fno-objc-nonfragile-abi">, Group<f_Gr def fobjc_sender_dependent_dispatch : Flag<["-"], "fobjc-sender-dependent-dispatch">, Group<f_Group>; def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group<f_Group>; -def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>; +def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, + HelpText<"Parse OpenMP pragmas and generate parallel code.">; def fno_openmp : Flag<["-"], "fno-openmp">, Group<f_Group>, Flags<[NoArgumentUnused]>; def fopenmp_version_EQ : Joined<["-"], "fopenmp-version=">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>; def fopenmp_EQ : Joined<["-"], "fopenmp=">, Group<f_Group>; -def fopenmp_use_tls : Flag<["-"], "fopenmp-use-tls">, Group<f_Group>, Flags<[NoArgumentUnused]>; -def fnoopenmp_use_tls : Flag<["-"], "fnoopenmp-use-tls">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>; +def fopenmp_use_tls : Flag<["-"], "fopenmp-use-tls">, Group<f_Group>, + Flags<[NoArgumentUnused, HelpHidden]>; +def fnoopenmp_use_tls : Flag<["-"], "fnoopenmp-use-tls">, Group<f_Group>, + Flags<[CC1Option, NoArgumentUnused, HelpHidden]>; def fopenmp_targets_EQ : CommaJoined<["-"], "fopenmp-targets=">, Flags<[DriverOption, CC1Option]>, HelpText<"Specify comma-separated list of triples OpenMP offloading targets to be supported">; -def fopenmp_dump_offload_linker_script : Flag<["-"], "fopenmp-dump-offload-linker-script">, Group<f_Group>, - Flags<[NoArgumentUnused]>; -def fopenmp_relocatable_target : Flag<["-"], "fopenmp-relocatable-target">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, - HelpText<"OpenMP target code is compiled as relocatable using the -c flag. For OpenMP targets the code is relocatable by default.">; -def fnoopenmp_relocatable_target : Flag<["-"], "fnoopenmp-relocatable-target">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, - HelpText<"Do not compile OpenMP target code as relocatable.">; +def fopenmp_dump_offload_linker_script : Flag<["-"], "fopenmp-dump-offload-linker-script">, + Group<f_Group>, Flags<[NoArgumentUnused, HelpHidden]>; +def fopenmp_relocatable_target : Flag<["-"], "fopenmp-relocatable-target">, + Group<f_Group>, Flags<[CC1Option, NoArgumentUnused, HelpHidden]>; +def fnoopenmp_relocatable_target : Flag<["-"], "fnoopenmp-relocatable-target">, + Group<f_Group>, Flags<[CC1Option, NoArgumentUnused, HelpHidden]>; +def fopenmp_simd : Flag<["-"], "fopenmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, + HelpText<"Emit OpenMP code only for SIMD-based constructs.">; +def fno_openmp_simd : Flag<["-"], "fno-openmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>; +def fopenmp_cuda_mode : Flag<["-"], "fopenmp-cuda-mode">, Group<f_Group>, + Flags<[CC1Option, NoArgumentUnused, HelpHidden]>; +def fno_openmp_cuda_mode : Flag<["-"], "fno-openmp-cuda-mode">, Group<f_Group>, + Flags<[NoArgumentUnused, HelpHidden]>; def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>; def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>; +def fno_escaping_block_tail_calls : Flag<["-"], "fno-escaping-block-tail-calls">, Group<f_Group>, Flags<[CC1Option]>; +def fescaping_block_tail_calls : Flag<["-"], "fescaping-block-tail-calls">, Group<f_Group>; def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">; def force__flat__namespace : Flag<["-"], "force_flat_namespace">; def force__load : Separate<["-"], "force_load">; @@ -1421,6 +1569,10 @@ def frtti : Flag<["-"], "frtti">, Group<f_Group>; def : Flag<["-"], "fsched-interblock">, Group<clang_ignored_f_Group>; def fshort_enums : Flag<["-"], "fshort-enums">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Allocate to an enum type only as many bytes as it needs for the declared range of possible values">; +def fchar8__t : Flag<["-"], "fchar8_t">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Enable C++ builtin type char8_t">; +def fno_char8__t : Flag<["-"], "fno-char8_t">, Group<f_Group>, + HelpText<"Disable C++ builtin type char8_t">; def fshort_wchar : Flag<["-"], "fshort-wchar">, Group<f_Group>, HelpText<"Force wchar_t to be a short unsigned int">; def fno_short_wchar : Flag<["-"], "fno-short-wchar">, Group<f_Group>, @@ -1533,6 +1685,8 @@ def funsigned_char : Flag<["-"], "funsigned-char">, Group<f_Group>; def fno_unsigned_char : Flag<["-"], "fno-unsigned-char">; def funwind_tables : Flag<["-"], "funwind-tables">, Group<f_Group>; def fuse_cxa_atexit : Flag<["-"], "fuse-cxa-atexit">, Group<f_Group>; +def fregister_global_dtors_with_atexit : Flag<["-"], "fregister-global-dtors-with-atexit">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Use atexit or __cxa_atexit to register global destructors">; def fuse_init_array : Flag<["-"], "fuse-init-array">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use .init_array instead of .ctors">; def fno_var_tracking : Flag<["-"], "fno-var-tracking">, Group<clang_ignored_f_Group>; @@ -1540,7 +1694,7 @@ def fverbose_asm : Flag<["-"], "fverbose-asm">, Group<f_Group>; def fvisibility_EQ : Joined<["-"], "fvisibility=">, Group<f_Group>, HelpText<"Set the default symbol visibility for all global declarations">, Values<"hidden,default">; def fvisibility_inlines_hidden : Flag<["-"], "fvisibility-inlines-hidden">, Group<f_Group>, - HelpText<"Give inline C++ member functions default visibility by default">, + HelpText<"Give inline C++ member functions hidden visibility by default">, Flags<[CC1Option]>; def fvisibility_ms_compat : Flag<["-"], "fvisibility-ms-compat">, Group<f_Group>, HelpText<"Give global types 'default' visibility and global functions and " @@ -1550,6 +1704,11 @@ def fwhole_program_vtables : Flag<["-"], "fwhole-program-vtables">, Group<f_Grou HelpText<"Enables whole-program vtable optimization. Requires -flto">; def fno_whole_program_vtables : Flag<["-"], "fno-whole-program-vtables">, Group<f_Group>, Flags<[CoreOption]>; +def fforce_emit_vtables : Flag<["-"], "fforce-emit-vtables">, Group<f_Group>, + Flags<[CC1Option]>, + HelpText<"Emits more virtual tables to improve devirtualization">; +def fno_force_emit_vtables : Flag<["-"], "fno-force-emit-vtables">, Group<f_Group>, + Flags<[CoreOption]>; def fwrapv : Flag<["-"], "fwrapv">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Treat signed integer overflow as two's complement">; def fwritable_strings : Flag<["-"], "fwritable-strings">, Group<f_Group>, Flags<[CC1Option]>, @@ -1564,6 +1723,10 @@ def fdata_sections : Flag <["-"], "fdata-sections">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Place each data in its own section (ELF Only)">; def fno_data_sections : Flag <["-"], "fno-data-sections">, Group<f_Group>, Flags<[CC1Option]>; +def fstack_size_section : Flag<["-"], "fstack-size-section">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Emit section containing metadata on function stack sizes">; +def fno_stack_size_section : Flag<["-"], "fno-stack-size-section">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Don't emit section containing metadata on function stack sizes">; def funique_section_names : Flag <["-"], "funique-section-names">, Group<f_Group>, Flags<[CC1Option]>, @@ -1589,11 +1752,12 @@ def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group<f_Group>, def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>, Flags<[CC1Option]>; def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group<f_Group>, - Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">; + 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">; def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group<f_Group>, Flags<[CC1Option]>; def fdebug_prefix_map_EQ - : Joined<["-"], "fdebug-prefix-map=">, Group<f_Group>, Flags<[CC1Option]>, + : Joined<["-"], "fdebug-prefix-map=">, Group<f_Group>, + Flags<[CC1Option,CC1AsOption]>, HelpText<"remap file source paths in debug info">; def g_Flag : Flag<["-"], "g">, Group<g_Group>, HelpText<"Generate source-level debug information">; @@ -1642,6 +1806,7 @@ def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>, Flags<[Cor def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>, Flags<[CoreOption]>; def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>; +def gno_gnu_pubnames : Flag<["-"], "gno-gnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>; def gmodules : Flag <["-"], "gmodules">, Group<gN_Group>, HelpText<"Generate debug info with external references to clang modules" @@ -1650,6 +1815,11 @@ def gz : Flag<["-"], "gz">, Group<g_flags_Group>, HelpText<"DWARF debug sections compression type">; def gz_EQ : Joined<["-"], "gz=">, Group<g_flags_Group>, HelpText<"DWARF debug sections compression type">; +def gembed_source : Flag<["-"], "gembed-source">, Group<g_flags_Group>, Flags<[CC1Option]>, + HelpText<"Embed source text in DWARF debug sections">; +def gno_embed_source : Flag<["-"], "gno-embed-source">, Group<g_flags_Group>, + Flags<[DriverOption]>, + HelpText<"Restore the default behavior of not embedding source text in DWARF debug sections">; def headerpad__max__install__names : Joined<["-"], "headerpad_max_install_names">; def help : Flag<["-", "--"], "help">, Flags<[CC1Option,CC1AsOption]>, HelpText<"Display available options">; @@ -1700,7 +1870,7 @@ def iwithsysroot : JoinedOrSeparate<["-"], "iwithsysroot">, Group<clang_i_Group> Flags<[CC1Option]>; def ivfsoverlay : JoinedOrSeparate<["-"], "ivfsoverlay">, Group<clang_i_Group>, Flags<[CC1Option]>, HelpText<"Overlay the virtual filesystem described by file over the real file system">; -def i : Joined<["-"], "i">, Group<i_Group>; +def imultilib : Separate<["-"], "imultilib">, Group<gfortran_Group>; def keep__private__externs : Flag<["-"], "keep_private_externs">; def l : JoinedOrSeparate<["-"], "l">, Flags<[LinkerInput, RenderJoined]>, Group<Link_Group>; @@ -1787,6 +1957,10 @@ def mmacos_version_min_EQ : Joined<["-"], "mmacos-version-min=">, Group<m_Group>, Alias<mmacosx_version_min_EQ>; def mms_bitfields : Flag<["-"], "mms-bitfields">, Group<m_Group>, Flags<[CC1Option]>, HelpText<"Set the default structure layout to be compatible with the Microsoft compiler standard">; +def moutline : Flag<["-"], "moutline">, Group<f_clang_Group>, Flags<[CC1Option]>, + HelpText<"Enable function outlining (AArch64 only)">; +def mno_outline : Flag<["-"], "mno-outline">, Group<f_clang_Group>, Flags<[CC1Option]>, + HelpText<"Disable function outlining (AArch64 only)">; def mno_ms_bitfields : Flag<["-"], "mno-ms-bitfields">, Group<m_Group>, HelpText<"Do not set the default structure layout to be compatible with the Microsoft compiler standard">; def mstackrealign : Flag<["-"], "mstackrealign">, Group<m_Group>, Flags<[CC1Option]>, @@ -1795,6 +1969,10 @@ def mstack_alignment : Joined<["-"], "mstack-alignment=">, Group<m_Group>, Flags HelpText<"Set the stack alignment">; def mstack_probe_size : Joined<["-"], "mstack-probe-size=">, Group<m_Group>, Flags<[CC1Option]>, HelpText<"Set the stack probe size">; +def mstack_arg_probe : Flag<["-"], "mstack-arg-probe">, Group<m_Group>, + HelpText<"Enable stack probes">; +def mno_stack_arg_probe : Flag<["-"], "mno-stack-arg-probe">, Group<m_Group>, Flags<[CC1Option]>, + HelpText<"Disable stack probes which are enabled by default">; def mthread_model : Separate<["-"], "mthread-model">, Group<m_Group>, Flags<[CC1Option]>, HelpText<"The thread model to use, e.g. posix, single (posix by default)">, Values<"posix,single">; def meabi : Separate<["-"], "meabi">, Group<m_Group>, Flags<[CC1Option]>, @@ -1811,6 +1989,11 @@ def mno_rtd: Flag<["-"], "mno-rtd">, Group<m_Group>; def mno_soft_float : Flag<["-"], "mno-soft-float">, Group<m_Group>; def mno_stackrealign : Flag<["-"], "mno-stackrealign">, Group<m_Group>; +def mrelax : Flag<["-"], "mrelax">, Group<m_riscv_Features_Group>, + HelpText<"Enable linker relaxation">; +def mno_relax : Flag<["-"], "mno-relax">, Group<m_riscv_Features_Group>, + HelpText<"Disable linker relaxation">; + def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_arm_Features_Group>, HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">; def mno_unaligned_access : Flag<["-"], "mno-unaligned-access">, Group<m_arm_Features_Group>, @@ -1827,8 +2010,8 @@ def ffixed_r9 : Flag<["-"], "ffixed-r9">, Group<m_arm_Features_Group>, HelpText<"Reserve the r9 register (ARM only)">; def mno_movt : Flag<["-"], "mno-movt">, Group<m_arm_Features_Group>, HelpText<"Disallow use of movt/movw pairs (ARM only)">; -def mcrc : Flag<["-"], "mcrc">, Group<m_arm_Features_Group>, - HelpText<"Allow use of CRC instructions (ARM only)">; +def mcrc : Flag<["-"], "mcrc">, Group<m_Group>, + HelpText<"Allow use of CRC instructions (ARM/Mips only)">; def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>, HelpText<"Disallow use of CRC instructions (ARM only)">; def mno_neg_immediates: Flag<["-"], "mno-neg-immediates">, Group<m_arm_Features_Group>, @@ -1844,11 +2027,17 @@ def mno_fix_cortex_a53_835769 : Flag<["-"], "mno-fix-cortex-a53-835769">, HelpText<"Don't workaround Cortex-A53 erratum 835769 (AArch64 only)">; def ffixed_x18 : Flag<["-"], "ffixed-x18">, Group<m_aarch64_Features_Group>, HelpText<"Reserve the x18 register (AArch64 only)">; +def ffixed_x20 : Flag<["-"], "ffixed-x20">, Group<m_aarch64_Features_Group>, + HelpText<"Reserve the x20 register (AArch64 only)">; def msimd128 : Flag<["-"], "msimd128">, Group<m_wasm_Features_Group>; def mno_simd128 : Flag<["-"], "mno-simd128">, Group<m_wasm_Features_Group>; def mnontrapping_fptoint : Flag<["-"], "mnontrapping-fptoint">, Group<m_wasm_Features_Group>; def mno_nontrapping_fptoint : Flag<["-"], "mno-nontrapping-fptoint">, Group<m_wasm_Features_Group>; +def msign_ext : Flag<["-"], "msign-ext">, Group<m_wasm_Features_Group>; +def mno_sign_ext : Flag<["-"], "mno-sign-ext">, Group<m_wasm_Features_Group>; +def mexception_handing : Flag<["-"], "mexception-handling">, Group<m_wasm_Features_Group>; +def mno_exception_handing : Flag<["-"], "mno-exception-handling">, Group<m_wasm_Features_Group>; def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">, Flags<[HelpHidden]>, @@ -1866,6 +2055,7 @@ def maltivec : Flag<["-"], "maltivec">, Group<m_ppc_Features_Group>; def mno_altivec : Flag<["-"], "mno-altivec">, Group<m_ppc_Features_Group>; def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>; def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>; +def msecure_plt : Flag<["-"], "msecure-plt">, Group<m_ppc_Features_Group>; def mpower8_vector : Flag<["-"], "mpower8-vector">, Group<m_ppc_Features_Group>; def mno_power8_vector : Flag<["-"], "mno-power8-vector">, @@ -1962,124 +2152,141 @@ def mpie_copy_relocations : Flag<["-"], "mpie-copy-relocations">, Group<m_Group> def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group<m_Group>; def mfentry : Flag<["-"], "mfentry">, HelpText<"Insert calls to fentry at function entry (x86 only)">, Flags<[CC1Option]>, Group<m_Group>; -def mips16 : Flag<["-"], "mips16">, Group<m_Group>; -def mno_mips16 : Flag<["-"], "mno-mips16">, Group<m_Group>; -def mmicromips : Flag<["-"], "mmicromips">, Group<m_Group>; -def mno_micromips : Flag<["-"], "mno-micromips">, Group<m_Group>; -def mxgot : Flag<["-"], "mxgot">, Group<m_Group>; -def mno_xgot : Flag<["-"], "mno-xgot">, Group<m_Group>; -def mldc1_sdc1 : Flag<["-"], "mldc1-sdc1">, Group<m_Group>; -def mno_ldc1_sdc1 : Flag<["-"], "mno-ldc1-sdc1">, Group<m_Group>; -def mcheck_zero_division : Flag<["-"], "mcheck-zero-division">, Group<m_Group>; +def mips16 : Flag<["-"], "mips16">, Group<m_mips_Features_Group>; +def mno_mips16 : Flag<["-"], "mno-mips16">, Group<m_mips_Features_Group>; +def mmicromips : Flag<["-"], "mmicromips">, Group<m_mips_Features_Group>; +def mno_micromips : Flag<["-"], "mno-micromips">, Group<m_mips_Features_Group>; +def mxgot : Flag<["-"], "mxgot">, Group<m_mips_Features_Group>; +def mno_xgot : Flag<["-"], "mno-xgot">, Group<m_mips_Features_Group>; +def mldc1_sdc1 : Flag<["-"], "mldc1-sdc1">, Group<m_mips_Features_Group>; +def mno_ldc1_sdc1 : Flag<["-"], "mno-ldc1-sdc1">, Group<m_mips_Features_Group>; +def mcheck_zero_division : Flag<["-"], "mcheck-zero-division">, + Group<m_mips_Features_Group>; def mno_check_zero_division : Flag<["-"], "mno-check-zero-division">, - Group<m_Group>; -def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">, Group<m_Group>; + Group<m_mips_Features_Group>; +def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">, + Group<m_mips_Features_Group>; def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>, IgnoredGCCCompat; def mno_branch_likely : Flag<["-"], "mno-branch-likely">, Group<m_Group>, IgnoredGCCCompat; -def mdsp : Flag<["-"], "mdsp">, Group<m_Group>; -def mno_dsp : Flag<["-"], "mno-dsp">, Group<m_Group>; -def mdspr2 : Flag<["-"], "mdspr2">, Group<m_Group>; -def mno_dspr2 : Flag<["-"], "mno-dspr2">, Group<m_Group>; -def msingle_float : Flag<["-"], "msingle-float">, Group<m_Group>; -def mdouble_float : Flag<["-"], "mdouble-float">, Group<m_Group>; -def mmadd4 : Flag<["-"], "mmadd4">, Group<m_Group>, +def mindirect_jump_EQ : Joined<["-"], "mindirect-jump=">, + Group<m_mips_Features_Group>, + HelpText<"Change indirect jump instructions to inhibit speculation">; +def mdsp : Flag<["-"], "mdsp">, Group<m_mips_Features_Group>; +def mno_dsp : Flag<["-"], "mno-dsp">, Group<m_mips_Features_Group>; +def mdspr2 : Flag<["-"], "mdspr2">, Group<m_mips_Features_Group>; +def mno_dspr2 : Flag<["-"], "mno-dspr2">, Group<m_mips_Features_Group>; +def msingle_float : Flag<["-"], "msingle-float">, Group<m_mips_Features_Group>; +def mdouble_float : Flag<["-"], "mdouble-float">, Group<m_mips_Features_Group>; +def mmadd4 : Flag<["-"], "mmadd4">, Group<m_mips_Features_Group>, HelpText<"Enable the generation of 4-operand madd.s, madd.d and related instructions.">; -def mno_madd4 : Flag<["-"], "mno-madd4">, Group<m_Group>, +def mno_madd4 : Flag<["-"], "mno-madd4">, Group<m_mips_Features_Group>, HelpText<"Disable the generation of 4-operand madd.s, madd.d and related instructions.">; -def mmsa : Flag<["-"], "mmsa">, Group<m_Group>, +def mmsa : Flag<["-"], "mmsa">, Group<m_mips_Features_Group>, HelpText<"Enable MSA ASE (MIPS only)">; -def mno_msa : Flag<["-"], "mno-msa">, Group<m_Group>, +def mno_msa : Flag<["-"], "mno-msa">, Group<m_mips_Features_Group>, HelpText<"Disable MSA ASE (MIPS only)">; -def mmt : Flag<["-"], "mmt">, Group<m_Group>, +def mmt : Flag<["-"], "mmt">, Group<m_mips_Features_Group>, HelpText<"Enable MT ASE (MIPS only)">; -def mno_mt : Flag<["-"], "mno-mt">, Group<m_Group>, +def mno_mt : Flag<["-"], "mno-mt">, Group<m_mips_Features_Group>, HelpText<"Disable MT ASE (MIPS only)">; -def mfp64 : Flag<["-"], "mfp64">, Group<m_Group>, +def mfp64 : Flag<["-"], "mfp64">, Group<m_mips_Features_Group>, HelpText<"Use 64-bit floating point registers (MIPS only)">; -def mfp32 : Flag<["-"], "mfp32">, Group<m_Group>, +def mfp32 : Flag<["-"], "mfp32">, Group<m_mips_Features_Group>, HelpText<"Use 32-bit floating point registers (MIPS only)">; -def mgpopt : Flag<["-"], "mgpopt">, Group<m_Group>, +def mgpopt : Flag<["-"], "mgpopt">, Group<m_mips_Features_Group>, HelpText<"Use GP relative accesses for symbols known to be in a small" " data section (MIPS)">; -def mno_gpopt : Flag<["-"], "mno-gpopt">, Group<m_Group>, +def mno_gpopt : Flag<["-"], "mno-gpopt">, Group<m_mips_Features_Group>, HelpText<"Do not use GP relative accesses for symbols known to be in a small" " data section (MIPS)">; -def mlocal_sdata : Flag<["-"], "mlocal-sdata">, Group<m_Group>, +def mlocal_sdata : Flag<["-"], "mlocal-sdata">, + Group<m_mips_Features_Group>, HelpText<"Extend the -G behaviour to object local data (MIPS)">; -def mno_local_sdata : Flag<["-"], "mno-local-sdata">, Group<m_Group>, +def mno_local_sdata : Flag<["-"], "mno-local-sdata">, + Group<m_mips_Features_Group>, HelpText<"Do not extend the -G behaviour to object local data (MIPS)">; -def mextern_sdata : Flag<["-"], "mextern-sdata">, Group<m_Group>, +def mextern_sdata : Flag<["-"], "mextern-sdata">, + Group<m_mips_Features_Group>, HelpText<"Assume that externally defined data is in the small data if it" " meets the -G <size> threshold (MIPS)">; -def mno_extern_sdata : Flag<["-"], "mno-extern-sdata">, Group<m_Group>, +def mno_extern_sdata : Flag<["-"], "mno-extern-sdata">, + Group<m_mips_Features_Group>, HelpText<"Do not assume that externally defined data is in the small data if" " it meets the -G <size> threshold (MIPS)">; -def membedded_data : Flag<["-"], "membedded-data">, Group<m_Group>, +def membedded_data : Flag<["-"], "membedded-data">, + Group<m_mips_Features_Group>, HelpText<"Place constants in the .rodata section instead of the .sdata " "section even if they meet the -G <size> threshold (MIPS)">; -def mno_embedded_data : Flag<["-"], "mno-embedded-data">, Group<m_Group>, +def mno_embedded_data : Flag<["-"], "mno-embedded-data">, + Group<m_mips_Features_Group>, HelpText<"Do not place constants in the .rodata section instead of the " ".sdata if they meet the -G <size> threshold (MIPS)">; -def mnan_EQ : Joined<["-"], "mnan=">, Group<m_Group>; -def mabs_EQ : Joined<["-"], "mabs=">, Group<m_Group>; -def mabicalls : Flag<["-"], "mabicalls">, Group<m_Group>, +def mnan_EQ : Joined<["-"], "mnan=">, Group<m_mips_Features_Group>; +def mabs_EQ : Joined<["-"], "mabs=">, Group<m_mips_Features_Group>; +def mabicalls : Flag<["-"], "mabicalls">, Group<m_mips_Features_Group>, HelpText<"Enable SVR4-style position-independent code (Mips only)">; -def mno_abicalls : Flag<["-"], "mno-abicalls">, Group<m_Group>, +def mno_abicalls : Flag<["-"], "mno-abicalls">, Group<m_mips_Features_Group>, HelpText<"Disable SVR4-style position-independent code (Mips only)">; +def mno_crc : Flag<["-"], "mno-crc">, Group<m_mips_Features_Group>, + HelpText<"Disallow use of CRC instructions (Mips only)">; +def mvirt : Flag<["-"], "mvirt">, Group<m_mips_Features_Group>; +def mno_virt : Flag<["-"], "mno-virt">, Group<m_mips_Features_Group>; +def mginv : Flag<["-"], "mginv">, Group<m_mips_Features_Group>; +def mno_ginv : Flag<["-"], "mno-ginv">, Group<m_mips_Features_Group>; def mips1 : Flag<["-"], "mips1">, - Alias<march_EQ>, AliasArgs<["mips1"]>, + Alias<march_EQ>, AliasArgs<["mips1"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips1">, Flags<[HelpHidden]>; def mips2 : Flag<["-"], "mips2">, - Alias<march_EQ>, AliasArgs<["mips2"]>, + Alias<march_EQ>, AliasArgs<["mips2"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips2">, Flags<[HelpHidden]>; def mips3 : Flag<["-"], "mips3">, - Alias<march_EQ>, AliasArgs<["mips3"]>, + Alias<march_EQ>, AliasArgs<["mips3"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips3">, Flags<[HelpHidden]>; def mips4 : Flag<["-"], "mips4">, - Alias<march_EQ>, AliasArgs<["mips4"]>, + Alias<march_EQ>, AliasArgs<["mips4"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips4">, Flags<[HelpHidden]>; def mips5 : Flag<["-"], "mips5">, - Alias<march_EQ>, AliasArgs<["mips5"]>, + Alias<march_EQ>, AliasArgs<["mips5"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips5">, Flags<[HelpHidden]>; def mips32 : Flag<["-"], "mips32">, - Alias<march_EQ>, AliasArgs<["mips32"]>, + Alias<march_EQ>, AliasArgs<["mips32"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips32">, Flags<[HelpHidden]>; def mips32r2 : Flag<["-"], "mips32r2">, - Alias<march_EQ>, AliasArgs<["mips32r2"]>, + Alias<march_EQ>, AliasArgs<["mips32r2"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips32r2">, Flags<[HelpHidden]>; def mips32r3 : Flag<["-"], "mips32r3">, - Alias<march_EQ>, AliasArgs<["mips32r3"]>, + Alias<march_EQ>, AliasArgs<["mips32r3"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips32r3">, Flags<[HelpHidden]>; def mips32r5 : Flag<["-"], "mips32r5">, - Alias<march_EQ>, AliasArgs<["mips32r5"]>, + Alias<march_EQ>, AliasArgs<["mips32r5"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips32r5">, Flags<[HelpHidden]>; def mips32r6 : Flag<["-"], "mips32r6">, - Alias<march_EQ>, AliasArgs<["mips32r6"]>, + Alias<march_EQ>, AliasArgs<["mips32r6"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips32r6">, Flags<[HelpHidden]>; def mips64 : Flag<["-"], "mips64">, - Alias<march_EQ>, AliasArgs<["mips64"]>, + Alias<march_EQ>, AliasArgs<["mips64"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips64">, Flags<[HelpHidden]>; def mips64r2 : Flag<["-"], "mips64r2">, - Alias<march_EQ>, AliasArgs<["mips64r2"]>, + Alias<march_EQ>, AliasArgs<["mips64r2"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips64r2">, Flags<[HelpHidden]>; def mips64r3 : Flag<["-"], "mips64r3">, - Alias<march_EQ>, AliasArgs<["mips64r3"]>, + Alias<march_EQ>, AliasArgs<["mips64r3"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips64r3">, Flags<[HelpHidden]>; def mips64r5 : Flag<["-"], "mips64r5">, - Alias<march_EQ>, AliasArgs<["mips64r5"]>, + Alias<march_EQ>, AliasArgs<["mips64r5"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips64r5">, Flags<[HelpHidden]>; def mips64r6 : Flag<["-"], "mips64r6">, - Alias<march_EQ>, AliasArgs<["mips64r6"]>, + Alias<march_EQ>, AliasArgs<["mips64r6"]>, Group<m_mips_Features_Group>, HelpText<"Equivalent to -march=mips64r6">, Flags<[HelpHidden]>; -def mfpxx : Flag<["-"], "mfpxx">, Group<m_Group>, +def mfpxx : Flag<["-"], "mfpxx">, Group<m_mips_Features_Group>, HelpText<"Avoid FPU mode dependent operations when used with the O32 ABI">, Flags<[HelpHidden]>; -def modd_spreg : Flag<["-"], "modd-spreg">, Group<m_Group>, +def modd_spreg : Flag<["-"], "modd-spreg">, Group<m_mips_Features_Group>, HelpText<"Enable odd single-precision floating point registers">, Flags<[HelpHidden]>; -def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_Group>, +def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_mips_Features_Group>, HelpText<"Disable odd single-precision floating point registers">, Flags<[HelpHidden]>; def mglibc : Flag<["-"], "mglibc">, Group<m_libc_Group>, Flags<[HelpHidden]>; @@ -2092,7 +2299,7 @@ def multi__module : Flag<["-"], "multi_module">; def multiply__defined__unused : Separate<["-"], "multiply_defined_unused">; def multiply__defined : Separate<["-"], "multiply_defined">; def mwarn_nonportable_cfstrings : Flag<["-"], "mwarn-nonportable-cfstrings">, Group<m_Group>; -def no_canonical_prefixes : Flag<["-"], "no-canonical-prefixes">, Flags<[HelpHidden]>, +def no_canonical_prefixes : Flag<["-"], "no-canonical-prefixes">, Flags<[HelpHidden, CoreOption]>, HelpText<"Use relative instead of canonical paths">; def no_cpp_precomp : Flag<["-"], "no-cpp-precomp">, Group<clang_ignored_f_Group>; def no_integrated_cpp : Flag<["-", "--"], "no-integrated-cpp">, Flags<[DriverOption]>; @@ -2175,7 +2382,7 @@ def fno_rtlib_add_rpath: Flag<["-"], "fno-rtlib-add-rpath">, Flags<[NoArgumentUn HelpText<"Do not add -rpath with architecture-specific resource directory to the linker flags">; def r : Flag<["-"], "r">, Flags<[LinkerInput,NoArgumentUnused]>, Group<Link_Group>; -def save_temps_EQ : Joined<["-", "--"], "save-temps=">, Flags<[DriverOption]>, +def save_temps_EQ : Joined<["-", "--"], "save-temps=">, Flags<[CC1Option, DriverOption]>, HelpText<"Save intermediate compilation results.">; def save_temps : Flag<["-", "--"], "save-temps">, Flags<[DriverOption]>, Alias<save_temps_EQ>, AliasArgs<["cwd"]>, @@ -2326,7 +2533,8 @@ def _for_linker_EQ : Joined<["--"], "for-linker=">, Alias<Xlinker>; def _for_linker : Separate<["--"], "for-linker">, Alias<Xlinker>; def _force_link_EQ : Joined<["--"], "force-link=">, Alias<u>; def _force_link : Separate<["--"], "force-link">, Alias<u>; -def _help_hidden : Flag<["--"], "help-hidden">; +def _help_hidden : Flag<["--"], "help-hidden">, + HelpText<"Display help for hidden options">; def _imacros_EQ : Joined<["--"], "imacros=">, Alias<imacros>; def _include_barrier : Flag<["--"], "include-barrier">, Alias<I_>; def _include_directory_after_EQ : Joined<["--"], "include-directory-after=">, Alias<idirafter>; @@ -2396,39 +2604,50 @@ def _write_dependencies : Flag<["--"], "write-dependencies">, Alias<MD>; def _write_user_dependencies : Flag<["--"], "write-user-dependencies">, Alias<MMD>; def _ : Joined<["--"], "">, Flags<[Unsupported]>; -def mieee_rnd_near : Flag<["-"], "mieee-rnd-near">, Group<m_hexagon_Features_Group>; +// Hexagon feature flags. +def mieee_rnd_near : Flag<["-"], "mieee-rnd-near">, + Group<m_hexagon_Features_Group>; def mv4 : Flag<["-"], "mv4">, Group<m_hexagon_Features_Group>, - Alias<mcpu_EQ>, AliasArgs<["hexagonv4"]>; + Alias<mcpu_EQ>, AliasArgs<["hexagonv4"]>; def mv5 : Flag<["-"], "mv5">, Group<m_hexagon_Features_Group>, Alias<mcpu_EQ>, - AliasArgs<["hexagonv5"]>; + AliasArgs<["hexagonv5"]>; def mv55 : Flag<["-"], "mv55">, Group<m_hexagon_Features_Group>, - Alias<mcpu_EQ>, AliasArgs<["hexagonv55"]>; + Alias<mcpu_EQ>, AliasArgs<["hexagonv55"]>; def mv60 : Flag<["-"], "mv60">, Group<m_hexagon_Features_Group>, - Alias<mcpu_EQ>, AliasArgs<["hexagonv60"]>; + Alias<mcpu_EQ>, AliasArgs<["hexagonv60"]>; def mv62 : Flag<["-"], "mv62">, Group<m_hexagon_Features_Group>, - Alias<mcpu_EQ>, AliasArgs<["hexagonv62"]>; + Alias<mcpu_EQ>, AliasArgs<["hexagonv62"]>; def mv65 : Flag<["-"], "mv65">, Group<m_hexagon_Features_Group>, - Alias<mcpu_EQ>, AliasArgs<["hexagonv65"]>; -def mhexagon_hvx : Flag<[ "-" ], "mhvx">, - Group<m_hexagon_Features_HVX_Group>, - HelpText<"Enable Hexagon Vector eXtensions">; -def mhexagon_hvx_EQ : Joined<[ "-" ], "mhvx=">, - Group<m_hexagon_Features_HVX_Group>, - HelpText<"Enable Hexagon Vector eXtensions">; -def mno_hexagon_hvx : Flag<[ "-" ], "mno-hvx">, - Group<m_hexagon_Features_HVX_Group>, - HelpText<"Disable Hexagon Vector eXtensions">; -def mhexagon_hvx_length_EQ : Joined<[ "-" ], "mhvx-length=">, - Group<m_hexagon_Features_HVX_Group>, - HelpText<"Set Hexagon Vector Length">, Values<"64B,128B">; -// hvx-double deprecrated flag. -def mhexagon_hvx_double : Flag<[ "-" ], "mhvx-double">, - Group<m_hexagon_Features_HVX_Group>, - HelpText<"Enable Hexagon Double Vector eXtensions">; -def mno_hexagon_hvx_double - : Flag<[ "-" ], "mno-hvx-double">, - Group<m_hexagon_Features_HVX_Group>, - HelpText<"Disable Hexagon Double Vector eXtensions">; + Alias<mcpu_EQ>, AliasArgs<["hexagonv65"]>; +def mhexagon_hvx : Flag<["-"], "mhvx">, Group<m_hexagon_Features_HVX_Group>, + HelpText<"Enable Hexagon Vector eXtensions">; +def mhexagon_hvx_EQ : Joined<["-"], "mhvx=">, + Group<m_hexagon_Features_HVX_Group>, + HelpText<"Enable Hexagon Vector eXtensions">; +def mno_hexagon_hvx : Flag<["-"], "mno-hvx">, + Group<m_hexagon_Features_HVX_Group>, + HelpText<"Disable Hexagon Vector eXtensions">; +def mhexagon_hvx_length_EQ : Joined<["-"], "mhvx-length=">, + Group<m_hexagon_Features_HVX_Group>, HelpText<"Set Hexagon Vector Length">, + Values<"64B,128B">; +def ffixed_r19: Flag<["-"], "ffixed-r19">, + HelpText<"Reserve register r19 (Hexagon only)">; +def mmemops : Flag<["-"], "mmemops">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Enable generation of memop instructions">; +def mno_memops : Flag<["-"], "mno-memops">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Disable generation of memop instructions">; +def mpackets : Flag<["-"], "mpackets">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Enable generation of instruction packets">; +def mno_packets : Flag<["-"], "mno-packets">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Disable generation of instruction packets">; +def mnvj : Flag<["-"], "mnvj">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Enable generation of new-value jumps">; +def mno_nvj : Flag<["-"], "mno-nvj">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Disable generation of new-value jumps">; +def mnvs : Flag<["-"], "mnvs">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Enable generation of new-value stores">; +def mno_nvs : Flag<["-"], "mno-nvs">, Group<m_hexagon_Features_Group>, + Flags<[CC1Option]>, HelpText<"Disable generation of new-value stores">; // X86 feature flags @@ -2499,10 +2718,14 @@ def mbmi : Flag<["-"], "mbmi">, Group<m_x86_Features_Group>; def mno_bmi : Flag<["-"], "mno-bmi">, Group<m_x86_Features_Group>; def mbmi2 : Flag<["-"], "mbmi2">, Group<m_x86_Features_Group>; def mno_bmi2 : Flag<["-"], "mno-bmi2">, Group<m_x86_Features_Group>; +def mcldemote : Flag<["-"], "mcldemote">, Group<m_x86_Features_Group>; +def mno_cldemote : Flag<["-"], "mno-cldemote">, Group<m_x86_Features_Group>; def mclflushopt : Flag<["-"], "mclflushopt">, Group<m_x86_Features_Group>; def mno_clflushopt : Flag<["-"], "mno-clflushopt">, Group<m_x86_Features_Group>; def mclwb : Flag<["-"], "mclwb">, Group<m_x86_Features_Group>; def mno_clwb : Flag<["-"], "mno-clwb">, Group<m_x86_Features_Group>; +def mwbnoinvd : Flag<["-"], "mwbnoinvd">, Group<m_x86_Features_Group>; +def mno_wbnoinvd : Flag<["-"], "mno-wbnoinvd">, Group<m_x86_Features_Group>; def mclzero : Flag<["-"], "mclzero">, Group<m_x86_Features_Group>; def mno_clzero : Flag<["-"], "mno-clzero">, Group<m_x86_Features_Group>; def mcx16 : Flag<["-"], "mcx16">, Group<m_x86_Features_Group>; @@ -2517,6 +2740,8 @@ def mfsgsbase : Flag<["-"], "mfsgsbase">, Group<m_x86_Features_Group>; def mno_fsgsbase : Flag<["-"], "mno-fsgsbase">, Group<m_x86_Features_Group>; def mfxsr : Flag<["-"], "mfxsr">, Group<m_x86_Features_Group>; def mno_fxsr : Flag<["-"], "mno-fxsr">, Group<m_x86_Features_Group>; +def minvpcid : Flag<["-"], "minvpcid">, Group<m_x86_Features_Group>; +def mno_invpcid : Flag<["-"], "mno-invpcid">, Group<m_x86_Features_Group>; def mgfni : Flag<["-"], "mgfni">, Group<m_x86_Features_Group>; def mno_gfni : Flag<["-"], "mno-gfni">, Group<m_x86_Features_Group>; def mlwp : Flag<["-"], "mlwp">, Group<m_x86_Features_Group>; @@ -2525,6 +2750,10 @@ def mlzcnt : Flag<["-"], "mlzcnt">, Group<m_x86_Features_Group>; def mno_lzcnt : Flag<["-"], "mno-lzcnt">, Group<m_x86_Features_Group>; def mmovbe : Flag<["-"], "mmovbe">, Group<m_x86_Features_Group>; def mno_movbe : Flag<["-"], "mno-movbe">, Group<m_x86_Features_Group>; +def mmovdiri : Flag<["-"], "mmovdiri">, Group<m_x86_Features_Group>; +def mno_movdiri : Flag<["-"], "mno-movdiri">, Group<m_x86_Features_Group>; +def mmovdir64b : Flag<["-"], "mmovdir64b">, Group<m_x86_Features_Group>; +def mno_movdir64b : Flag<["-"], "mno-movdir64b">, Group<m_x86_Features_Group>; def mmpx : Flag<["-"], "mmpx">, Group<m_x86_Features_Group>; def mno_mpx : Flag<["-"], "mno-mpx">, Group<m_x86_Features_Group>; def mmwaitx : Flag<["-"], "mmwaitx">, Group<m_x86_Features_Group>; @@ -2533,18 +2762,26 @@ def mpku : Flag<["-"], "mpku">, Group<m_x86_Features_Group>; def mno_pku : Flag<["-"], "mno-pku">, Group<m_x86_Features_Group>; def mpclmul : Flag<["-"], "mpclmul">, Group<m_x86_Features_Group>; def mno_pclmul : Flag<["-"], "mno-pclmul">, Group<m_x86_Features_Group>; +def mpconfig : Flag<["-"], "mpconfig">, Group<m_x86_Features_Group>; +def mno_pconfig : Flag<["-"], "mno-pconfig">, Group<m_x86_Features_Group>; def mpopcnt : Flag<["-"], "mpopcnt">, Group<m_x86_Features_Group>; def mno_popcnt : Flag<["-"], "mno-popcnt">, Group<m_x86_Features_Group>; def mprefetchwt1 : Flag<["-"], "mprefetchwt1">, Group<m_x86_Features_Group>; def mno_prefetchwt1 : Flag<["-"], "mno-prefetchwt1">, Group<m_x86_Features_Group>; def mprfchw : Flag<["-"], "mprfchw">, Group<m_x86_Features_Group>; def mno_prfchw : Flag<["-"], "mno-prfchw">, Group<m_x86_Features_Group>; +def mptwrite : Flag<["-"], "mptwrite">, Group<m_x86_Features_Group>; +def mno_ptwrite : Flag<["-"], "mno-ptwrite">, Group<m_x86_Features_Group>; +def mrdpid : Flag<["-"], "mrdpid">, Group<m_x86_Features_Group>; +def mno_rdpid : Flag<["-"], "mno-rdpid">, Group<m_x86_Features_Group>; def mrdrnd : Flag<["-"], "mrdrnd">, Group<m_x86_Features_Group>; def mno_rdrnd : Flag<["-"], "mno-rdrnd">, Group<m_x86_Features_Group>; def mrtm : Flag<["-"], "mrtm">, Group<m_x86_Features_Group>; def mno_rtm : Flag<["-"], "mno-rtm">, Group<m_x86_Features_Group>; def mrdseed : Flag<["-"], "mrdseed">, Group<m_x86_Features_Group>; def mno_rdseed : Flag<["-"], "mno-rdseed">, Group<m_x86_Features_Group>; +def msahf : Flag<["-"], "msahf">, Group<m_x86_Features_Group>; +def mno_sahf : Flag<["-"], "mno-sahf">, Group<m_x86_Features_Group>; def msgx : Flag<["-"], "msgx">, Group<m_x86_Features_Group>; def mno_sgx : Flag<["-"], "mno-sgx">, Group<m_x86_Features_Group>; def msha : Flag<["-"], "msha">, Group<m_x86_Features_Group>; @@ -2555,6 +2792,8 @@ def mvaes : Flag<["-"], "mvaes">, Group<m_x86_Features_Group>; def mno_vaes : Flag<["-"], "mno-vaes">, Group<m_x86_Features_Group>; def mvpclmulqdq : Flag<["-"], "mvpclmulqdq">, Group<m_x86_Features_Group>; def mno_vpclmulqdq : Flag<["-"], "mno-vpclmulqdq">, Group<m_x86_Features_Group>; +def mwaitpkg : Flag<["-"], "mwaitpkg">, Group<m_x86_Features_Group>; +def mno_waitpkg : Flag<["-"], "mno-waitpkg">, Group<m_x86_Features_Group>; def mxop : Flag<["-"], "mxop">, Group<m_x86_Features_Group>; def mno_xop : Flag<["-"], "mno-xop">, Group<m_x86_Features_Group>; def mxsave : Flag<["-"], "mxsave">, Group<m_x86_Features_Group>; @@ -2567,8 +2806,10 @@ def mxsaves : Flag<["-"], "mxsaves">, Group<m_x86_Features_Group>; def mno_xsaves : Flag<["-"], "mno-xsaves">, Group<m_x86_Features_Group>; def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Features_Group>; def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>; -def mibt : Flag<["-"], "mibt">, Group<m_x86_Features_Group>; -def mno_ibt : Flag<["-"], "mno-ibt">, Group<m_x86_Features_Group>; +def mretpoline : Flag<["-"], "mretpoline">, Group<m_x86_Features_Group>; +def mno_retpoline : Flag<["-"], "mno-retpoline">, Group<m_x86_Features_Group>; +def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>; +def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>; // These are legacy user-facing driver-level option spellings. They are always // aliases for options that are spelled using the more common Unix / GNU flag @@ -2604,8 +2845,6 @@ def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<f_Group>; def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<f_Group>, Flags<[CoreOption]>; -defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_gcc_optimization_f_Group>; -def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_gcc_optimization_f_Group>; defm align_labels : BooleanFFlag<"align-labels">, Group<clang_ignored_gcc_optimization_f_Group>; def falign_labels_EQ : Joined<["-"], "falign-labels=">, Group<clang_ignored_gcc_optimization_f_Group>; defm align_loops : BooleanFFlag<"align-loops">, Group<clang_ignored_gcc_optimization_f_Group>; @@ -2623,8 +2862,6 @@ defm reorder_blocks : BooleanFFlag<"reorder-blocks">, Group<clang_ignored_gcc_op defm eliminate_unused_debug_types : BooleanFFlag<"eliminate-unused-debug-types">, Group<clang_ignored_f_Group>; defm branch_count_reg : BooleanFFlag<"branch-count-reg">, Group<clang_ignored_gcc_optimization_f_Group>; defm default_inline : BooleanFFlag<"default-inline">, Group<clang_ignored_gcc_optimization_f_Group>; -defm delete_null_pointer_checks : BooleanFFlag<"delete-null-pointer-checks">, - Group<clang_ignored_gcc_optimization_f_Group>; defm fat_lto_objects : BooleanFFlag<"fat-lto-objects">, Group<clang_ignored_gcc_optimization_f_Group>; defm float_store : BooleanFFlag<"float-store">, Group<clang_ignored_gcc_optimization_f_Group>; defm friend_injection : BooleanFFlag<"friend-injection">, Group<clang_ignored_f_Group>; @@ -2634,7 +2871,6 @@ defm gcse_after_reload: BooleanFFlag<"gcse-after-reload">, Group<clang_ignored_g defm gcse_las: BooleanFFlag<"gcse-las">, Group<clang_ignored_gcc_optimization_f_Group>; defm gcse_sm: BooleanFFlag<"gcse-sm">, Group<clang_ignored_gcc_optimization_f_Group>; defm gnu : BooleanFFlag<"gnu">, Group<clang_ignored_f_Group>; -defm ident : BooleanFFlag<"ident">, Group<clang_ignored_f_Group>; defm implicit_templates : BooleanFFlag<"implicit-templates">, Group<clang_ignored_f_Group>; defm implement_inlines : BooleanFFlag<"implement-inlines">, Group<clang_ignored_f_Group>; defm merge_constants : BooleanFFlag<"merge-constants">, Group<clang_ignored_gcc_optimization_f_Group>; diff --git a/include/clang/Driver/SanitizerArgs.h b/include/clang/Driver/SanitizerArgs.h index a31ac05afc1bb..d144e488b56bb 100644 --- a/include/clang/Driver/SanitizerArgs.h +++ b/include/clang/Driver/SanitizerArgs.h @@ -30,7 +30,7 @@ class SanitizerArgs { std::vector<std::string> ExtraDeps; int CoverageFeatures = 0; int MsanTrackOrigins = 0; - bool MsanUseAfterDtor = false; + bool MsanUseAfterDtor = true; bool CfiCrossDso = false; bool CfiICallGeneralizePointers = false; int AsanFieldPadding = 0; diff --git a/include/clang/Driver/Tool.h b/include/clang/Driver/Tool.h index 8f76e17c48bae..b02ac66d3b5cf 100644 --- a/include/clang/Driver/Tool.h +++ b/include/clang/Driver/Tool.h @@ -88,12 +88,12 @@ public: virtual bool hasIntegratedCPP() const = 0; virtual bool isLinkJob() const { return false; } virtual bool isDsymutilJob() const { return false; } - /// \brief Returns the level of support for response files of this tool, + /// Returns the level of support for response files of this tool, /// whether it accepts arguments to be passed via a file on disk. ResponseFileSupport getResponseFilesSupport() const { return ResponseSupport; } - /// \brief Returns which encoding the response file should use. This is only + /// Returns which encoding the response file should use. This is only /// relevant on Windows platforms where there are different encodings being /// accepted for different tools. On UNIX, UTF8 is universal. /// @@ -108,11 +108,11 @@ public: llvm::sys::WindowsEncodingMethod getResponseFileEncoding() const { return ResponseEncoding; } - /// \brief Returns which prefix to use when passing the name of a response + /// Returns which prefix to use when passing the name of a response /// file as a parameter to this tool. const char *getResponseFileFlag() const { return ResponseFlag; } - /// \brief Does this tool have "good" standardized diagnostics, or should the + /// Does this tool have "good" standardized diagnostics, or should the /// driver add an additional "command failed" diagnostic on failures. virtual bool hasGoodDiagnostics() const { return false; } diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h index 13f54d3718b4c..addf7aa6a9c8d 100644 --- a/include/clang/Driver/ToolChain.h +++ b/include/clang/Driver/ToolChain.h @@ -1,4 +1,4 @@ -//===--- ToolChain.h - Collections of tools for one platform ----*- C++ -*-===// +//===- ToolChain.h - Collections of tools for one platform ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -10,69 +10,84 @@ #ifndef LLVM_CLANG_DRIVER_TOOLCHAIN_H #define LLVM_CLANG_DRIVER_TOOLCHAIN_H +#include "clang/Basic/LLVM.h" #include "clang/Basic/Sanitizers.h" -#include "clang/Basic/VersionTuple.h" #include "clang/Driver/Action.h" #include "clang/Driver/Multilib.h" #include "clang/Driver/Types.h" -#include "clang/Driver/Util.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" #include "llvm/ADT/Triple.h" +#include "llvm/MC/MCTargetOptions.h" +#include "llvm/Option/Option.h" +#include "llvm/Support/VersionTuple.h" #include "llvm/Target/TargetOptions.h" +#include <cassert> #include <memory> #include <string> +#include <utility> namespace llvm { namespace opt { - class ArgList; - class DerivedArgList; - class InputArgList; -} -} + +class Arg; +class ArgList; +class DerivedArgList; + +} // namespace opt +} // namespace llvm namespace clang { + class ObjCRuntime; + namespace vfs { + class FileSystem; -} + +} // namespace vfs namespace driver { - class Compilation; - class CudaInstallationDetector; - class Driver; - class InputInfo; - class JobAction; - class RegisterEffectiveTriple; - class SanitizerArgs; - class Tool; - class XRayArgs; + +class Driver; +class InputInfo; +class SanitizerArgs; +class Tool; +class XRayArgs; /// Helper structure used to pass information extracted from clang executable /// name such as `i686-linux-android-g++`. -/// struct ParsedClangName { /// Target part of the executable name, as `i686-linux-android`. std::string TargetPrefix; + /// Driver mode part of the executable name, as `g++`. std::string ModeSuffix; + /// Corresponding driver mode argument, as '--driver-mode=g++' - const char *DriverMode; + const char *DriverMode = nullptr; + /// True if TargetPrefix is recognized as a registered target name. - bool TargetIsValid; + bool TargetIsValid = false; - ParsedClangName() : DriverMode(nullptr), TargetIsValid(false) {} + ParsedClangName() = default; ParsedClangName(std::string Suffix, const char *Mode) - : ModeSuffix(Suffix), DriverMode(Mode), TargetIsValid(false) {} + : ModeSuffix(Suffix), DriverMode(Mode) {} ParsedClangName(std::string Target, std::string Suffix, const char *Mode, bool IsRegistered) : TargetPrefix(Target), ModeSuffix(Suffix), DriverMode(Mode), TargetIsValid(IsRegistered) {} + + bool isEmpty() const { + return TargetPrefix.empty() && ModeSuffix.empty() && DriverMode == nullptr; + } }; /// ToolChain - Access to tools for a single platform. class ToolChain { public: - typedef SmallVector<std::string, 16> path_list; + using path_list = SmallVector<std::string, 16>; enum CXXStdlibType { CST_Libcxx, @@ -85,32 +100,33 @@ public: }; enum RTTIMode { - RM_EnabledExplicitly, - RM_EnabledImplicitly, - RM_DisabledExplicitly, - RM_DisabledImplicitly + RM_Enabled, + RM_Disabled, }; private: + friend class RegisterEffectiveTriple; + const Driver &D; llvm::Triple Triple; const llvm::opt::ArgList &Args; + // We need to initialize CachedRTTIArg before CachedRTTIMode const llvm::opt::Arg *const CachedRTTIArg; + const RTTIMode CachedRTTIMode; - /// The list of toolchain specific path prefixes to search for - /// files. + /// The list of toolchain specific path prefixes to search for files. path_list FilePaths; - /// The list of toolchain specific path prefixes to search for - /// programs. + /// The list of toolchain specific path prefixes to search for programs. path_list ProgramPaths; mutable std::unique_ptr<Tool> Clang; mutable std::unique_ptr<Tool> Assemble; mutable std::unique_ptr<Tool> Link; mutable std::unique_ptr<Tool> OffloadBundler; + Tool *getClang() const; Tool *getAssemble() const; Tool *getLink() const; @@ -128,8 +144,6 @@ private: EffectiveTriple = std::move(ET); } - friend class RegisterEffectiveTriple; - protected: MultilibSet Multilibs; @@ -185,7 +199,7 @@ public: StringRef getPlatform() const { return Triple.getVendorName(); } StringRef getOS() const { return Triple.getOSName(); } - /// \brief Provide the default architecture name (as expected by -arch) for + /// Provide the default architecture name (as expected by -arch) for /// this toolchain. StringRef getDefaultUniversalArchName() const; @@ -217,7 +231,7 @@ public: // Returns the RTTIMode for the toolchain with the current arguments. RTTIMode getRTTIMode() const { return CachedRTTIMode; } - /// \brief Return any implicit target and/or mode flag for an invocation of + /// Return any implicit target and/or mode flag for an invocation of /// the compiler driver as `ProgName`. /// /// For example, when called with i686-linux-android-g++, the first element @@ -231,7 +245,6 @@ public: /// e.g., argv[0]). /// \return A structure of type ParsedClangName that contains the executable /// name parts. - /// static ParsedClangName getTargetAndModeFromProgramName(StringRef ProgName); // Tool access. @@ -272,7 +285,7 @@ public: /// the linker suffix or name. std::string GetLinkerPath() const; - /// \brief Dispatch to the specific toolchain for verbose printing. + /// Dispatch to the specific toolchain for verbose printing. /// /// This is used when handling the verbose option to print detailed, /// toolchain-specific information useful for understanding the behavior of @@ -281,7 +294,7 @@ public: // Platform defaults information - /// \brief Returns true if the toolchain is targeting a non-native + /// Returns true if the toolchain is targeting a non-native /// architecture. virtual bool isCrossCompiling() const; @@ -300,7 +313,7 @@ public: /// by default. virtual bool IsIntegratedAssemblerDefault() const { return false; } - /// \brief Check if the toolchain should use the integrated assembler. + /// Check if the toolchain should use the integrated assembler. virtual bool useIntegratedAs() const; /// IsMathErrnoDefault - Does this tool chain use -fmath-errno by default. @@ -318,7 +331,7 @@ public: /// mixed dispatch method be used? virtual bool UseObjCMixedDispatch() const { return false; } - /// \brief Check whether to enable x86 relax relocations by default. + /// Check whether to enable x86 relax relocations by default. virtual bool useRelaxRelocations() const; /// GetDefaultStackProtectorLevel - Get the default stack protector level for @@ -328,9 +341,7 @@ public: } /// GetDefaultLinker - Get the default linker to use. - virtual const char *getDefaultLinker() const { - return "ld"; - } + virtual const char *getDefaultLinker() const { return "ld"; } /// GetDefaultRuntimeLibType - Get the default runtime library variant to use. virtual RuntimeLibType GetDefaultRuntimeLibType() const { @@ -355,6 +366,9 @@ public: // as OpenMP) to find arch-specific libraries. std::string getArchSpecificLibPath() const; + // Returns <OSname> part of above. + StringRef getOSLibName() const; + /// needsProfileRT - returns true if instrumentation profile is on. static bool needsProfileRT(const llvm::opt::ArgList &Args); @@ -362,13 +376,13 @@ public: /// by default. virtual bool IsUnwindTablesDefault(const llvm::opt::ArgList &Args) const; - /// \brief Test whether this toolchain defaults to PIC. + /// Test whether this toolchain defaults to PIC. virtual bool isPICDefault() const = 0; - /// \brief Test whether this toolchain defaults to PIE. + /// Test whether this toolchain defaults to PIE. virtual bool isPIEDefault() const = 0; - /// \brief Tests whether this toolchain forces its default for PIC, PIE or + /// Tests whether this toolchain forces its default for PIC, PIE or /// non-PIC. If this returns true, any PIC related flags should be ignored /// and instead the results of \c isPICDefault() and \c isPIEDefault() are /// used exclusively. @@ -404,9 +418,7 @@ public: GetExceptionModel(const llvm::opt::ArgList &Args) const; /// SupportsEmbeddedBitcode - Does this tool chain support embedded bitcode. - virtual bool SupportsEmbeddedBitcode() const { - return false; - } + virtual bool SupportsEmbeddedBitcode() const { return false; } /// getThreadModel() - Which thread model does this target use? virtual std::string getThreadModel() const { return "posix"; } @@ -442,7 +454,7 @@ public: /// FIXME: this really belongs on some sort of DeploymentTarget abstraction virtual bool hasBlocksRuntime() const { return true; } - /// \brief Add the clang cc1 arguments for system include paths. + /// Add the clang cc1 arguments for system include paths. /// /// This routine is responsible for adding the necessary cc1 arguments to /// include headers from standard system header directories. @@ -450,12 +462,12 @@ public: AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const; - /// \brief Add options that need to be passed to cc1 for this target. + /// Add options that need to be passed to cc1 for this target. virtual void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, Action::OffloadKind DeviceOffloadKind) const; - /// \brief Add warning options that need to be passed to cc1 for this target. + /// Add warning options that need to be passed to cc1 for this target. virtual void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const; // GetRuntimeLibType - Determine the runtime library type to use with the @@ -497,27 +509,28 @@ public: /// This checks for presence of the -Ofast, -ffast-math or -funsafe-math flags. virtual bool AddFastMathRuntimeIfAvailable( const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const; + /// addProfileRTLibs - When -fprofile-instr-profile is specified, try to pass /// a suitable profile runtime library to the linker. virtual void addProfileRTLibs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const; - /// \brief Add arguments to use system-specific CUDA includes. + /// Add arguments to use system-specific CUDA includes. virtual void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const; - /// \brief Add arguments to use MCU GCC toolchain includes. + /// Add arguments to use MCU GCC toolchain includes. virtual void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const; - /// \brief On Windows, returns the MSVC compatibility version. + /// On Windows, returns the MSVC compatibility version. virtual VersionTuple computeMSVCVersion(const Driver *D, const llvm::opt::ArgList &Args) const; - /// \brief Return sanitizers which are available in this toolchain. + /// Return sanitizers which are available in this toolchain. virtual SanitizerMask getSupportedSanitizers() const; - /// \brief Return sanitizers which are enabled by default. + /// Return sanitizers which are enabled by default. virtual SanitizerMask getDefaultSanitizers() const { return 0; } }; @@ -534,7 +547,8 @@ public: ~RegisterEffectiveTriple() { TC.setEffectiveTriple(llvm::Triple()); } }; -} // end namespace driver -} // end namespace clang +} // namespace driver + +} // namespace clang -#endif +#endif // LLVM_CLANG_DRIVER_TOOLCHAIN_H diff --git a/include/clang/Driver/Types.def b/include/clang/Driver/Types.def index 2430b5b924c32..c23f1f13361f7 100644 --- a/include/clang/Driver/Types.def +++ b/include/clang/Driver/Types.def @@ -46,6 +46,9 @@ TYPE("cl", CL, PP_C, "cl", "u") TYPE("cuda-cpp-output", PP_CUDA, INVALID, "cui", "u") TYPE("cuda", CUDA, PP_CUDA, "cu", "u") TYPE("cuda", CUDA_DEVICE, PP_CUDA, "cu", "") +TYPE("hip-cpp-output", PP_HIP, INVALID, "cui", "u") +TYPE("hip", HIP, PP_HIP, "cu", "u") +TYPE("hip", HIP_DEVICE, PP_HIP, "cu", "") TYPE("objective-c-cpp-output", PP_ObjC, INVALID, "mi", "u") TYPE("objc-cpp-output", PP_ObjC_Alias, INVALID, "mi", "u") TYPE("objective-c", ObjC, PP_ObjC, "m", "u") diff --git a/include/clang/Driver/Types.h b/include/clang/Driver/Types.h index 22a26ae46a0b9..5bc6668a0d1de 100644 --- a/include/clang/Driver/Types.h +++ b/include/clang/Driver/Types.h @@ -77,6 +77,9 @@ namespace types { /// isCuda - Is this a CUDA input. bool isCuda(ID Id); + /// isHIP - Is this a HIP input. + bool isHIP(ID Id); + /// isObjC - Is this an "ObjC" input (Obj-C and Obj-C++ sources and headers). bool isObjC(ID Id); diff --git a/include/clang/Driver/XRayArgs.h b/include/clang/Driver/XRayArgs.h index e5b76162de8e2..c7ca945291758 100644 --- a/include/clang/Driver/XRayArgs.h +++ b/include/clang/Driver/XRayArgs.h @@ -9,6 +9,7 @@ #ifndef LLVM_CLANG_DRIVER_XRAYARGS_H #define LLVM_CLANG_DRIVER_XRAYARGS_H +#include "clang/Basic/XRayInstr.h" #include "clang/Driver/Types.h" #include "llvm/Option/Arg.h" #include "llvm/Option/ArgList.h" @@ -21,16 +22,25 @@ class ToolChain; class XRayArgs { std::vector<std::string> AlwaysInstrumentFiles; std::vector<std::string> NeverInstrumentFiles; + std::vector<std::string> AttrListFiles; std::vector<std::string> ExtraDeps; + std::vector<std::string> Modes; + XRayInstrSet InstrumentationBundle; bool XRayInstrument = false; int InstructionThreshold = 200; bool XRayAlwaysEmitCustomEvents = false; + bool XRayAlwaysEmitTypedEvents = false; + bool XRayRT = true; public: /// Parses the XRay arguments from an argument list. XRayArgs(const ToolChain &TC, const llvm::opt::ArgList &Args); void addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const; + + bool needsXRayRt() const { return XRayInstrument && XRayRT; } + llvm::ArrayRef<std::string> modeList() const { return Modes; } + XRayInstrSet instrumentationBundle() const { return InstrumentationBundle; } }; } // namespace driver |