forked from OSchip/llvm-project
[CUDA][HIP] Emit dependent libs for host only
Recently D60274 was introduced to allow lld to handle dependent libs. However current usage of dependent libs (e.g. pragma comment(lib, *) in windows header files) are intended for host only. Emitting the metadata in device IR causes link error in device path. Until there is a way to different it dependent libs for device or host, metadata for dependent libs should be emitted for host only. This patch enforces that. Differential Revision: https://reviews.llvm.org/D62483 llvm-svn: 361880
This commit is contained in:
parent
fe23ed2c68
commit
02afe4e077
|
@ -457,7 +457,12 @@ void CodeGenModule::Release() {
|
|||
// that ELF linkers tend to handle libraries in a more complicated fashion
|
||||
// than on other platforms. This forces us to defer handling the dependent
|
||||
// libs to the linker.
|
||||
if (!ELFDependentLibraries.empty()) {
|
||||
//
|
||||
// CUDA/HIP device and host libraries are different. Currently there is no
|
||||
// way to differentiate dependent libraries for host or device. Existing
|
||||
// usage of #pragma comment(lib, *) is intended for host libraries on
|
||||
// Windows. Therefore emit llvm.dependent-libraries only for host.
|
||||
if (!ELFDependentLibraries.empty() && !Context.getLangOpts().CUDAIsDevice) {
|
||||
auto *NMD = getModule().getOrInsertNamedMetadata("llvm.dependent-libraries");
|
||||
for (auto *MD : ELFDependentLibraries)
|
||||
NMD->addOperand(MD);
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -o - -fcuda-is-device -x hip %s | FileCheck --check-prefix=DEV %s
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -x hip %s | FileCheck --check-prefix=HOST %s
|
||||
|
||||
// DEV-NOT: llvm.dependent-libraries
|
||||
// HOST: llvm.dependent-libraries
|
||||
#pragma comment(lib, "libabc")
|
Loading…
Reference in New Issue