[clang] 2b5f970 - [RISCV] Move -mtune=native expansion into riscv::getRISCVTuneCPU. NFC (#215891)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Aug 16 21:41:55 PDT 2026
Author: Craig Topper
Date: 2026-08-16T21:41:51-07:00
New Revision: 2b5f97068fa15083295cd5d37a1a0d4d01396026
URL: https://github.com/llvm/llvm-project/commit/2b5f97068fa15083295cd5d37a1a0d4d01396026
DIFF: https://github.com/llvm/llvm-project/commit/2b5f97068fa15083295cd5d37a1a0d4d01396026.diff
LOG: [RISCV] Move -mtune=native expansion into riscv::getRISCVTuneCPU. NFC (#215891)
Previously it was applied at one of the call sites. Applying it inside
makes it more clear how it is supposed to interact with
-mexperimental-mtune-syntax
Added:
Modified:
clang/lib/Driver/ToolChains/Arch/RISCV.cpp
clang/lib/Driver/ToolChains/Clang.cpp
clang/test/Driver/riscv-mtune-tune-features.c
Removed:
################################################################################
diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
index c97ce34a9fc77..8e650ddf92dfc 100644
--- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
@@ -457,14 +457,20 @@ riscv::getRISCVTuneCPU(const Driver &D, const llvm::opt::ArgList &Args,
TuneCPU = TuneCPU.slice(0, Idx);
}
- if (!TuneFeatures || TFString.empty())
- return TuneCPU;
- if (auto E = llvm::RISCV::parseTuneFeatureString(TuneCPU, TFString,
- *TuneFeatures)) {
- D.Diag(diag::err_drv_invalid_riscv_mtune_string)
- << 1 << TFString << llvm::toString(std::move(E));
- return std::nullopt;
+ if (TuneFeatures && !TFString.empty()) {
+ if (auto E = llvm::RISCV::parseTuneFeatureString(TuneCPU, TFString,
+ *TuneFeatures)) {
+ D.Diag(diag::err_drv_invalid_riscv_mtune_string)
+ << 1 << TFString << llvm::toString(std::move(E));
+ return std::nullopt;
+ }
}
+ // Apply -mtune=native after applying features. Not all features apply to
+ // all CPUs so an -mtune=native:<feature> may fail depending on what the
+ // native was expanded to.
+ if (TuneCPU == "native")
+ TuneCPU = llvm::sys::getHostCPUName();
+
return TuneCPU;
}
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 63eaa130d0969..54583fe3abbd8 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -2057,12 +2057,9 @@ void Clang::AddRISCVTargetArgs(const ArgList &Args,
return;
if (!TuneCPU->empty()) {
CmdArgs.push_back("-tune-cpu");
- if (*TuneCPU == "native")
- CmdArgs.push_back(Args.MakeArgString(llvm::sys::getHostCPUName()));
- else
- // TuneCPU might or might not be the original -mtune string, so we
- // have to create a new copy here.
- CmdArgs.push_back(Args.MakeArgString(*TuneCPU));
+ // TuneCPU might or might not be the original -mtune string, so we
+ // have to create a new copy here.
+ CmdArgs.push_back(Args.MakeArgString(*TuneCPU));
}
// Handle -mrvv-vector-bits=<bits>
diff --git a/clang/test/Driver/riscv-mtune-tune-features.c b/clang/test/Driver/riscv-mtune-tune-features.c
index bb55443b51c8e..f674243097a8f 100644
--- a/clang/test/Driver/riscv-mtune-tune-features.c
+++ b/clang/test/Driver/riscv-mtune-tune-features.c
@@ -42,3 +42,9 @@
// RUN: FileCheck --check-prefix=UNSUPPORTED-DIRECTIVE %s
// UNSUPPORTED-DIRECTIVE: invalid tune feature string 'prefer-w-inst':
// UNSUPPORTED-DIRECTIVE-SAME: Directive 'prefer-w-inst' is not allowed to be used with processor 'sifive-x280'
+
+// RUN: not %clang --target=riscv64 -mexperimental-mtune-syntax \
+// RUN: -mtune=native:full-vec-fp64 -c %s 2>&1 | \
+// RUN: FileCheck --check-prefix=NO-DIRECTIVE-NATIVE %s
+// NO-DIRECTIVE-NATIVE: invalid tune feature string 'full-vec-fp64':
+// NO-DIRECTIVE-NATIVE-SAME: Processor 'native' has no configurable tuning features
More information about the cfe-commits
mailing list