dang created this revision. dang added a reviewer: Bigcheese. Herald added subscribers: cfe-commits, dexonsmith. Herald added a project: clang.
Depends on D84190 <https://reviews.llvm.org/D84190> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D84668 Files: clang/include/clang/Driver/Options.td clang/lib/Frontend/CompilerInvocation.cpp
Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -248,14 +248,16 @@ return None; } +template <typename T> static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args, const char *Spelling, CompilerInvocation::StringAllocator SA, Option::OptionClass OptClass, - unsigned TableIndex, unsigned Value) { + unsigned TableIndex, T Value) { assert(TableIndex < SimpleEnumValueTablesSize); const SimpleEnumValueTable &Table = SimpleEnumValueTables[TableIndex]; - if (auto MaybeEnumVal = findValueTableByValue(Table, Value)) { + if (auto MaybeEnumVal = + findValueTableByValue(Table, static_cast<unsigned>(Value))) { denormalizeString(Args, Spelling, SA, OptClass, TableIndex, MaybeEnumVal->Name); } else { @@ -3149,27 +3151,7 @@ static void ParseTargetArgs(TargetOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags) { - Opts.CodeModel = std::string(Args.getLastArgValue(OPT_mcmodel_EQ, "default")); - Opts.ABI = std::string(Args.getLastArgValue(OPT_target_abi)); - if (Arg *A = Args.getLastArg(OPT_meabi)) { - StringRef Value = A->getValue(); - llvm::EABI EABIVersion = llvm::StringSwitch<llvm::EABI>(Value) - .Case("default", llvm::EABI::Default) - .Case("4", llvm::EABI::EABI4) - .Case("5", llvm::EABI::EABI5) - .Case("gnu", llvm::EABI::GNU) - .Default(llvm::EABI::Unknown); - if (EABIVersion == llvm::EABI::Unknown) - Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) - << Value; - else - Opts.EABIVersion = EABIVersion; - } - Opts.CPU = std::string(Args.getLastArgValue(OPT_target_cpu)); - Opts.FPMath = std::string(Args.getLastArgValue(OPT_mfpmath)); Opts.FeaturesAsWritten = Args.getAllArgValues(OPT_target_feature); - Opts.LinkerVersion = - std::string(Args.getLastArgValue(OPT_target_linker_version)); Opts.OpenCLExtensionsAsWritten = Args.getAllArgValues(OPT_cl_ext_EQ); if (Arg *A = Args.getLastArg(options::OPT_target_sdk_version_EQ)) { llvm::VersionTuple Version; Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -576,12 +576,38 @@ "Use 32-bit pointers for accessing const/local/shared address spaces">; defm force_enable_int128 : OptInFFlag<"force-enable-int128", "Enable", "Disable", " support for int128_t type", [], "TargetOpts->ForceEnableInt128">; +def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>, Flags<[CC1Option]>, + MarshallingInfoString<"TargetOpts->CodeModel", [{std::string("default")}]>; +def meabi : Separate<["-"], "meabi">, Group<m_Group>, Flags<[CC1Option]>, + HelpText<"Set EABI type, e.g. 4, 5 or gnu (default depends on triple)">, Values<"default,4,5,gnu">, + MarshallingInfoString<"TargetOpts->EABIVersion", "Default">, + NormalizedValuesScope<"llvm::EABI">, + NormalizedValues<["Default", "EABI4", "EABI5", "GNU"]>, AutoNormalizeEnum; + +let Flags = [CC1Option, NoDriverOption] in { + +def target_linker_version : Separate<["-"], "target-linker-version">, + HelpText<"Target linker version">, + MarshallingInfoString<"TargetOpts->LinkerVersion">; +def mfpmath : Separate<["-"], "mfpmath">, + HelpText<"Which unit to use for fp math">, + MarshallingInfoString<"TargetOpts->FPMath">; + +} // Flags = [CC1Option, NoDriverOption] + let Flags = [CC1Option, CC1AsOption, NoDriverOption] in { def triple : Separate<["-"], "triple">, HelpText<"Specify target triple (e.g. i686-apple-darwin9)">, MarshallingInfoString<"TargetOpts->Triple", "llvm::Triple::normalize(llvm::sys::getDefaultTargetTriple())">, AlwaysEmit, Normalizer<"normalizeTriple">; +def triple_EQ : Joined<["-"], "triple=">, Alias<triple>; +def target_cpu : Separate<["-"], "target-cpu">, + HelpText<"Target a specific cpu type">, + MarshallingInfoString<"TargetOpts->CPU">; +def target_abi : Separate<["-"], "target-abi">, + HelpText<"Target a particular ABI type">, + MarshallingInfoString<"TargetOpts->ABI">; } // Flags = [CC1Option, CC1AsOption, NoDriverOption] @@ -2866,7 +2892,6 @@ def mwatchsimulator_version_min_EQ : Joined<["-"], "mwatchsimulator-version-min=">, Alias<mwatchos_simulator_version_min_EQ>; def march_EQ : Joined<["-"], "march=">, Group<m_Group>, Flags<[CoreOption]>; def masm_EQ : Joined<["-"], "masm=">, Group<m_Group>, Flags<[DriverOption]>; -def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>, Flags<[CC1Option]>; def mtls_size_EQ : Joined<["-"], "mtls-size=">, Group<m_Group>, Flags<[DriverOption, CC1Option]>, HelpText<"Specify bit size of immediate TLS offsets (AArch64 ELF only): " "12 (for 4KB) | 24 (for 16MB, default) | 32 (for 4GB) | 48 (for 256TB, needs -mcmodel=large)">; @@ -2922,9 +2947,6 @@ HelpText<"Enable stack probes">; 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]>, - HelpText<"Set EABI type, e.g. 4, 5 or gnu (default depends on triple)">, Values<"default,4,5,gnu">; - def mno_constant_cfstrings : Flag<["-"], "mno-constant-cfstrings">, Group<m_Group>; def mno_global_merge : Flag<["-"], "mno-global-merge">, Group<m_Group>, Flags<[CC1Option]>, HelpText<"Disable merging of globals">; @@ -4067,23 +4089,13 @@ let Flags = [CC1Option, CC1AsOption, NoDriverOption] in { -def target_cpu : Separate<["-"], "target-cpu">, - HelpText<"Target a specific cpu type">; def target_feature : Separate<["-"], "target-feature">, HelpText<"Target specific attributes">; -def target_abi : Separate<["-"], "target-abi">, - HelpText<"Target a particular ABI type">; def target_sdk_version_EQ : Joined<["-"], "target-sdk-version=">, HelpText<"The version of target SDK used for compilation">; } -def target_linker_version : Separate<["-"], "target-linker-version">, - HelpText<"Target linker version">; -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">;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits