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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
