feat(compiler): introduce bufferization passes in lowering pipeline to llvm

This commit is contained in:
Quentin Bourgerie
2021-08-18 12:15:55 +02:00
parent 19704b4b13
commit bc975d904e
3 changed files with 35 additions and 2 deletions

View File

@@ -220,7 +220,7 @@ void LowLFHEToConcreteCAPIPass::runOnOperation() {
// Apply the conversion
mlir::ModuleOp op = getOperation();
if (mlir::applyFullConversion(op, target, std::move(patterns)).failed()) {
if (mlir::applyPartialConversion(op, target, std::move(patterns)).failed()) {
this->signalPassFailure();
}
}

View File

@@ -1,6 +1,9 @@
#include "mlir/Dialect/Tensor/Transforms/Passes.h"
#include <llvm/Support/TargetSelect.h>
#include <mlir/Dialect/StandardOps/Transforms/Passes.h>
#include <mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h>
#include <mlir/Target/LLVMIR/Export.h>
#include <mlir/Transforms/Passes.h>
#include "zamalang/Conversion/Passes.h"
#include "zamalang/Support/CompilerTools.h"
@@ -63,8 +66,17 @@ mlir::LogicalResult CompilerTools::lowerHLFHEToMlirStdsDialect(
mlir::LogicalResult CompilerTools::lowerMlirStdsDialectToMlirLLVMDialect(
mlir::MLIRContext &context, mlir::Operation *module,
llvm::function_ref<bool(std::string)> enablePass) {
mlir::PassManager pm(&context);
// Bufferize
addFilteredPassToPassManager(pm, mlir::createTensorConstantBufferizePass(),
enablePass);
addFilteredPassToPassManager(pm, mlir::createStdBufferizePass(), enablePass);
addFilteredPassToPassManager(pm, mlir::createTensorBufferizePass(),
enablePass);
addFilteredPassToPassManager(pm, mlir::createFuncBufferizePass(), enablePass);
addFilteredPassToPassManager(pm, mlir::createFinalizingBufferizePass(),
enablePass);
addFilteredPassToPassManager(
pm, mlir::zamalang::createConvertMLIRLowerableDialectsToLLVMPass(),
enablePass);

View File

@@ -0,0 +1,21 @@
// RUN: zamacompiler %s --run-jit --jit-args 11 2>&1| FileCheck %s
// CHECK-LABEL: 116
func @main(%arg0: index) -> i7 {
%t = std.constant dense<[127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]> : tensor<128xi7>
%c = tensor.extract %t[%arg0] : tensor<128xi7>
return %c : i7
}
// // -----
// func @extract(%arg0: index, %t: tensor<128xi7>) -> i7{
// %c = tensor.extract %t[%arg0] : tensor<128xi7>
// return %c : i7
// }
// func @main(%arg0: index) -> i7 {
// %t = std.constant dense<[127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]> : tensor<128xi7>
// %c = call @extract(%arg0, %t): (index, tensor<128xi7>) -> i7
// return %c : i7
// }