From 880eb839e63fb40de11e5f488cfef62d7ebbffbe Mon Sep 17 00:00:00 2001 From: Kai Nacke Date: Wed, 13 Jul 2022 10:08:44 -0400 Subject: [PATCH] [SystemZ] Enable `-mtune=` option in clang. https://reviews.llvm.org/D128910 enabled handling of attribute "tune-cpu" in LLVM. This PR now enables option `-mtune` in clang, which then generates the new attribute. Reviewed By: uweigand Differential Revision: https://reviews.llvm.org/D129562 --- clang/docs/ClangCommandLineReference.rst | 2 +- clang/include/clang/Driver/Options.td | 2 +- clang/lib/Basic/Targets/SystemZ.h | 8 ++++++++ clang/lib/Driver/ToolChains/Clang.cpp | 19 +++++++++++++++++-- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/clang/docs/ClangCommandLineReference.rst b/clang/docs/ClangCommandLineReference.rst index 129e70d..776b84d 100644 --- a/clang/docs/ClangCommandLineReference.rst +++ b/clang/docs/ClangCommandLineReference.rst @@ -3325,7 +3325,7 @@ Specify bit size of immediate TLS offsets (AArch64 ELF only): 12 (for 4KB) \| 24 .. option:: -mtune= .. program:: clang -Only supported on X86 and RISC-V. Otherwise accepted for compatibility with GCC. +Only supported on X86, RISC-V and SystemZ. Otherwise accepted for compatibility with GCC. .. option:: -mtvos-version-min=, -mappletvos-version-min= diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 6485942..532d778 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3950,7 +3950,7 @@ def module_file_info : Flag<["-"], "module-file-info">, Flags<[NoXarchOption,CC1 HelpText<"Provide information about a particular module file">; def mthumb : Flag<["-"], "mthumb">, Group; def mtune_EQ : Joined<["-"], "mtune=">, Group, - HelpText<"Only supported on X86 and RISC-V. Otherwise accepted for compatibility with GCC.">; + HelpText<"Only supported on X86, RISC-V and SystemZ. Otherwise accepted for compatibility with GCC.">; def multi__module : Flag<["-"], "multi_module">; def multiply__defined__unused : Separate<["-"], "multiply_defined_unused">; def multiply__defined : Separate<["-"], "multiply_defined">; diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h index d12045c..e4f242e 100644 --- a/clang/lib/Basic/Targets/SystemZ.h +++ b/clang/lib/Basic/Targets/SystemZ.h @@ -123,6 +123,14 @@ public: void fillValidCPUList(SmallVectorImpl &Values) const override; + bool isValidTuneCPUName(StringRef Name) const override { + return isValidCPUName(Name); + } + + void fillValidTuneCPUList(SmallVectorImpl &Values) const override { + fillValidCPUList(Values); + } + bool setCPU(const std::string &Name) override { CPU = Name; ISARevision = getISARevision(CPU); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index b5bfea1..e187fce 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2228,8 +2228,23 @@ void Clang::AddSparcTargetArgs(const ArgList &Args, void Clang::AddSystemZTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const { - bool HasBackchain = Args.hasFlag(options::OPT_mbackchain, - options::OPT_mno_backchain, false); + if (const Arg *A = Args.getLastArg(clang::driver::options::OPT_mtune_EQ)) { + StringRef Name = A->getValue(); + + std::string TuneCPU; + if (Name == "native") + TuneCPU = std::string(llvm::sys::getHostCPUName()); + else + TuneCPU = std::string(Name); + + if (!TuneCPU.empty()) { + CmdArgs.push_back("-tune-cpu"); + CmdArgs.push_back(Args.MakeArgString(TuneCPU)); + } + } + + bool HasBackchain = + Args.hasFlag(options::OPT_mbackchain, options::OPT_mno_backchain, false); bool HasPackedStack = Args.hasFlag(options::OPT_mpacked_stack, options::OPT_mno_packed_stack, false); systemz::FloatABI FloatABI = -- 2.7.4