[cuda] treat file scope __asm as __host__ and ignore it during device-side compilation.
Currently clang emits file-scope asm during *both* host and device compilation modes which is usually a wrong thing to do. There's no way to attach any attribute to an __asm statement, so there's no way to differentiate between host-side and device-side file-scope asm. This patch makes clang to match nvcc behavior and emit file-scope-asm only during host-side compilation. Differential Revision: http://reviews.llvm.org/D9270 llvm-svn: 235905
This commit is contained in:
parent
fd8a75d730
commit
0488d1e4ba
|
@ -3356,6 +3356,9 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
|
|||
break;
|
||||
|
||||
case Decl::FileScopeAsm: {
|
||||
// File-scope asm is ignored during device-side CUDA compilation.
|
||||
if (LangOpts.CUDA && LangOpts.CUDAIsDevice)
|
||||
break;
|
||||
auto *AD = cast<FileScopeAsmDecl>(D);
|
||||
getModule().appendModuleInlineAsm(AD->getAsmString()->getString());
|
||||
break;
|
||||
|
|
|
@ -3,6 +3,12 @@
|
|||
|
||||
#include "Inputs/cuda.h"
|
||||
|
||||
// This has to be at the top of the file as that's where file-scope
|
||||
// asm ends up.
|
||||
// CHECK-HOST: module asm "file scope asm is host only"
|
||||
// CHECK-DEVICE-NOT: module asm "file scope asm is host only"
|
||||
__asm__("file scope asm is host only");
|
||||
|
||||
// CHECK-HOST-NOT: constantdata = global
|
||||
// CHECK-DEVICE: constantdata = global
|
||||
__constant__ char constantdata[256];
|
||||
|
|
Loading…
Reference in New Issue