From d64ee86a3130f8eeb75d09193c38c621d7565eba Mon Sep 17 00:00:00 2001 From: Yong He Date: Sun, 26 Mar 2023 13:59:11 -0700 Subject: Add PyTorch C++ binding generation. (#2734) * Add PyTorch C++ binding generation. * fix --------- Co-authored-by: Yong He --- source/slang/slang-lower-to-ir.cpp | 94 ++++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 39 deletions(-) (limited to 'source/slang/slang-lower-to-ir.cpp') 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()) + for (auto modifier : decl->modifiers) { - builder->addPublicDecoration(inst); - builder->addKeepAliveDecoration(inst); - } - if (decl->findModifier()) - { - builder->addHLSLExportDecoration(inst); - builder->addKeepAliveDecoration(inst); - } - if (decl->findModifier()) - { - builder->addExternCppDecoration(inst, mangledName); + if (as(modifier)) + { + builder->addPublicDecoration(inst); + builder->addKeepAliveDecoration(inst); + } + else if (as(modifier)) + { + builder->addHLSLExportDecoration(inst); + builder->addKeepAliveDecoration(inst); + } + else if (as(modifier)) + { + builder->addExternCppDecoration(inst, mangledName); + } + else if (auto dllImportModifier = as(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(modifier)) + { + builder->addDllExportDecoration(inst, decl->getName()->text.getUnownedSlice()); + builder->addPublicDecoration(inst); + } + else if (as(modifier)) + { + builder->addCudaDeviceExportDecoration(inst, decl->getName()->text.getUnownedSlice()); + builder->addPublicDecoration(inst); + builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice()); + } + else if (as(modifier)) + { + builder->addCudaHostDecoration(inst); + builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice()); + } + else if (as(modifier)) + { + builder->addCudaKernelDecoration(inst); + builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice()); + builder->addPublicDecoration(inst); + builder->addKeepAliveDecoration(inst); + } + else if (as(modifier)) + { + builder->addTorchEntryPointDecoration(inst, decl->getName()->text.getUnownedSlice()); + builder->addCudaHostDecoration(inst); + builder->addPublicDecoration(inst); + builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice()); + } } if (as(decl->parentDecl) && - decl->parentDecl->hasModifier()) + decl->parentDecl->hasModifier() && + !inst->findDecoration()) { builder->addExternCppDecoration(inst, decl->getName()->text.getUnownedSlice()); } - if (auto dllImportModifier = decl->findModifier()) - { - 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()) - { - builder->addDllExportDecoration(inst, decl->getName()->text.getUnownedSlice()); - builder->addPublicDecoration(inst); - } - if (decl->findModifier()) - { - builder->addCudaDeviceExportDecoration(inst, decl->getName()->text.getUnownedSlice()); - builder->addPublicDecoration(inst); - } - if (decl->findModifier()) - { - builder->addCudaHostDecoration(inst); - } - if (decl->findModifier()) - { - builder->addCudaKernelDecoration(inst); - } } static void addLinkageDecoration( -- cgit v1.2.3