[PATCH] D68284: [HIP] Support -emit-llvm for device compilation
Yaxun Liu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 1 11:17:26 PDT 2019
yaxunl created this revision.
yaxunl added a reviewer: tra.
Sometimes it is useful to compile HIP device code to LLVM BC. It is not convenient to use clang -cc1 since
there are lots of options needed.
This patch allows clang driver to compile HIP device code to LLVM BC with -emit-llvm -c.
https://reviews.llvm.org/D68284
Files:
lib/Driver/Driver.cpp
test/Driver/hip-toolchain-emit-llvm.hip
Index: test/Driver/hip-toolchain-emit-llvm.hip
===================================================================
--- /dev/null
+++ test/Driver/hip-toolchain-emit-llvm.hip
@@ -0,0 +1,26 @@
+// REQUIRES: clang-driver
+// REQUIRES: x86-registered-target
+// REQUIRES: amdgpu-registered-target
+
+// RUN: %clang -c -emit-llvm --cuda-device-only -### -target x86_64-linux-gnu \
+// RUN: -o a.bc -x hip --cuda-gpu-arch=gfx900 \
+// RUN: --hip-device-lib=lib1.bc \
+// RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \
+// RUN: %S/Inputs/hip_multiple_inputs/a.cu \
+// RUN: 2>&1 | FileCheck -check-prefixes=CHECK %s
+
+// CHECK: {{".*clang.*"}} "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
+// CHECK-SAME: "-emit-llvm-bc"
+// CHECK-SAME: "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx900"
+// CHECK-SAME: "-fcuda-is-device"
+// CHECK-SAME: {{".*lib1.bc"}}
+// CHECK-SAME: "-o" "a.bc"
+// CHECK-SAME: {{".*a.cu"}}
+
+// CHECK-NOT: {{"*.llvm-link"}}
+// CHECK-NOT: {{".*opt"}}
+// CHECK-NOT: {{".*llc"}}
+// CHECK-NOT: {{".*lld"}}
+// CHECK-NOT: {{".*clang-offload-bundler"}}
+// CHECK-NOT: {{".*ld.*"}}
Index: lib/Driver/Driver.cpp
===================================================================
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -2314,6 +2314,7 @@
/// compilation.
bool CompileHostOnly = false;
bool CompileDeviceOnly = false;
+ bool EmitLLVM = false;
/// List of GPU architectures to use in this compilation.
SmallVector<CudaArch, 4> GpuArchList;
@@ -2480,6 +2481,8 @@
CompileDeviceOnly = PartialCompilationArg &&
PartialCompilationArg->getOption().matches(
options::OPT_cuda_device_only);
+ EmitLLVM = Args.getLastArg(options::OPT_emit_llvm);
+
// Collect all cuda_gpu_arch parameters, removing duplicates.
std::set<CudaArch> GpuArchs;
@@ -2660,6 +2663,11 @@
CurPhase == phases::Assemble)
return ABRT_Success;
+ if (EmitLLVM &&
+ (CurPhase == phases::Backend || CurPhase == phases::Assemble ||
+ CurPhase == phases::Link))
+ return CompileDeviceOnly ? ABRT_Ignore_Host : ABRT_Success;
+
assert(((CurPhase == phases::Link && Relocatable) ||
CudaDeviceActions.size() == GpuArchList.size()) &&
"Expecting one action per GPU architecture.");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68284.222657.patch
Type: text/x-patch
Size: 2440 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191001/50d52bd7/attachment.bin>
More information about the cfe-commits
mailing list