Author: aaronenyeshi Date: Tue Apr 2 13:10:18 2019 New Revision: 357520 URL: http://llvm.org/viewvc/llvm-project?rev=357520&view=rev Log: [HIP-Clang] Fat binary should not be produced for non GPU code
Skip producing the fat binary functions for HIP when no device code is present. Reviewers: yaxunl Differential Review: https://reviews.llvm.org/D60141 Modified: cfe/trunk/lib/CodeGen/CGCUDANV.cpp cfe/trunk/test/CodeGenCUDA/device-stub.cu Modified: cfe/trunk/lib/CodeGen/CGCUDANV.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCUDANV.cpp?rev=357520&r1=357519&r2=357520&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGCUDANV.cpp (original) +++ cfe/trunk/lib/CodeGen/CGCUDANV.cpp Tue Apr 2 13:10:18 2019 @@ -472,6 +472,8 @@ llvm::Function *CGNVCUDARuntime::makeMod StringRef CudaGpuBinaryFileName = CGM.getCodeGenOpts().CudaGpuBinaryFileName; if (CudaGpuBinaryFileName.empty() && !IsHIP) return nullptr; + if (IsHIP && EmittedKernels.empty() && DeviceVars.empty()) + return nullptr; // void __{cuda|hip}_register_globals(void* handle); llvm::Function *RegisterGlobalsFunc = makeRegisterGlobalsFn(); Modified: cfe/trunk/test/CodeGenCUDA/device-stub.cu URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCUDA/device-stub.cu?rev=357520&r1=357519&r2=357520&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCUDA/device-stub.cu (original) +++ cfe/trunk/test/CodeGenCUDA/device-stub.cu Tue Apr 2 13:10:18 2019 @@ -228,13 +228,19 @@ void hostfunc(void) { kernelfunc<<<1, 1> // device-side globals, but we still need to register GPU binary. // Skip GPU binary string first. // CUDANOGLOBALS: @{{.*}} = private constant{{.*}} -// HIPNOGLOBALS: @{{.*}} = internal constant{{.*}} +// HIPNOGLOBALS-NOT: @{{.*}} = internal constant{{.*}} // NOGLOBALS-NOT: define internal void @__{{.*}}_register_globals -// NOGLOBALS: define internal void @__[[PREFIX:cuda|hip]]_module_ctor -// NOGLOBALS: call{{.*}}[[PREFIX]]RegisterFatBinary{{.*}}__[[PREFIX]]_fatbin_wrapper +// CUDANOGLOBALS: define internal void @__[[PREFIX:cuda|hip]]_module_ctor +// CUDANOGLOBALS: call{{.*}}[[PREFIX]]RegisterFatBinary{{.*}}__[[PREFIX]]_fatbin_wrapper // NOGLOBALS-NOT: call void @__[[PREFIX]]_register_globals -// NOGLOBALS: define internal void @__[[PREFIX]]_module_dtor -// NOGLOBALS: call void @__[[PREFIX]]UnregisterFatBinary +// CUDANOGLOBALS: define internal void @__[[PREFIX]]_module_dtor +// CUDANOGLOBALS: call void @__[[PREFIX]]UnregisterFatBinary + +// There should be no fat binary functions when no device-code is found for HIP. +// HIPNOGLOBALS-NOT: define internal void @__[[PREFIX:cuda|hip]]_module_ctor +// HIPNOGLOBALS-NOT: call{{.*}}[[PREFIX]]RegisterFatBinary{{.*}}__[[PREFIX]]_fatbin_wrapper +// HIPNOGLOBALS-NOT: define internal void @__[[PREFIX]]_module_dtor +// HIPNOGLOBALS-NOT: call void @__[[PREFIX]]UnregisterFatBinary // There should be no constructors/destructors if we have no GPU binary. // NOGPUBIN-NOT: define internal void @__[[PREFIX]]_register_globals _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits