forked from OSchip/llvm-project
[CUDA][HIP] Disable emitting llvm.linker.options in device compilation
The linker options (e.g. pragma detect_mismatch) are intended for host compilation only, therefore disable it for device compilation. Differential Revision: https://reviews.llvm.org/D57829
This commit is contained in:
parent
fff2721286
commit
4264e7bbfd
|
@ -378,15 +378,20 @@ static void addExceptionArgs(const ArgList &Args, types::ID InputType,
|
|||
CmdArgs.push_back("-fexceptions");
|
||||
}
|
||||
|
||||
static bool ShouldDisableAutolink(const ArgList &Args, const ToolChain &TC) {
|
||||
static bool ShouldEnableAutolink(const ArgList &Args, const ToolChain &TC,
|
||||
const JobAction &JA) {
|
||||
bool Default = true;
|
||||
if (TC.getTriple().isOSDarwin()) {
|
||||
// The native darwin assembler doesn't support the linker_option directives,
|
||||
// so we disable them if we think the .s file will be passed to it.
|
||||
Default = TC.useIntegratedAs();
|
||||
}
|
||||
return !Args.hasFlag(options::OPT_fautolink, options::OPT_fno_autolink,
|
||||
Default);
|
||||
// The linker_option directives are intended for host compilation.
|
||||
if (JA.isDeviceOffloading(Action::OFK_Cuda) ||
|
||||
JA.isDeviceOffloading(Action::OFK_HIP))
|
||||
Default = false;
|
||||
return Args.hasFlag(options::OPT_fautolink, options::OPT_fno_autolink,
|
||||
Default);
|
||||
}
|
||||
|
||||
static bool ShouldDisableDwarfDirectory(const ArgList &Args,
|
||||
|
@ -4391,7 +4396,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
if (ShouldDisableDwarfDirectory(Args, TC))
|
||||
CmdArgs.push_back("-fno-dwarf-directory-asm");
|
||||
|
||||
if (ShouldDisableAutolink(Args, TC))
|
||||
if (!ShouldEnableAutolink(Args, TC, JA))
|
||||
CmdArgs.push_back("-fno-autolink");
|
||||
|
||||
// Add in -fdebug-compilation-dir if necessary.
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -o - -fcuda-is-device -fms-extensions -x hip %s \
|
||||
// RUN: -fno-autolink -triple amdgcn-amd-amdhsa \
|
||||
// RUN: | FileCheck -check-prefix=DEV %s
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -fms-extensions -x hip %s -triple \
|
||||
// RUN: x86_64-pc-windows-msvc | FileCheck -check-prefix=HOST %s
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -fcuda-is-device -fms-extensions %s \
|
||||
// RUN: -fno-autolink -triple amdgcn-amd-amdhsa \
|
||||
// RUN: | FileCheck -check-prefix=DEV %s
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -fms-extensions %s -triple \
|
||||
// RUN: x86_64-pc-windows-msvc | FileCheck -check-prefix=HOST %s
|
||||
|
||||
// DEV-NOT: llvm.linker.options
|
||||
// DEV-NOT: llvm.dependent-libraries
|
||||
// HOST: lvm.linker.options
|
||||
// HOST: "/DEFAULTLIB:libcpmt.lib"
|
||||
// HOST: "/FAILIFMISMATCH:\22myLib_version=9\22"
|
||||
|
||||
#pragma comment(lib, "libcpmt")
|
||||
#pragma detect_mismatch("myLib_version", "9")
|
|
@ -0,0 +1,14 @@
|
|||
// REQUIRES: clang-driver
|
||||
// REQUIRES: x86-registered-target
|
||||
// REQUIRES: amdgpu-registered-target
|
||||
//
|
||||
// RUN: %clang --target=i386-pc-windows-msvc --cuda-gpu-arch=gfx906 -nogpulib \
|
||||
// RUN: --cuda-device-only -x hip %s -### 2>&1 | FileCheck --check-prefix=DEV %s
|
||||
// RUN: %clang --target=i386-pc-windows-msvc --cuda-gpu-arch=gfx906 -nogpulib \
|
||||
// RUN: --cuda-host-only -x hip %s -### 2>&1 | FileCheck --check-prefix=HOST %s
|
||||
|
||||
// DEV: "-cc1" "-triple" "amdgcn-amd-amdhsa"
|
||||
// DEV-SAME: "-fno-autolink"
|
||||
|
||||
// HOST: "-cc1" "-triple" "i386-pc-windows-msvc{{.*}}"
|
||||
// HOST-NOT: "-fno-autolink"
|
Loading…
Reference in New Issue