[PATCH] D117137: [Driver] Add a flag cuda-device-triple

Daniele Castagna via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 12 11:55:42 PST 2022


dcastagna created this revision.
Herald added subscribers: dang, yaxunl.
dcastagna requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This CL adds a flag "cuda-device-triple" to clang driver that can be
used to override the triple passed to the device compilation phase.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D117137

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/Driver.cpp
  clang/test/Driver/cuda-device-triple.cu


Index: clang/test/Driver/cuda-device-triple.cu
===================================================================
--- /dev/null
+++ clang/test/Driver/cuda-device-triple.cu
@@ -0,0 +1,8 @@
+// REQUIRES: clang-driver
+
+// RUN: %clang -### -emit-llvm --cuda-device-only \
+// RUN:   -nocudalib -nocudainc --cuda-device-triple=spirv32-unknown-unknown -c %s 2>&1 | FileCheck %s
+
+// CHECK: clang{{.*}}" "-cc1" "-triple" "spirv32-unknown-unknown" {{.*}} "-fcuda-is-device" {{.*}}
+
+
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -706,8 +706,13 @@
     const llvm::Triple &HostTriple = HostTC->getTriple();
     StringRef DeviceTripleStr;
     auto OFK = Action::OFK_Cuda;
-    DeviceTripleStr =
-        HostTriple.isArch64Bit() ? "nvptx64-nvidia-cuda" : "nvptx-nvidia-cuda";
+    if (auto *CudaOverrideDeviceTriple =
+            C.getInputArgs().getLastArg(options::OPT_cuda_device_triple)) {
+      DeviceTripleStr = CudaOverrideDeviceTriple->getValue();
+    } else {
+      DeviceTripleStr =
+          HostTriple.isArch64Bit() ? "nvptx64-nvidia-cuda" : "nvptx-nvidia-cuda";
+    }
     llvm::Triple CudaTriple(DeviceTripleStr);
     // Use the CUDA and host triples as the key into the ToolChains map,
     // because the device toolchain we create depends on both.
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -921,6 +921,8 @@
            "specified more than once.">;
 def cuda_gpu_arch_EQ : Joined<["--"], "cuda-gpu-arch=">, Flags<[NoXarchOption]>,
   Alias<offload_arch_EQ>;
+def cuda_device_triple: Joined<["--"], "cuda-device-triple=">,
+  HelpText<"Override the triple passed to CUDA device compilation phase">;
 def hip_link : Flag<["--"], "hip-link">,
   HelpText<"Link clang-offload-bundler bundles for HIP">;
 def no_offload_arch_EQ : Joined<["--"], "no-offload-arch=">, Flags<[NoXarchOption]>,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117137.399406.patch
Type: text/x-patch
Size: 2089 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220112/3b6bec65/attachment.bin>


More information about the cfe-commits mailing list