diff options
| author | Artem Belevich <tra@google.com> | 2015-04-27 18:52:00 +0000 |
|---|---|---|
| committer | Artem Belevich <tra@google.com> | 2015-04-27 18:52:00 +0000 |
| commit | 0488d1e4ba71d364e8f11bd6837a811e32fbf5b1 (patch) | |
| tree | 0cd48efc28bdd8b8e113278654d4a2e2730bd4c2 /clang | |
| parent | fd8a75d73096ebc11d3231cd049c81011af12ecc (diff) | |
| download | bcm5719-llvm-0488d1e4ba71d364e8f11bd6837a811e32fbf5b1.tar.gz bcm5719-llvm-0488d1e4ba71d364e8f11bd6837a811e32fbf5b1.zip | |
[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
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 3 | ||||
| -rw-r--r-- | clang/test/CodeGenCUDA/filter-decl.cu | 6 |
2 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index b30885d4cdb..c517d17666d 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -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; diff --git a/clang/test/CodeGenCUDA/filter-decl.cu b/clang/test/CodeGenCUDA/filter-decl.cu index faaeb69fe1c..e69473f3e84 100644 --- a/clang/test/CodeGenCUDA/filter-decl.cu +++ b/clang/test/CodeGenCUDA/filter-decl.cu @@ -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]; |

