20using namespace mlir::abi;
27 SPIRVABIClassifier(
const mlir::DataLayout &dl, mlir::ModuleOp modOp)
28 : CIRABIClassifierCommon(dl, modOp) {}
30 mlir::FailureOr<ArgClassification>
31 classifyVAArg(cir::VAArgOp vaArg)
override {
33 <<
"not yet implemented in CallConvLowering for SPIR-V";
34 return mlir::failure();
39 const llvm::abi::TargetInfo &getTargetInfo(cir::FuncOp)
override;
42 std::unique_ptr<llvm::abi::TargetInfo> target;
45const llvm::abi::TargetInfo &SPIRVABIClassifier::getTargetInfo(cir::FuncOp) {
48 std::unique_ptr<cir::LowerModule> lowerModule =
50 assert(lowerModule &&
"LowerModule shouldn't be null");
51 unsigned defaultAddrSpace =
52 lowerModule->hasTarget()
53 ? lowerModule->getTarget().getTargetAddressSpace(
57 target = llvm::abi::createSPIRVTargetInfo(
58 typeMapper.getTypeBuilder(), defaultAddrSpace,
60 lowerModule->getLangOpts().isTargetDevice());
67std::unique_ptr<CIRABIClassifier>
69 mlir::ModuleOp modOp) {
70 return std::make_unique<SPIRVABIClassifier>(dl, modOp);
Classifies through the LLVM ABI Lowering Library.
std::unique_ptr< CIRABIClassifier > createSPIRVABIClassifier(const mlir::DataLayout &dl, mlir::ModuleOp modOp)
The SPIR-V classifier.
std::unique_ptr< LowerModule > createLowerModule(mlir::ModuleOp module)