From: Joseph Huber Date: Tue, 28 Jun 2022 19:21:03 +0000 (-0400) Subject: [CUDA] Stop adding CUDA features twice X-Git-Tag: upstream/15.0.7~3169 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=56ab966a04dd22570fcb18276e2409c94e82c571;p=platform%2Fupstream%2Fllvm.git [CUDA] Stop adding CUDA features twice We currently call the `addNVPTXFeatures` function in two places, inside of the CUDA Toolchain and inside of Clang in the standard entry point. We normally add features to the job in Clang, so the call inside of the CUDA toolchain is redundant and results in `+ptx` features being added. Since we remove this call, we no longer will have a cached CUDA installation so we will usually create it twice. Reviewed By: tra Differential Revision: https://reviews.llvm.org/D128752 --- diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 0e87540..5e59677 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -636,23 +636,20 @@ void NVPTX::OpenMPLinker::ConstructJob(Compilation &C, const JobAction &JA, void NVPTX::getNVPTXTargetFeatures(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args, - std::vector &Features, - Optional Version) { + std::vector &Features) { if (Args.hasArg(options::OPT_cuda_feature_EQ)) { StringRef PtxFeature = Args.getLastArgValue(options::OPT_cuda_feature_EQ, "+ptx42"); Features.push_back(Args.MakeArgString(PtxFeature)); return; - } else if (!Version) { - CudaInstallationDetector CudaInstallation(D, Triple, Args); - Version = CudaInstallation.version(); } + CudaInstallationDetector CudaInstallation(D, Triple, Args); // New CUDA versions often introduce new instructions that are only supported // by new PTX version, so we need to raise PTX level to enable them in NVPTX // back-end. const char *PtxFeature = nullptr; - switch (*Version) { + switch (CudaInstallation.version()) { #define CASE_CUDA_VERSION(CUDA_VER, PTX_VER) \ case CudaVersion::CUDA_##CUDA_VER: \ PtxFeature = "+ptx" #PTX_VER; \ @@ -746,11 +743,6 @@ void CudaToolChain::addClangTargetOptions( clang::CudaVersion CudaInstallationVersion = CudaInstallation.version(); - std::vector Features; - NVPTX::getNVPTXTargetFeatures(getDriver(), getTriple(), DriverArgs, Features, - CudaInstallationVersion); - for (StringRef PtxFeature : Features) - CC1Args.append({"-target-feature", DriverArgs.MakeArgString(PtxFeature)}); if (DriverArgs.hasFlag(options::OPT_fcuda_short_ptr, options::OPT_fno_cuda_short_ptr, false)) CC1Args.append({"-mllvm", "--nvptx-short-ptr"}); diff --git a/clang/lib/Driver/ToolChains/Cuda.h b/clang/lib/Driver/ToolChains/Cuda.h index f2517a9..809a252 100644 --- a/clang/lib/Driver/ToolChains/Cuda.h +++ b/clang/lib/Driver/ToolChains/Cuda.h @@ -126,8 +126,7 @@ class LLVM_LIBRARY_VISIBILITY OpenMPLinker : public Tool { void getNVPTXTargetFeatures(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args, - std::vector &Features, - Optional Version = None); + std::vector &Features); } // end namespace NVPTX } // end namespace tools