aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2020-12-16 13:17:24 +0100
committerJan Svoboda <jan_svoboda@apple.com>2020-12-18 09:40:56 +0100
commitff4b76d74f38a3816495c9914789e87a95525cf4 (patch)
tree9e206388ddf817d79981223805db9473c9fcb975 /clang/lib/Frontend/CompilerInvocation.cpp
parent9895c7012d61525ed541ef74d9eb43300bac9b0c (diff)
downloadllvm-ff4b76d74f38a3816495c9914789e87a95525cf4.zip
llvm-ff4b76d74f38a3816495c9914789e87a95525cf4.tar.gz
llvm-ff4b76d74f38a3816495c9914789e87a95525cf4.tar.bz2
[clang][cli] Port TargetOpts simple string based options to new option parsing system
Depends on D84190 Reviewed By: Bigcheese Original patch by Daniel Grumberg. Differential Revision: https://reviews.llvm.org/D84668
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp38
1 files changed, 13 insertions, 25 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index f7bb230..ea0cc74 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -244,10 +244,10 @@ static llvm::Optional<unsigned> normalizeSimpleEnum(OptSpecifier Opt,
return None;
}
-static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args,
- const char *Spelling,
- CompilerInvocation::StringAllocator SA,
- unsigned TableIndex, unsigned Value) {
+static void denormalizeSimpleEnumImpl(SmallVectorImpl<const char *> &Args,
+ const char *Spelling,
+ CompilerInvocation::StringAllocator SA,
+ unsigned TableIndex, unsigned Value) {
assert(TableIndex < SimpleEnumValueTablesSize);
const SimpleEnumValueTable &Table = SimpleEnumValueTables[TableIndex];
if (auto MaybeEnumVal = findValueTableByValue(Table, Value)) {
@@ -259,6 +259,15 @@ static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args,
}
}
+template <typename T>
+static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args,
+ const char *Spelling,
+ CompilerInvocation::StringAllocator SA,
+ unsigned TableIndex, T Value) {
+ return denormalizeSimpleEnumImpl(Args, Spelling, SA, TableIndex,
+ static_cast<unsigned>(Value));
+}
+
static void denormalizeSimpleEnumJoined(SmallVectorImpl<const char *> &Args,
const char *Spelling,
CompilerInvocation::StringAllocator SA,
@@ -3357,28 +3366,7 @@ static void ParsePreprocessorOutputArgs(PreprocessorOutputOptions &Opts,
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.TuneCPU = std::string(Args.getLastArgValue(OPT_tune_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);
Opts.AllowAMDGPUUnsafeFPAtomics =
Args.hasFlag(options::OPT_munsafe_fp_atomics,