================ @@ -0,0 +1,58 @@ +//===---- SPIRV.cpp - SPIR/SPIR-V-specific CIR CodeGen --------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This provides SPIR/SPIR-V-specific CIR CodeGen logic for function attributes. +// +//===----------------------------------------------------------------------===// + +#include "../CIRGenModule.h" +#include "../TargetInfo.h" + +#include "clang/AST/Attr.h" +#include "clang/AST/Decl.h" +#include "clang/CIR/Dialect/IR/CIRDialect.h" + +using namespace clang; +using namespace clang::CIRGen; + +namespace { + +class SPIRVABIInfo : public ABIInfo { +public: + SPIRVABIInfo(CIRGenTypes &cgt) : ABIInfo(cgt) {} +}; + +class SPIRVTargetCIRGenInfo : public TargetCIRGenInfo { +public: + SPIRVTargetCIRGenInfo(CIRGenTypes &cgt) + : TargetCIRGenInfo(std::make_unique<SPIRVABIInfo>(cgt)) {} + + void setTargetAttributes(const clang::Decl *decl, mlir::Operation *global, + CIRGenModule &cgm) const override { + auto globalValue = mlir::dyn_cast<cir::CIRGlobalValueInterface>(global); + if (globalValue && globalValue.isDeclaration()) + return; + + const auto *fd = dyn_cast_or_null<FunctionDecl>(decl); + if (!fd) + return; + + if (cgm.getLangOpts().OpenCL && fd->hasAttr<DeviceKernelAttr>()) { + auto func = mlir::cast<cir::FuncOp>(global); + func.setCallingConv(cir::CallingConv::SpirKernel); ---------------- aobolensk wrote:
That does not work out, I cannot see the calling convention. After the translation there is no CC installed for the kernel https://github.com/llvm/llvm-project/pull/196920 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
