diff options
author | gitoleg <forown@yandex.ru> | 2025-08-07 20:12:58 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-07 10:12:58 -0700 |
commit | d97f0e93642722380be9ed190c17ea895817c339 (patch) | |
tree | 44bf7524ed96ca246d40bd7340b2427d1105dc03 /clang/lib/CIR/CodeGen/CIRGenModule.cpp | |
parent | ad3196d7595dd53c4021b4bf4cd7bcefd85853df (diff) | |
download | llvm-d97f0e93642722380be9ed190c17ea895817c339.zip llvm-d97f0e93642722380be9ed190c17ea895817c339.tar.gz llvm-d97f0e93642722380be9ed190c17ea895817c339.tar.bz2 |
[CIR] add support for file scope assembly (#152093)
This PR adds a support for file scope assembly in CIR.
Diffstat (limited to 'clang/lib/CIR/CodeGen/CIRGenModule.cpp')
-rw-r--r-- | clang/lib/CIR/CodeGen/CIRGenModule.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.cpp b/clang/lib/CIR/CodeGen/CIRGenModule.cpp index 425250d..ff6d293 100644 --- a/clang/lib/CIR/CodeGen/CIRGenModule.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenModule.cpp @@ -1365,6 +1365,21 @@ void CIRGenModule::emitTopLevelDecl(Decl *decl) { assert(!cir::MissingFeatures::generateDebugInfo()); assert(!cir::MissingFeatures::cxxRecordStaticMembers()); break; + + case Decl::FileScopeAsm: + // File-scope asm is ignored during device-side CUDA compilation. + if (langOpts.CUDA && langOpts.CUDAIsDevice) + break; + // File-scope asm is ignored during device-side OpenMP compilation. + if (langOpts.OpenMPIsTargetDevice) + break; + // File-scope asm is ignored during device-side SYCL compilation. + if (langOpts.SYCLIsDevice) + break; + auto *file_asm = cast<FileScopeAsmDecl>(decl); + std::string line = file_asm->getAsmString(); + globalScopeAsm.push_back(builder.getStringAttr(line)); + break; } } @@ -1978,6 +1993,9 @@ void CIRGenModule::release() { emitDeferred(); applyReplacements(); + theModule->setAttr(cir::CIRDialect::getModuleLevelAsmAttrName(), + builder.getArrayAttr(globalScopeAsm)); + // There's a lot of code that is not implemented yet. assert(!cir::MissingFeatures::cgmRelease()); } |