summaryrefslogtreecommitdiff
path: root/source/slang/slang-lower-to-ir.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-03-26 13:59:11 -0700
committerGitHub <noreply@github.com>2023-03-26 13:59:11 -0700
commitd64ee86a3130f8eeb75d09193c38c621d7565eba (patch)
treefed25a0cc2a7372d26175774f5983bed693e6b64 /source/slang/slang-lower-to-ir.cpp
parent666af0962b6ab41489a3a3287db83f77c2f6461a (diff)
Add PyTorch C++ binding generation. (#2734)
* Add PyTorch C++ binding generation. * fix --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
-rw-r--r--source/slang/slang-lower-to-ir.cpp94
1 files changed, 55 insertions, 39 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index 7144b3450..9d424d1e8 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -1150,51 +1150,67 @@ static void addLinkageDecoration(
{
builder->addExportDecoration(inst, mangledName);
}
- if (decl->findModifier<PublicModifier>())
+ for (auto modifier : decl->modifiers)
{
- builder->addPublicDecoration(inst);
- builder->addKeepAliveDecoration(inst);
- }
- if (decl->findModifier<HLSLExportModifier>())
- {
- builder->addHLSLExportDecoration(inst);
- builder->addKeepAliveDecoration(inst);
- }
- if (decl->findModifier<ExternCppModifier>())
- {
- builder->addExternCppDecoration(inst, mangledName);
+ if (as<PublicModifier>(modifier))
+ {
+ builder->addPublicDecoration(inst);
+ builder->addKeepAliveDecoration(inst);
+ }
+ else if (as<HLSLExportModifier>(modifier))
+ {
+ builder->addHLSLExportDecoration(inst);
+ builder->addKeepAliveDecoration(inst);
+ }
+ else if (as<ExternCppModifier>(modifier))
+ {
+ builder->addExternCppDecoration(inst, mangledName);
+ }
+ else if (auto dllImportModifier = as<DllImportAttribute>(modifier))
+ {
+ auto libraryName = dllImportModifier->modulePath;
+ auto functionName = dllImportModifier->functionName.getLength()
+ ? dllImportModifier->functionName.getUnownedSlice()
+ : decl->getName()->text.getUnownedSlice();
+ builder->addDllImportDecoration(inst, libraryName.getUnownedSlice(), functionName);
+ }
+ else if (as<DllExportAttribute>(modifier))
+ {
+ builder->addDllExportDecoration(inst, decl->getName()->text.getUnownedSlice());
+ builder->addPublicDecoration(inst);
+ }
+ else if (as<CudaDeviceExportAttribute>(modifier))
+ {
+ builder->addCudaDeviceExportDecoration(inst, decl->getName()->text.getUnownedSlice());
+ builder->addPublicDecoration(inst);
+ builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice());
+ }
+ else if (as<CudaHostAttribute>(modifier))
+ {
+ builder->addCudaHostDecoration(inst);
+ builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice());
+ }
+ else if (as<CudaKernelAttribute>(modifier))
+ {
+ builder->addCudaKernelDecoration(inst);
+ builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice());
+ builder->addPublicDecoration(inst);
+ builder->addKeepAliveDecoration(inst);
+ }
+ else if (as<TorchEntryPointAttribute>(modifier))
+ {
+ builder->addTorchEntryPointDecoration(inst, decl->getName()->text.getUnownedSlice());
+ builder->addCudaHostDecoration(inst);
+ builder->addPublicDecoration(inst);
+ builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice());
+ }
}
if (as<InterfaceDecl>(decl->parentDecl) &&
- decl->parentDecl->hasModifier<ComInterfaceAttribute>())
+ decl->parentDecl->hasModifier<ComInterfaceAttribute>() &&
+ !inst->findDecoration<IRExternCppDecoration>())
{
builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice());
}
- if (auto dllImportModifier = decl->findModifier<DllImportAttribute>())
- {
- auto libraryName = dllImportModifier->modulePath;
- auto functionName = dllImportModifier->functionName.getLength()
- ? dllImportModifier->functionName.getUnownedSlice()
- : decl->getName()->text.getUnownedSlice();
- builder->addDllImportDecoration(inst, libraryName.getUnownedSlice(), functionName);
- }
- if (decl->findModifier<DllExportAttribute>())
- {
- builder->addDllExportDecoration(inst, decl->getName()->text.getUnownedSlice());
- builder->addPublicDecoration(inst);
- }
- if (decl->findModifier<CudaDeviceExportAttribute>())
- {
- builder->addCudaDeviceExportDecoration(inst, decl->getName()->text.getUnownedSlice());
- builder->addPublicDecoration(inst);
- }
- if (decl->findModifier<CudaHostAttribute>())
- {
- builder->addCudaHostDecoration(inst);
- }
- if (decl->findModifier<CudaKernelAttribute>())
- {
- builder->addCudaKernelDecoration(inst);
- }
}
static void addLinkageDecoration(