diff options
| author | Yong He <yonghe@outlook.com> | 2023-03-26 13:59:11 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-26 13:59:11 -0700 |
| commit | d64ee86a3130f8eeb75d09193c38c621d7565eba (patch) | |
| tree | fed25a0cc2a7372d26175774f5983bed693e6b64 /source/slang/slang-lower-to-ir.cpp | |
| parent | 666af0962b6ab41489a3a3287db83f77c2f6461a (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.cpp | 94 |
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( |
