jhuber6 created this revision. jhuber6 added a reviewer: tra. Herald added subscribers: mattd, yaxunl. Herald added a project: All. jhuber6 requested review of this revision. Herald added subscribers: cfe-commits, MaskRay. Herald added a project: clang.
When performing device only compilation, there was an issue where `cubin` outputs were being renamed to `cubin` despite the user's name. This is required in a normal compilation flow as the Nvidia tools only understand specific filenames instead of checking magic bytes for some unknown reason. We do not want to perform this transformation when the user is performing device only compilation. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D131278 Files: clang/lib/Driver/ToolChains/Cuda.cpp clang/test/Driver/cuda-bindings.cu Index: clang/test/Driver/cuda-bindings.cu =================================================================== --- clang/test/Driver/cuda-bindings.cu +++ clang/test/Driver/cuda-bindings.cu @@ -135,3 +135,14 @@ // RUN: | FileCheck -check-prefix=DASM2 %s // DASM2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.s" // DASM2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_35.s" + +// +// Ensure we output the user's specified name in device-only mode. +// +// RUN: %clang -target powerpc64le-ibm-linux-gnu -### \ +// RUN: --cuda-gpu-arch=sm_52 --cuda-device-only -c -o foo.o %s 2>&1 \ +// RUN: | FileCheck -check-prefix=D_ONLY %s +// RUN: %clang -target powerpc64le-ibm-linux-gnu -### --offload-new-driver \ +// RUN: --cuda-gpu-arch=sm_52 --cuda-device-only -c -o foo.o %s 2>&1 \ +// RUN: | FileCheck -check-prefix=D_ONLY %s +// D_ONLY: "foo.o" Index: clang/lib/Driver/ToolChains/Cuda.cpp =================================================================== --- clang/lib/Driver/ToolChains/Cuda.cpp +++ clang/lib/Driver/ToolChains/Cuda.cpp @@ -693,8 +693,8 @@ std::string CudaToolChain::getInputFilename(const InputInfo &Input) const { // Only object files are changed, for example assembly files keep their .s - // extensions. - if (Input.getType() != types::TY_Object) + // extensions. If the user requested device-only compilation don't change it. + if (Input.getType() != types::TY_Object || getDriver().offloadDeviceOnly()) return ToolChain::getInputFilename(Input); // Replace extension for object files with cubin because nvlink relies on
Index: clang/test/Driver/cuda-bindings.cu =================================================================== --- clang/test/Driver/cuda-bindings.cu +++ clang/test/Driver/cuda-bindings.cu @@ -135,3 +135,14 @@ // RUN: | FileCheck -check-prefix=DASM2 %s // DASM2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.s" // DASM2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_35.s" + +// +// Ensure we output the user's specified name in device-only mode. +// +// RUN: %clang -target powerpc64le-ibm-linux-gnu -### \ +// RUN: --cuda-gpu-arch=sm_52 --cuda-device-only -c -o foo.o %s 2>&1 \ +// RUN: | FileCheck -check-prefix=D_ONLY %s +// RUN: %clang -target powerpc64le-ibm-linux-gnu -### --offload-new-driver \ +// RUN: --cuda-gpu-arch=sm_52 --cuda-device-only -c -o foo.o %s 2>&1 \ +// RUN: | FileCheck -check-prefix=D_ONLY %s +// D_ONLY: "foo.o" Index: clang/lib/Driver/ToolChains/Cuda.cpp =================================================================== --- clang/lib/Driver/ToolChains/Cuda.cpp +++ clang/lib/Driver/ToolChains/Cuda.cpp @@ -693,8 +693,8 @@ std::string CudaToolChain::getInputFilename(const InputInfo &Input) const { // Only object files are changed, for example assembly files keep their .s - // extensions. - if (Input.getType() != types::TY_Object) + // extensions. If the user requested device-only compilation don't change it. + if (Input.getType() != types::TY_Object || getDriver().offloadDeviceOnly()) return ToolChain::getInputFilename(Input); // Replace extension for object files with cubin because nvlink relies on
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits