diff options
author | Simon Dardis <simon.dardis@imgtec.com> | 2017-07-19 10:38:03 +0000 |
---|---|---|
committer | Simon Dardis <simon.dardis@imgtec.com> | 2017-07-19 10:38:03 +0000 |
commit | fbee01299238342c5bd82bcf90b8e0dfc283be4d (patch) | |
tree | c6be7f17de9a51efe5a25494e358aa50c9bf5ded /lib | |
parent | 29ed0a05e2fe320ac01b5371c404b4c59541690d (diff) |
[mips] Teach the driver to accept -m(no-)gpopt.
This patch teaches the driver to pass -mgpopt by default to the backend when it
is supported, i.e. we are using -mno-abicalls.
Reviewers: atanasyan, slthakur
Differential Revision: https://reviews.llvm.org/D35548
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@308431 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Driver/ToolChains/Clang.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/Driver/ToolChains/Clang.cpp b/lib/Driver/ToolChains/Clang.cpp index b82cc2d4fa..7f2e64cbf8 100644 --- a/lib/Driver/ToolChains/Clang.cpp +++ b/lib/Driver/ToolChains/Clang.cpp @@ -1462,6 +1462,32 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args, A->claim(); } + Arg *GPOpt = Args.getLastArg(options::OPT_mgpopt, options::OPT_mno_gpopt); + Arg *ABICalls = Args.getLastArg(options::OPT_mabicalls, options::OPT_mno_abicalls); + + // -mabicalls is the default for many MIPS environments, even with -fno-pic. + // -mgpopt is the default for static, -fno-pic environments but these two + // options conflict. We want to be certain that -mno-abicalls -mgpopt is + // the only case where -mllvm -mgpopt is passed. + // NOTE: We need a warning here or in the backend to warn when -mgpopt is + // passed explicitly when compiling something with -mabicalls + // (implictly) in affect. Currently the warning is in the backend. + bool NoABICalls = + ABICalls && ABICalls->getOption().matches(options::OPT_mno_abicalls); + bool WantGPOpt = GPOpt && GPOpt->getOption().matches(options::OPT_mgpopt); + if (NoABICalls && (!GPOpt || WantGPOpt)) { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-mgpopt=1"); + } else { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-mgpopt=0"); + if ((!ABICalls || (!NoABICalls && ABICalls)) && (!GPOpt || WantGPOpt)) + D.Diag(diag::warn_drv_unsupported_gpopt) << (ABICalls ? 0 : 1); + } + + if (GPOpt) + GPOpt->claim(); + if (Arg *A = Args.getLastArg(options::OPT_mcompact_branches_EQ)) { StringRef Val = StringRef(A->getValue()); if (mips::hasCompactBranches(CPUName)) { |