Author: Joseph Huber Date: 2022-01-28T18:22:17-05:00 New Revision: 24f88f57de588817bd21e799e2ac1069c025674c
URL: https://github.com/llvm/llvm-project/commit/24f88f57de588817bd21e799e2ac1069c025674c DIFF: https://github.com/llvm/llvm-project/commit/24f88f57de588817bd21e799e2ac1069c025674c.diff LOG: [OpenMP] Accept shortened triples for -Xopenmp-target= This patch builds on the change in D117634 that expanded the short triples when passed in by the user. This patch adds the same functionality for the `-Xopenmp-target=` flag. Previously it was unintuitive that passing `-fopenmp-targets=nvptx64 -Xopenmp-target=nvptx64 <arg>` would not forward the arg because the triples did not match on account of `nvptx64` being expanded to `nvptx64-nvidia-cuda`. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D118495 Added: Modified: clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/ToolChain.cpp clang/test/Driver/openmp-offload-gpu.c Removed: ################################################################################ diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index 329833bb13be..7cd6a5fd3777 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -711,6 +711,22 @@ class ToolChain { const llvm::fltSemantics *FPType = nullptr) const { return llvm::DenormalMode::getIEEE(); } + + // We want to expand the shortened versions of the triples passed in to + // the values used for the bitcode libraries. + static llvm::Triple getOpenMPTriple(StringRef TripleStr) { + llvm::Triple TT(TripleStr); + if (TT.getVendor() == llvm::Triple::UnknownVendor || + TT.getOS() == llvm::Triple::UnknownOS) { + if (TT.getArch() == llvm::Triple::nvptx) + return llvm::Triple("nvptx-nvidia-cuda"); + if (TT.getArch() == llvm::Triple::nvptx64) + return llvm::Triple("nvptx64-nvidia-cuda"); + if (TT.getArch() == llvm::Triple::amdgcn) + return llvm::Triple("amdgcn-amd-amdhsa"); + } + return TT; + } }; /// Set a ToolChain's effective triple. Reset it when the registration object diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 61c2289f83e9..054f7d415539 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -792,21 +792,9 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, if (HasValidOpenMPRuntime) { llvm::StringMap<const char *> FoundNormalizedTriples; for (const char *Val : OpenMPTargets->getValues()) { - llvm::Triple TT(Val); + llvm::Triple TT(ToolChain::getOpenMPTriple(Val)); std::string NormalizedName = TT.normalize(); - // We want to expand the shortened versions of the triples passed in to - // the values used for the bitcode libraries for convenience. - if (TT.getVendor() == llvm::Triple::UnknownVendor || - TT.getOS() == llvm::Triple::UnknownOS) { - if (TT.getArch() == llvm::Triple::nvptx) - TT = llvm::Triple("nvptx-nvidia-cuda"); - else if (TT.getArch() == llvm::Triple::nvptx64) - TT = llvm::Triple("nvptx64-nvidia-cuda"); - else if (TT.getArch() == llvm::Triple::amdgcn) - TT = llvm::Triple("amdgcn-amd-amdhsa"); - } - // Make sure we don't have a duplicate triple. auto Duplicate = FoundNormalizedTriples.find(NormalizedName); if (Duplicate != FoundNormalizedTriples.end()) { diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 5fef1fb2ee5a..3c13f1b1cacb 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -1129,8 +1129,10 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOpenMPTargetArgs( A->getOption().matches(options::OPT_Xopenmp_target); if (A->getOption().matches(options::OPT_Xopenmp_target_EQ)) { + llvm::Triple TT(getOpenMPTriple(A->getValue(0))); + // Passing device args: -Xopenmp-target=<triple> -opt=val. - if (A->getValue(0) == getTripleString()) + if (TT.getTriple() == getTripleString()) Index = Args.getBaseArgs().MakeIndex(A->getValue(1)); else continue; diff --git a/clang/test/Driver/openmp-offload-gpu.c b/clang/test/Driver/openmp-offload-gpu.c index 525ee465d246..3d523e4b69e4 100644 --- a/clang/test/Driver/openmp-offload-gpu.c +++ b/clang/test/Driver/openmp-offload-gpu.c @@ -343,3 +343,10 @@ // RUN: | FileCheck -check-prefix=SAVE_TEMPS_NAMES %s // SAVE_TEMPS_NAMES-NOT: "GNU::Linker"{{.*}}["[[SAVE_TEMPS_INPUT1:.*\.o]]", "[[SAVE_TEMPS_INPUT1]]"] + +// RUN: %clang -### -fopenmp=libomp -fopenmp-targets=nvptx64 -Xopenmp-target=nvptx64 -march=sm_35 \ +// RUN: -save-temps -no-canonical-prefixes %s -o openmp-offload-gpu 2>&1 \ +// RUN: | FileCheck -check-prefix=TRIPLE %s + +// TRIPLE: "-triple" "nvptx64-nvidia-cuda" +// TRIPLE: "-target-cpu" "sm_35" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits