saiislam created this revision. saiislam added reviewers: jhuber6, yaxunl. Herald added subscribers: tpr, dstuttard, kzhuravl. Herald added a project: All. saiislam requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, wdng. Herald added a project: clang.
-mcode-object-version=none is a special argument which allows abi-agnostic code to be generated for device runtime libraries. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D156928 Files: clang/include/clang/Basic/TargetOptions.h clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp =================================================================== --- clang/lib/Driver/ToolChains/CommonArgs.cpp +++ clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -25,6 +25,7 @@ #include "clang/Basic/CharInfo.h" #include "clang/Basic/LangOptions.h" #include "clang/Basic/ObjCRuntime.h" +#include "clang/Basic/TargetOptions.h" #include "clang/Basic/Version.h" #include "clang/Config/config.h" #include "clang/Driver/Action.h" @@ -2299,16 +2300,16 @@ void tools::checkAMDGPUCodeObjectVersion(const Driver &D, const llvm::opt::ArgList &Args) { - const unsigned MinCodeObjVer = 2; - const unsigned MaxCodeObjVer = 5; if (auto *CodeObjArg = getAMDGPUCodeObjectArgument(D, Args)) { if (CodeObjArg->getOption().getID() == options::OPT_mcode_object_version_EQ) { - unsigned CodeObjVer = MaxCodeObjVer; - auto Remnant = - StringRef(CodeObjArg->getValue()).getAsInteger(0, CodeObjVer); - if (Remnant || CodeObjVer < MinCodeObjVer || CodeObjVer > MaxCodeObjVer) + unsigned CodeObjVer = TargetOptions::COV_Default / 100; + auto CovStr = StringRef(CodeObjArg->getValue()); + if(CovStr.starts_with("none")) return; + + CovStr.getAsInteger(0, CodeObjVer); + if (CodeObjVer < TargetOptions::COV_None || CodeObjVer > TargetOptions::COV_MAX) D.Diag(diag::err_drv_invalid_int_value) << CodeObjArg->getAsString(Args) << CodeObjArg->getValue(); } @@ -2317,9 +2318,13 @@ unsigned tools::getAMDGPUCodeObjectVersion(const Driver &D, const llvm::opt::ArgList &Args) { - unsigned CodeObjVer = 4; // default - if (auto *CodeObjArg = getAMDGPUCodeObjectArgument(D, Args)) - StringRef(CodeObjArg->getValue()).getAsInteger(0, CodeObjVer); + + unsigned CodeObjVer = TargetOptions::COV_Default / 100; // default + if (haveAMDGPUCodeObjectVersionArgument(D, Args)) { + auto CodeObjArg = StringRef(getAMDGPUCodeObjectArgument(D, Args)->getValue()); + if(CodeObjArg.starts_with("none")) return TargetOptions::COV_None; + CodeObjArg.getAsInteger(0, CodeObjVer); + } return CodeObjVer; } Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -1055,15 +1055,19 @@ // provided the user (e.g. front end tests) can use the default. if (haveAMDGPUCodeObjectVersionArgument(D, Args)) { unsigned CodeObjVer = getAMDGPUCodeObjectVersion(D, Args); + if(CodeObjVer != 0) { CmdArgs.insert(CmdArgs.begin() + 1, Args.MakeArgString(Twine("--amdhsa-code-object-version=") + Twine(CodeObjVer))); CmdArgs.insert(CmdArgs.begin() + 1, "-mllvm"); + } // -cc1as does not accept -mcode-object-version option. - if (!IsCC1As) + if (!IsCC1As) { + std::string CodeObjVerStr = (CodeObjVer ? Twine(CodeObjVer) : "none").str(); CmdArgs.insert(CmdArgs.begin() + 1, Args.MakeArgString(Twine("-mcode-object-version=") + - Twine(CodeObjVer))); + CodeObjVerStr)); + } } } Index: clang/lib/Driver/ToolChain.cpp =================================================================== --- clang/lib/Driver/ToolChain.cpp +++ clang/lib/Driver/ToolChain.cpp @@ -1354,6 +1354,9 @@ // Handle -Xopenmp-target flags for (auto *A : Args) { + if (A->getOption().matches(options::OPT_mcode_object_version_EQ)) + DAL->append(A); + // Exclude flags which may only apply to the host toolchain. // Do not exclude flags when the host triple (AuxTriple) // matches the current toolchain triple. If it is not present Index: clang/include/clang/Basic/TargetOptions.h =================================================================== --- clang/include/clang/Basic/TargetOptions.h +++ clang/include/clang/Basic/TargetOptions.h @@ -86,6 +86,8 @@ COV_3 = 300, COV_4 = 400, COV_5 = 500, + COV_Default = 400, + COV_MAX = 500 }; /// \brief Code object version for AMDGPU. CodeObjectVersionKind CodeObjectVersion = CodeObjectVersionKind::COV_None;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits