Skip to content

Commit

Permalink
[SystemZ] Enable -mtune= option in clang.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
redstar committed Jul 13, 2022
1 parent 6589729 commit 880eb83
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 4 deletions.
2 changes: 1 addition & 1 deletion clang/docs/ClangCommandLineReference.rst
Expand Up @@ -3325,7 +3325,7 @@ Specify bit size of immediate TLS offsets (AArch64 ELF only): 12 (for 4KB) \| 24
.. option:: -mtune=<arg>
.. 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=<arg>, -mappletvos-version-min=<arg>

Expand Down
2 changes: 1 addition & 1 deletion clang/include/clang/Driver/Options.td
Expand Up @@ -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<m_Group>;
def mtune_EQ : Joined<["-"], "mtune=">, Group<m_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">;
Expand Down
8 changes: 8 additions & 0 deletions clang/lib/Basic/Targets/SystemZ.h
Expand Up @@ -123,6 +123,14 @@ class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo {

void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override;

bool isValidTuneCPUName(StringRef Name) const override {
return isValidCPUName(Name);
}

void fillValidTuneCPUList(SmallVectorImpl<StringRef> &Values) const override {
fillValidCPUList(Values);
}

bool setCPU(const std::string &Name) override {
CPU = Name;
ISARevision = getISARevision(CPU);
Expand Down
19 changes: 17 additions & 2 deletions clang/lib/Driver/ToolChains/Clang.cpp
Expand Up @@ -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 =
Expand Down

0 comments on commit 880eb83

Please sign in to comment.