Move the definitions of LLVM intrinsic Ops for ArmSME into a dedicated file. To facilitate this, the dialect definition together with various shared definitions are moved to ArmSME.td. This change will allow us to refactor the ArmSME dialect documentation. In particular, we will be able to categorise the Ops into "regular" and "intrinsic" ops. Also, it will be easier to add some custom documentation as opposed to relying on auto-generated docs that simply list the available Ops. The documentation will be updated in a forthcoming patch. Only non-functional changes.
58 lines
2.1 KiB
C++
58 lines
2.1 KiB
C++
//======- ArmSMEToLLVMIRTranslation.cpp - Translate ArmSME to LLVM IR -=======//
|
|
//
|
|
// 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 file implements a translation between the ArmSME dialect and LLVM IR.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.h"
|
|
#include "mlir/Dialect/ArmSME/IR/ArmSME.h"
|
|
#include "mlir/IR/Operation.h"
|
|
#include "mlir/Target/LLVMIR/ModuleTranslation.h"
|
|
|
|
#include "llvm/IR/IRBuilder.h"
|
|
#include "llvm/IR/IntrinsicsAArch64.h"
|
|
|
|
using namespace mlir;
|
|
using namespace mlir::LLVM;
|
|
|
|
namespace {
|
|
/// Implementation of the dialect interface that converts operations belonging
|
|
/// to the ArmSME dialect to LLVM IR.
|
|
class ArmSMEDialectLLVMIRTranslationInterface
|
|
: public LLVMTranslationDialectInterface {
|
|
public:
|
|
using LLVMTranslationDialectInterface::LLVMTranslationDialectInterface;
|
|
|
|
/// Translates the given operation to LLVM IR using the provided IR builder
|
|
/// and saving the state in `moduleTranslation`.
|
|
LogicalResult
|
|
convertOperation(Operation *op, llvm::IRBuilderBase &builder,
|
|
LLVM::ModuleTranslation &moduleTranslation) const final {
|
|
Operation &opInst = *op;
|
|
#include "mlir/Dialect/ArmSME/IR/ArmSMEIntrinsicConversions.inc"
|
|
#include "mlir/Dialect/ArmSME/IR/ArmSMEOpsConversions.inc"
|
|
|
|
return failure();
|
|
}
|
|
};
|
|
} // namespace
|
|
|
|
void mlir::registerArmSMEDialectTranslation(DialectRegistry ®istry) {
|
|
registry.insert<arm_sme::ArmSMEDialect>();
|
|
registry.addExtension(+[](MLIRContext *ctx, arm_sme::ArmSMEDialect *dialect) {
|
|
dialect->addInterfaces<ArmSMEDialectLLVMIRTranslationInterface>();
|
|
});
|
|
}
|
|
|
|
void mlir::registerArmSMEDialectTranslation(MLIRContext &context) {
|
|
DialectRegistry registry;
|
|
registerArmSMEDialectTranslation(registry);
|
|
context.appendDialectRegistry(registry);
|
|
}
|