add automatic patches to onnx-mlir with CMakeLists.txt
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
|
||||
#include "mlir/Dialect/Tosa/Transforms/Passes.h"
|
||||
#include "mlir/IR/BuiltinTypes.h"
|
||||
#include "mlir/Transforms/Passes.h"
|
||||
|
||||
#include "llvm/Support/Debug.h"
|
||||
|
||||
#include "src/Accelerators/PIM/Compiler/PimCompilerUtils.hpp"
|
||||
@@ -19,40 +19,40 @@
|
||||
#include "src/Accelerators/PIM/Pass/PimPasses.hpp"
|
||||
#include "src/Accelerators/PIM/PimAccelerator.hpp"
|
||||
|
||||
#include <memory>
|
||||
|
||||
#define DEBUG_TYPE "PimAccelerator"
|
||||
|
||||
namespace onnx_mlir {
|
||||
namespace accel {
|
||||
|
||||
Accelerator *createPIM() { return PimAccelerator::getInstance(); }
|
||||
Accelerator* createPIM() { return PimAccelerator::getInstance(); }
|
||||
|
||||
PimAccelerator *PimAccelerator::instance = nullptr;
|
||||
PimAccelerator* PimAccelerator::instance = nullptr;
|
||||
|
||||
PimAccelerator *PimAccelerator::getInstance() {
|
||||
PimAccelerator* PimAccelerator::getInstance() {
|
||||
if (instance == nullptr)
|
||||
instance = new PimAccelerator();
|
||||
return instance;
|
||||
}
|
||||
|
||||
PimAccelerator::PimAccelerator() : Accelerator(Accelerator::Kind::PIM) {
|
||||
PimAccelerator::PimAccelerator()
|
||||
: Accelerator(Kind::PIM) {
|
||||
LLVM_DEBUG(llvm::dbgs() << "Creating a PIM accelerator\n");
|
||||
acceleratorTargets.push_back(this);
|
||||
};
|
||||
}
|
||||
|
||||
PimAccelerator::~PimAccelerator() { delete instance; }
|
||||
|
||||
uint64_t PimAccelerator::getVersionNumber() const { return 0x000001; }
|
||||
|
||||
void PimAccelerator::addPasses(mlir::OwningOpRef<mlir::ModuleOp> &module,
|
||||
mlir::PassManager &pm, onnx_mlir::EmissionTargetType &emissionTarget,
|
||||
std::string outputNameNoExt) const {
|
||||
void PimAccelerator::addPasses(OwningOpRef<ModuleOp>& module,
|
||||
PassManager& pm,
|
||||
EmissionTargetType& emissionTarget,
|
||||
std::string outputNameNoExt) const {
|
||||
LLVM_DEBUG(llvm::dbgs() << "Adding passes for PIM accelerator\n");
|
||||
addPassesPim(module, pm, emissionTarget, outputNameNoExt);
|
||||
}
|
||||
|
||||
void PimAccelerator::registerDialects(mlir::DialectRegistry ®istry) const {
|
||||
void PimAccelerator::registerDialects(DialectRegistry& registry) const {
|
||||
LLVM_DEBUG(llvm::dbgs() << "Registering dialects for PIM accelerator\n");
|
||||
registry.insert<tensor::TensorDialect>();
|
||||
registry.insert<tosa::TosaDialect>();
|
||||
@@ -61,8 +61,7 @@ void PimAccelerator::registerDialects(mlir::DialectRegistry ®istry) const {
|
||||
registry.insert<spatial::SpatialDialect>();
|
||||
tensor::registerBufferizableOpInterfaceExternalModels(registry);
|
||||
arith::registerBufferizableOpInterfaceExternalModels(registry);
|
||||
mlir::bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(
|
||||
registry);
|
||||
bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(registry);
|
||||
spatial::registerBufferizableOpInterfaceExternalModels(registry);
|
||||
spatial::registerONNXBufferizableOpInterfaceExternalModels(registry);
|
||||
pim::registerBufferizableOpInterfaceExternalModels(registry);
|
||||
@@ -70,11 +69,11 @@ void PimAccelerator::registerDialects(mlir::DialectRegistry ®istry) const {
|
||||
|
||||
void PimAccelerator::registerPasses(int optLevel) const {
|
||||
LLVM_DEBUG(llvm::dbgs() << "Registering passes for PIM accelerator\n");
|
||||
// Register here all the passes that could be used
|
||||
mlir::registerPass(createONNXToSpatialPass);
|
||||
mlir::registerPass(createSpatialToGraphvizPass);
|
||||
mlir::registerPass(createSpatialToPIMPass);
|
||||
mlir::registerPass(createBufferizePimPass);
|
||||
registerPass(createONNXToSpatialPass);
|
||||
registerPass(createSpatialToGraphvizPass);
|
||||
registerPass(createSpatialToPIMPass);
|
||||
registerPass(createBufferizePimPass);
|
||||
registerPass(createEmitPimJsonPass);
|
||||
}
|
||||
|
||||
void PimAccelerator::configurePasses() const {
|
||||
@@ -82,27 +81,26 @@ void PimAccelerator::configurePasses() const {
|
||||
// TODO: This does nothing for now.
|
||||
}
|
||||
|
||||
mlir::MemRefType PimAccelerator::convertTensorTypeToMemRefType(
|
||||
const mlir::TensorType tensorType) const {
|
||||
MemRefType PimAccelerator::convertTensorTypeToMemRefType(const TensorType tensorType) const {
|
||||
// Do not convert tensor types to memref types.
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void PimAccelerator::conversionTargetONNXToKrnl(
|
||||
mlir::ConversionTarget &target) const {
|
||||
void PimAccelerator::conversionTargetONNXToKrnl(ConversionTarget& target) const {
|
||||
target.addLegalDialect<pim::PimDialect>();
|
||||
}
|
||||
|
||||
void PimAccelerator::rewritePatternONNXToKrnl(mlir::RewritePatternSet &patterns,
|
||||
mlir::TypeConverter &typeConverter, mlir::MLIRContext *ctx) const {
|
||||
void PimAccelerator::rewritePatternONNXToKrnl(RewritePatternSet& patterns,
|
||||
TypeConverter& typeConverter,
|
||||
MLIRContext* ctx) const {
|
||||
// TODO: Add patterns for conversion
|
||||
}
|
||||
|
||||
void PimAccelerator::conversionTargetKrnlToLLVM(
|
||||
mlir::ConversionTarget &target) const {}
|
||||
void PimAccelerator::conversionTargetKrnlToLLVM(ConversionTarget& target) const {}
|
||||
|
||||
void PimAccelerator::rewritePatternKrnlToLLVM(mlir::RewritePatternSet &patterns,
|
||||
mlir::LLVMTypeConverter &typeConverter, mlir::MLIRContext *ctx) const {
|
||||
void PimAccelerator::rewritePatternKrnlToLLVM(RewritePatternSet& patterns,
|
||||
LLVMTypeConverter& typeConverter,
|
||||
MLIRContext* ctx) const {
|
||||
// We should not need this, since we offload it all to PIM.
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user