https://github.com/mcinally updated https://github.com/llvm/llvm-project/pull/142800
>From 918b853de8c43dacebecb42cafa6d3b8fec15b47 Mon Sep 17 00:00:00 2001 From: Cameron McInally <cmcina...@nvidia.com> Date: Tue, 3 Jun 2025 11:12:42 -0700 Subject: [PATCH] [Driver] Move CommonArgs to a location visible by the Frontend Drivers This patch moves the CommonArgs utilities into a location visible by the Frontend Drivers, so that the Frontend Drivers may share option parsing code with the Compiler Driver. This is useful when the Frontend Drivers would like to verify that their incoming options are well-formed and also not reinvent the option parsing wheel. We already see code in the Clang/Flang Drivers that is parsing and verifying its incoming options. E.g. OPT_ffp_contract. This option is parsed in the Compiler Driver, Clang Driver, and Flang Driver, all with slightly different parsing code. It would be nice if the Frontend Drivers were not required to duplicate this Compiler Driver code. That way there is no maintenace burden on keeping all these parsing functions in sync. Along those lines, the Frontend Drivers will now have a useful mechanism to verify their incoming options are well-formed. Currently, the Frontend Drivers trust that the Compiler Driver is not passing back junk. In some cases, the Language Drivers will accept junk with no error at all. E.g.: `clang -cc1 -mprefer-vector-width=junk test.c' With this patch, we'll now be able to tighten up incomming options to the Frontend drivers in a lightweight way. --- .../clang/Driver}/CommonArgs.h | 6 ++++ clang/lib/Driver/MultilibBuilder.cpp | 2 +- clang/lib/Driver/ToolChain.cpp | 2 +- clang/lib/Driver/ToolChains/AIX.cpp | 2 +- clang/lib/Driver/ToolChains/AMDGPU.cpp | 2 +- clang/lib/Driver/ToolChains/AVR.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/AArch64.cpp | 2 +- .../lib/Driver/ToolChains/Arch/LoongArch.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/Mips.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/PPC.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 2 +- clang/lib/Driver/ToolChains/BareMetal.cpp | 2 +- clang/lib/Driver/ToolChains/CSKYToolChain.cpp | 2 +- clang/lib/Driver/ToolChains/Clang.cpp | 26 ++--------------- clang/lib/Driver/ToolChains/CommonArgs.cpp | 29 ++++++++++++++++++- clang/lib/Driver/ToolChains/CrossWindows.cpp | 2 +- clang/lib/Driver/ToolChains/Cuda.cpp | 2 +- clang/lib/Driver/ToolChains/Cygwin.cpp | 2 +- clang/lib/Driver/ToolChains/Darwin.cpp | 2 +- clang/lib/Driver/ToolChains/DragonFly.cpp | 2 +- clang/lib/Driver/ToolChains/Flang.cpp | 2 +- clang/lib/Driver/ToolChains/FreeBSD.cpp | 2 +- clang/lib/Driver/ToolChains/Fuchsia.cpp | 2 +- clang/lib/Driver/ToolChains/Gnu.cpp | 2 +- clang/lib/Driver/ToolChains/HIPAMD.cpp | 2 +- clang/lib/Driver/ToolChains/HIPSPV.cpp | 2 +- clang/lib/Driver/ToolChains/HIPUtility.cpp | 2 +- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- clang/lib/Driver/ToolChains/Haiku.cpp | 2 +- clang/lib/Driver/ToolChains/Hexagon.cpp | 2 +- clang/lib/Driver/ToolChains/Hurd.cpp | 2 +- .../lib/Driver/ToolChains/InterfaceStubs.cpp | 2 +- clang/lib/Driver/ToolChains/Linux.cpp | 2 +- clang/lib/Driver/ToolChains/MSP430.cpp | 2 +- clang/lib/Driver/ToolChains/MSVC.cpp | 2 +- clang/lib/Driver/ToolChains/MinGW.cpp | 2 +- clang/lib/Driver/ToolChains/NaCl.cpp | 2 +- clang/lib/Driver/ToolChains/NetBSD.cpp | 2 +- clang/lib/Driver/ToolChains/OHOS.cpp | 2 +- clang/lib/Driver/ToolChains/OpenBSD.cpp | 2 +- clang/lib/Driver/ToolChains/PS4CPU.cpp | 2 +- .../lib/Driver/ToolChains/RISCVToolchain.cpp | 2 +- clang/lib/Driver/ToolChains/SPIRV.cpp | 2 +- clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp | 2 +- clang/lib/Driver/ToolChains/SYCL.cpp | 2 +- clang/lib/Driver/ToolChains/Solaris.cpp | 2 +- clang/lib/Driver/ToolChains/UEFI.cpp | 2 +- clang/lib/Driver/ToolChains/VEToolchain.cpp | 2 +- clang/lib/Driver/ToolChains/WebAssembly.cpp | 2 +- clang/lib/Driver/ToolChains/XCore.cpp | 2 +- clang/lib/Driver/ToolChains/ZOS.cpp | 2 +- clang/lib/Driver/XRayArgs.cpp | 2 +- .../unittests/Driver/MultilibBuilderTest.cpp | 2 +- clang/unittests/Driver/MultilibTest.cpp | 2 +- flang/lib/Frontend/CompilerInvocation.cpp | 20 +++++-------- flang/test/Driver/prefer-vector-width.f90 | 2 +- 56 files changed, 96 insertions(+), 89 deletions(-) rename clang/{lib/Driver/ToolChains => include/clang/Driver}/CommonArgs.h (98%) diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/include/clang/Driver/CommonArgs.h similarity index 98% rename from clang/lib/Driver/ToolChains/CommonArgs.h rename to clang/include/clang/Driver/CommonArgs.h index b5b9c1e66e380..048f2eab6887e 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/include/clang/Driver/CommonArgs.h @@ -270,6 +270,12 @@ void handleVectorizeLoopsArgs(const llvm::opt::ArgList &Args, /// Enable -fslp-vectorize based on the optimization level selected. void handleVectorizeSLPArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs); + +void ParseMPreferVectorWidthOption(clang::DiagnosticsEngine &Diags, + const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs, + bool isCompilerDriver); + } // end namespace tools } // end namespace driver } // end namespace clang diff --git a/clang/lib/Driver/MultilibBuilder.cpp b/clang/lib/Driver/MultilibBuilder.cpp index 8440a82f78bef..9d44d8681cf8a 100644 --- a/clang/lib/Driver/MultilibBuilder.cpp +++ b/clang/lib/Driver/MultilibBuilder.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "clang/Driver/MultilibBuilder.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "llvm/ADT/StringMap.h" #include "llvm/Support/Path.h" #include "llvm/Support/Regex.h" diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index ce302b308fd19..91a17b6c49fd7 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -11,13 +11,13 @@ #include "ToolChains/Arch/ARM.h" #include "ToolChains/Arch/RISCV.h" #include "ToolChains/Clang.h" -#include "ToolChains/CommonArgs.h" #include "ToolChains/Flang.h" #include "ToolChains/InterfaceStubs.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Basic/Sanitizers.h" #include "clang/Config/config.h" #include "clang/Driver/Action.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Job.h" diff --git a/clang/lib/Driver/ToolChains/AIX.cpp b/clang/lib/Driver/ToolChains/AIX.cpp index a1a94e37116ce..066b59305fe3f 100644 --- a/clang/lib/Driver/ToolChains/AIX.cpp +++ b/clang/lib/Driver/ToolChains/AIX.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "AIX.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index dfbe936d5a5d3..cf9c24f1e1cde 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "AMDGPU.h" -#include "CommonArgs.h" #include "clang/Basic/TargetID.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index f1529f857eef8..b0523a7f4e40e 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "AVR.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index eaae9f876e3ad..ea906d2e2acfc 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "AArch64.h" -#include "../CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Option/ArgList.h" diff --git a/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp b/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp index a35f8276737ff..3318e498a74f9 100644 --- a/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp +++ b/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp @@ -8,8 +8,8 @@ #include "LoongArch.h" #include "../Clang.h" -#include "ToolChains/CommonArgs.h" #include "clang/Basic/DiagnosticDriver.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/TargetParser/Host.h" diff --git a/clang/lib/Driver/ToolChains/Arch/Mips.cpp b/clang/lib/Driver/ToolChains/Arch/Mips.cpp index 0d847587e8664..8787c8276721c 100644 --- a/clang/lib/Driver/ToolChains/Arch/Mips.cpp +++ b/clang/lib/Driver/ToolChains/Arch/Mips.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "Mips.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/lib/Driver/ToolChains/Arch/PPC.cpp b/clang/lib/Driver/ToolChains/Arch/PPC.cpp index afa86230085ec..361a68a892a8f 100644 --- a/clang/lib/Driver/ToolChains/Arch/PPC.cpp +++ b/clang/lib/Driver/ToolChains/Arch/PPC.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "PPC.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp index d0b620980bcef..baa2c8c0bcfb2 100644 --- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp +++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp @@ -8,7 +8,7 @@ #include "RISCV.h" #include "../Clang.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Option/ArgList.h" diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index 6bf2302d3bd99..d8168ed15febd 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -8,8 +8,8 @@ #include "BareMetal.h" -#include "CommonArgs.h" #include "Gnu.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/InputInfo.h" #include "Arch/ARM.h" diff --git a/clang/lib/Driver/ToolChains/CSKYToolChain.cpp b/clang/lib/Driver/ToolChains/CSKYToolChain.cpp index e944cba0eb23c..e4db3307ee3aa 100644 --- a/clang/lib/Driver/ToolChains/CSKYToolChain.cpp +++ b/clang/lib/Driver/ToolChains/CSKYToolChain.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "CSKYToolChain.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 13842b8cc2870..bb3baa7cec4c0 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -14,7 +14,6 @@ #include "Arch/RISCV.h" #include "Arch/Sparc.h" #include "Arch/SystemZ.h" -#include "CommonArgs.h" #include "Hexagon.h" #include "PS4CPU.h" #include "clang/Basic/CLWarnings.h" @@ -26,6 +25,7 @@ #include "clang/Basic/Version.h" #include "clang/Config/config.h" #include "clang/Driver/Action.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Distro.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" @@ -264,27 +264,6 @@ static void ParseMRecip(const Driver &D, const ArgList &Args, OutStrings.push_back(Args.MakeArgString(Out)); } -/// The -mprefer-vector-width option accepts either a positive integer -/// or the string "none". -static void ParseMPreferVectorWidth(const Driver &D, const ArgList &Args, - ArgStringList &CmdArgs) { - Arg *A = Args.getLastArg(options::OPT_mprefer_vector_width_EQ); - if (!A) - return; - - StringRef Value = A->getValue(); - if (Value == "none") { - CmdArgs.push_back("-mprefer-vector-width=none"); - } else { - unsigned Width; - if (Value.getAsInteger(10, Width)) { - D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value; - return; - } - CmdArgs.push_back(Args.MakeArgString("-mprefer-vector-width=" + Value)); - } -} - static bool shouldUseExceptionTablesForObjCExceptions(const ObjCRuntime &runtime, const llvm::Triple &Triple) { @@ -7607,7 +7586,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, handleVectorizeLoopsArgs(Args, CmdArgs); handleVectorizeSLPArgs(Args, CmdArgs); - ParseMPreferVectorWidth(D, Args, CmdArgs); + ParseMPreferVectorWidthOption(D.getDiags(), Args, CmdArgs, + /*isCompilerDriver=*/true); Args.AddLastArg(CmdArgs, options::OPT_fshow_overloads_EQ); Args.AddLastArg(CmdArgs, diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 937ee09cac7cc..d927fc6d8b54b 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "Arch/AArch64.h" #include "Arch/ARM.h" #include "Arch/CSKY.h" @@ -3167,3 +3167,30 @@ void tools::handleInterchangeLoopsArgs(const ArgList &Args, options::OPT_fno_loop_interchange, EnableInterchange)) CmdArgs.push_back("-floop-interchange"); } + +void tools::ParseMPreferVectorWidthOption(clang::DiagnosticsEngine &Diags, + const llvm::opt::ArgList &Args, + ArgStringList &CmdArgs, + bool isCompilerDriver) { + // If this was invoked by the Compiler Driver, we pass through the option + // as-is. Otherwise, if this is the Frontend Driver, we want just the value. + StringRef Out = (isCompilerDriver) ? "-mprefer-vector-width=" : ""; + + Arg *A = Args.getLastArg(clang::driver::options::OPT_mprefer_vector_width_EQ); + if (!A) + return; + + StringRef Value = A->getValue(); + unsigned Width; + + // Only "none" and Integer values are accepted by + // -mprefer-vector-width=<value>. + if (Value != "none" && Value.getAsInteger(10, Width)) { + Diags.Report(clang::diag::err_drv_invalid_value) + << A->getOption().getName() << Value; + return; + } + + CmdArgs.push_back(Args.MakeArgString(Out + Value)); + return; +} diff --git a/clang/lib/Driver/ToolChains/CrossWindows.cpp b/clang/lib/Driver/ToolChains/CrossWindows.cpp index 3c5dfba329cf8..51c892fc91718 100644 --- a/clang/lib/Driver/ToolChains/CrossWindows.cpp +++ b/clang/lib/Driver/ToolChains/CrossWindows.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "CrossWindows.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 073861dade4f7..a91e4de41c8da 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "Cuda.h" -#include "CommonArgs.h" #include "clang/Basic/Cuda.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Distro.h" #include "clang/Driver/Driver.h" diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp index f0e90deee98b3..d9c16347daa34 100644 --- a/clang/lib/Driver/ToolChains/Cygwin.cpp +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Cygwin.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 0be7180098359..81e613cf7cdc7 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -8,10 +8,10 @@ #include "Darwin.h" #include "Arch/ARM.h" -#include "CommonArgs.h" #include "clang/Basic/AlignedAllocation.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp b/clang/lib/Driver/ToolChains/DragonFly.cpp index 38a29ae49e8d9..524f5f2ff391e 100644 --- a/clang/lib/Driver/ToolChains/DragonFly.cpp +++ b/clang/lib/Driver/ToolChains/DragonFly.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "DragonFly.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index dcc46469df3e9..e0a366bfb9225 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -8,9 +8,9 @@ #include "Flang.h" #include "Arch/RISCV.h" -#include "CommonArgs.h" #include "clang/Basic/CodeGenOptions.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Options.h" #include "llvm/Frontend/Debug/Options.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index ccf6987a2ea65..b17b76233ad30 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -10,8 +10,8 @@ #include "Arch/ARM.h" #include "Arch/Mips.h" #include "Arch/Sparc.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp index 910db1dde0d18..1c165bbfe84f5 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Fuchsia.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/MultilibBuilder.h" diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index e42cd0f97cb49..9c68c5c6de2b2 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -15,8 +15,8 @@ #include "Arch/RISCV.h" #include "Arch/Sparc.h" #include "Arch/SystemZ.h" -#include "CommonArgs.h" #include "clang/Config/config.h" // for GCC_INSTALL_PREFIX +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/MultilibBuilder.h" diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index fc067e9052275..a8f2b09b1b20f 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -8,10 +8,10 @@ #include "HIPAMD.h" #include "AMDGPU.h" -#include "CommonArgs.h" #include "HIPUtility.h" #include "SPIRV.h" #include "clang/Basic/Cuda.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp index 02ec36df273af..ec29c62976e10 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.cpp +++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "HIPSPV.h" -#include "CommonArgs.h" #include "HIPUtility.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp index 8a3dd494f3b4f..cb061ffede234 100644 --- a/clang/lib/Driver/ToolChains/HIPUtility.cpp +++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "HIPUtility.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "llvm/ADT/StringExtras.h" diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index eb8f6881bffc7..dcc51e182924c 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "HLSL.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Job.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp b/clang/lib/Driver/ToolChains/Haiku.cpp index 5d0d8b7f5024c..dd6ada8f56972 100644 --- a/clang/lib/Driver/ToolChains/Haiku.cpp +++ b/clang/lib/Driver/ToolChains/Haiku.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Haiku.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/SanitizerArgs.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index bed8de94130c5..9f8b676fc7dc2 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "Hexagon.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/Hurd.cpp b/clang/lib/Driver/ToolChains/Hurd.cpp index 0bc114b90ffc0..a22a8face1797 100644 --- a/clang/lib/Driver/ToolChains/Hurd.cpp +++ b/clang/lib/Driver/ToolChains/Hurd.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Hurd.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/InterfaceStubs.cpp b/clang/lib/Driver/ToolChains/InterfaceStubs.cpp index 05a13db8d0cff..59a6742c406c2 100644 --- a/clang/lib/Driver/ToolChains/InterfaceStubs.cpp +++ b/clang/lib/Driver/ToolChains/InterfaceStubs.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "InterfaceStubs.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index 19919cf5136d8..151b2bfced818 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -12,8 +12,8 @@ #include "Arch/Mips.h" #include "Arch/PPC.h" #include "Arch/RISCV.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Distro.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/MSP430.cpp b/clang/lib/Driver/ToolChains/MSP430.cpp index be0f9f2145383..9eca1ad5f2865 100644 --- a/clang/lib/Driver/ToolChains/MSP430.cpp +++ b/clang/lib/Driver/ToolChains/MSP430.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "MSP430.h" -#include "CommonArgs.h" #include "Gnu.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Multilib.h" diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index a14691c5a4e7a..1e244865b2117 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "MSVC.h" -#include "CommonArgs.h" #include "Darwin.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 2245b036b8459..7d093d20b3dd9 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "MinGW.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/NaCl.cpp b/clang/lib/Driver/ToolChains/NaCl.cpp index ab619615d67e7..f7acaa1f3a78d 100644 --- a/clang/lib/Driver/ToolChains/NaCl.cpp +++ b/clang/lib/Driver/ToolChains/NaCl.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "NaCl.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp index ae164be1b4e8b..8db00deeb80df 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -10,8 +10,8 @@ #include "Arch/ARM.h" #include "Arch/Mips.h" #include "Arch/Sparc.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 72f36d08f4da7..00991504e97a8 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -8,8 +8,8 @@ #include "OHOS.h" #include "Arch/ARM.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp index 668626259809e..79b1b6960da1f 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -10,8 +10,8 @@ #include "Arch/ARM.h" #include "Arch/Mips.h" #include "Arch/Sparc.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index cb56a7ebeba24..e965786d269fa 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "PS4CPU.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/RISCVToolchain.cpp b/clang/lib/Driver/ToolChains/RISCVToolchain.cpp index d88ddc264d72a..42bbc130637be 100644 --- a/clang/lib/Driver/ToolChains/RISCVToolchain.cpp +++ b/clang/lib/Driver/ToolChains/RISCVToolchain.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "RISCVToolchain.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/SPIRV.cpp b/clang/lib/Driver/ToolChains/SPIRV.cpp index d9292cf01f8d4..ea824dbad54cb 100644 --- a/clang/lib/Driver/ToolChains/SPIRV.cpp +++ b/clang/lib/Driver/ToolChains/SPIRV.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// #include "SPIRV.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp index a688fd8d9fb50..4e09d5eac26fd 100644 --- a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp @@ -6,7 +6,7 @@ // //==------------------------------------------------------------------------==// #include "SPIRVOpenMP.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" using namespace clang::driver; using namespace clang::driver::toolchains; diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 6611c142a5efd..0232b047a6c4b 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// #include "SYCL.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" using namespace clang::driver; using namespace clang::driver::toolchains; diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp index 48d1002381761..a3574e1b701e8 100644 --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/clang/lib/Driver/ToolChains/Solaris.cpp @@ -7,10 +7,10 @@ //===----------------------------------------------------------------------===// #include "Solaris.h" -#include "CommonArgs.h" #include "Gnu.h" #include "clang/Basic/LangStandard.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/UEFI.cpp b/clang/lib/Driver/ToolChains/UEFI.cpp index 2ef719bb43aae..ac6668e6bdd5f 100644 --- a/clang/lib/Driver/ToolChains/UEFI.cpp +++ b/clang/lib/Driver/ToolChains/UEFI.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "UEFI.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/VEToolchain.cpp b/clang/lib/Driver/ToolChains/VEToolchain.cpp index cf85a691dbdb7..ad9129046c3e1 100644 --- a/clang/lib/Driver/ToolChains/VEToolchain.cpp +++ b/clang/lib/Driver/ToolChains/VEToolchain.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "VEToolchain.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index b3ed496629992..5054868b5ff4d 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "WebAssembly.h" -#include "CommonArgs.h" #include "Gnu.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/XCore.cpp b/clang/lib/Driver/ToolChains/XCore.cpp index c95ebabdd30c4..6a2a75cb99739 100644 --- a/clang/lib/Driver/ToolChains/XCore.cpp +++ b/clang/lib/Driver/ToolChains/XCore.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "XCore.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp index d05202972825d..57bcb3c306cef 100644 --- a/clang/lib/Driver/ToolChains/ZOS.cpp +++ b/clang/lib/Driver/ToolChains/ZOS.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "ZOS.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "llvm/Option/ArgList.h" diff --git a/clang/lib/Driver/XRayArgs.cpp b/clang/lib/Driver/XRayArgs.cpp index 701dd2906dccb..ceed7cb6acbbf 100644 --- a/clang/lib/Driver/XRayArgs.cpp +++ b/clang/lib/Driver/XRayArgs.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// #include "clang/Driver/XRayArgs.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "clang/Driver/ToolChain.h" diff --git a/clang/unittests/Driver/MultilibBuilderTest.cpp b/clang/unittests/Driver/MultilibBuilderTest.cpp index 0e5385c913533..38c9344d2966d 100644 --- a/clang/unittests/Driver/MultilibBuilderTest.cpp +++ b/clang/unittests/Driver/MultilibBuilderTest.cpp @@ -12,9 +12,9 @@ //===----------------------------------------------------------------------===// #include "clang/Driver/MultilibBuilder.h" -#include "../../lib/Driver/ToolChains/CommonArgs.h" #include "SimpleDiagnosticConsumer.h" #include "clang/Basic/LLVM.h" +#include "clang/Driver/CommonArgs.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/unittests/Driver/MultilibTest.cpp b/clang/unittests/Driver/MultilibTest.cpp index c03e117d99304..4c11e6a32d7c8 100644 --- a/clang/unittests/Driver/MultilibTest.cpp +++ b/clang/unittests/Driver/MultilibTest.cpp @@ -11,10 +11,10 @@ //===----------------------------------------------------------------------===// #include "clang/Driver/Multilib.h" -#include "../../lib/Driver/ToolChains/CommonArgs.h" #include "SimpleDiagnosticConsumer.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/Version.h" +#include "clang/Driver/CommonArgs.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 90a002929eff0..55383e064df5a 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -23,6 +23,7 @@ #include "clang/Basic/AllDiagnostics.h" #include "clang/Basic/DiagnosticDriver.h" #include "clang/Basic/DiagnosticOptions.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/OptionUtils.h" @@ -309,19 +310,12 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts, for (auto *a : args.filtered(clang::driver::options::OPT_fpass_plugin_EQ)) opts.LLVMPassPlugins.push_back(a->getValue()); - // -mprefer_vector_width option - if (const llvm::opt::Arg *a = args.getLastArg( - clang::driver::options::OPT_mprefer_vector_width_EQ)) { - llvm::StringRef s = a->getValue(); - unsigned width; - if (s == "none") - opts.PreferVectorWidth = "none"; - else if (s.getAsInteger(10, width)) - diags.Report(clang::diag::err_drv_invalid_value) - << a->getAsString(args) << a->getValue(); - else - opts.PreferVectorWidth = s.str(); - } + llvm::opt::ArgStringList result; + clang::driver::tools::ParseMPreferVectorWidthOption( + diags, args, result, + /*isCompilerDriver=*/false); + if (result.size() > 0) + opts.PreferVectorWidth = result[0]; // -fembed-offload-object option for (auto *a : diff --git a/flang/test/Driver/prefer-vector-width.f90 b/flang/test/Driver/prefer-vector-width.f90 index 3622b28056332..89dc6d35d8bac 100644 --- a/flang/test/Driver/prefer-vector-width.f90 +++ b/flang/test/Driver/prefer-vector-width.f90 @@ -15,4 +15,4 @@ end subroutine func ! CHECK-NONE-SAME: "prefer-vector-width"="none" ! CHECK-128-SAME: "prefer-vector-width"="128" ! CHECK-256-SAME: "prefer-vector-width"="256" -! CHECK-INVALID: error: invalid value 'xxx' in '-mprefer-vector-width=xxx' \ No newline at end of file +! CHECK-INVALID: error: invalid value 'xxx' in 'mprefer-vector-width=' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits