diff --git a/compiler/include/concretelang/Conversion/Passes.td b/compiler/include/concretelang/Conversion/Passes.td index e73f5cc5c..1cfaf3183 100644 --- a/compiler/include/concretelang/Conversion/Passes.td +++ b/compiler/include/concretelang/Conversion/Passes.td @@ -47,12 +47,6 @@ def ConcreteToBConcrete : Pass<"concrete-to-bconcrete", "mlir::ModuleOp"> { let dependentDialects = ["mlir::linalg::LinalgDialect", "mlir::concretelang::Concrete::ConcreteDialect", "mlir::concretelang::BConcrete::BConcreteDialect"]; } -def BConcreteToBConcreteCAPI : Pass<"bconcrete-to-bconcrete-c-api", "mlir::ModuleOp"> { - let summary = "Lower operations from the Bufferized Concrete dialect to std with function call to the Bufferized Concrete C API"; - let constructor = "mlir::concretelang::createConvertBConcreteToBConcreteCAPIPass()"; - let dependentDialects = ["mlir::concretelang::BConcrete::BConcreteDialect", "mlir::func::FuncDialect", "mlir::memref::MemRefDialect"]; -} - def MLIRLowerableDialectsToLLVM : Pass<"mlir-lowerable-dialects-to-llvm", "mlir::ModuleOp"> { let summary = "Lowers operations from MLIR lowerable dialects to LLVM"; let constructor = "mlir::concretelang::createConvertMLIRLowerableDialectsToLLVMPass()"; diff --git a/compiler/include/concretelang/Transforms/CMakeLists.txt b/compiler/include/concretelang/Transforms/CMakeLists.txt index b115bcd71..2f12abca6 100644 --- a/compiler/include/concretelang/Transforms/CMakeLists.txt +++ b/compiler/include/concretelang/Transforms/CMakeLists.txt @@ -1,5 +1,5 @@ -set(LLVM_TARGET_DEFINITIONS Bufferize.td) -mlir_tablegen(Bufferize.h.inc -gen-pass-decls -name Transforms) +set(LLVM_TARGET_DEFINITIONS Passes.td) +mlir_tablegen(Passes.h.inc -gen-pass-decls -name Transforms) add_public_tablegen_target(ConcretelangTransformsBufferizePassIncGen) set(LLVM_TARGET_DEFINITIONS OneShotBufferizeDPSWrapper.td) diff --git a/compiler/include/concretelang/Transforms/Bufferize.h b/compiler/include/concretelang/Transforms/Passes.h similarity index 66% rename from compiler/include/concretelang/Transforms/Bufferize.h rename to compiler/include/concretelang/Transforms/Passes.h index 262b43d66..a7b5ae403 100644 --- a/compiler/include/concretelang/Transforms/Bufferize.h +++ b/compiler/include/concretelang/Transforms/Passes.h @@ -3,21 +3,19 @@ // https://github.com/zama-ai/concrete-compiler-internal/blob/main/LICENSE.txt // for license information. -#ifndef CONCRETELANG_BUFFERIZE_PASS_H -#define CONCRETELANG_BUFFERIZE_PASS_H +#ifndef CONCRETELANG_TRANSFORMS_PASS_H +#define CONCRETELANG_TRANSFORMS_PASS_H #include -#include #include +#include #include #define GEN_PASS_CLASSES -#include +#include namespace mlir { namespace concretelang { -std::unique_ptr> -createFinalizingBufferizePass(); std::unique_ptr> createForLoopToParallel(); } // namespace concretelang diff --git a/compiler/include/concretelang/Transforms/Bufferize.td b/compiler/include/concretelang/Transforms/Passes.td similarity index 56% rename from compiler/include/concretelang/Transforms/Bufferize.td rename to compiler/include/concretelang/Transforms/Passes.td index bf97d010f..bff23255c 100644 --- a/compiler/include/concretelang/Transforms/Bufferize.td +++ b/compiler/include/concretelang/Transforms/Passes.td @@ -3,16 +3,6 @@ include "mlir/Pass/PassBase.td" -def FinalizingBufferize - : Pass<"concretelang-bufferize", "::mlir::func::FuncOp"> { - let summary = - "Marks FHELinalg operations for tiling using a vector of tile sizes"; - let constructor = "mlir::concretelang::createBufferizePass()"; - let options = []; - let dependentDialects = - ["mlir::memref::MemRefDialect", "mlir::func::FuncDialect"]; -} - def ForLoopToParallel : Pass<"for-loop-to-parallel", "mlir::ModuleOp"> { let summary = "Transform scf.for marked with the custom attribute parallel = true loop " diff --git a/compiler/lib/Transforms/Bufferize.cpp b/compiler/lib/Transforms/Bufferize.cpp deleted file mode 100644 index d44d5f04c..000000000 --- a/compiler/lib/Transforms/Bufferize.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// Part of the Concrete Compiler Project, under the BSD3 License with Zama -// Exceptions. See -// https://github.com/zama-ai/concrete-compiler-internal/blob/main/LICENSE.txt -// for license information. - -#include "concretelang/Transforms/Bufferize.h" - -#include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" -#include "mlir/Dialect/MemRef/IR/MemRef.h" -#include "mlir/IR/Operation.h" -#include "mlir/Transforms/DialectConversion.h" -#include "mlir/Transforms/Passes.h" - -using namespace mlir; - -namespace { -// In a finalizing bufferize conversion, we know that all tensors have been -// converted to memrefs, thus, this op becomes an identity. -class BufferizeTensorStoreOp - : public OpConversionPattern { -public: - using OpConversionPattern::OpConversionPattern; - LogicalResult - matchAndRewrite(memref::TensorStoreOp op, OpAdaptor adaptor, - ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, op.tensor(), op.memref()); - return success(); - } -}; -} // namespace - -void populatePatterns(bufferization::BufferizeTypeConverter &typeConverter, - RewritePatternSet &patterns) { - bufferization::populateEliminateBufferizeMaterializationsPatterns( - typeConverter, patterns); - patterns.add(typeConverter, patterns.getContext()); -} - -namespace { -struct FinalizingBufferizePass - : public FinalizingBufferizeBase { - using FinalizingBufferizeBase< - FinalizingBufferizePass>::FinalizingBufferizeBase; - - void runOnOperation() override { - auto func = getOperation(); - auto *context = &getContext(); - - bufferization::BufferizeTypeConverter typeConverter; - RewritePatternSet patterns(context); - ConversionTarget target(*context); - populatePatterns(typeConverter, patterns); - - // If all result types are legal, and all block arguments are legal (ensured - // by func conversion above), then all types in the program are legal. - // - // We also check that the operand types are legal to avoid creating invalid - // IR. For example, this prevents - // populateEliminateBufferizeMaterializationsPatterns from updating the - // types of the operands to a return op without updating the enclosing - // function. - target.markUnknownOpDynamicallyLegal( - [&](Operation *op) { return typeConverter.isLegal(op); }); - target.addLegalOp(); - - if (failed(applyFullConversion(func, target, std::move(patterns)))) - signalPassFailure(); - } -}; -} // namespace - -std::unique_ptr> -mlir::concretelang::createFinalizingBufferizePass() { - return std::make_unique(); -} diff --git a/compiler/lib/Transforms/CMakeLists.txt b/compiler/lib/Transforms/CMakeLists.txt index f81496ef3..b3eae8328 100644 --- a/compiler/lib/Transforms/CMakeLists.txt +++ b/compiler/lib/Transforms/CMakeLists.txt @@ -1,5 +1,4 @@ add_mlir_library(ConcretelangTransforms - Bufferize.cpp OneShotBufferizeDPSWrapper.cpp ForLoopToParallel.cpp @@ -11,7 +10,7 @@ add_mlir_library(ConcretelangTransforms ConcretelangTransformsBufferizePassIncGen ConcretelangTransformsOneShotBufferizeDPSWrapperPassIncGen mlir-headers - + LINK_LIBS PUBLIC MLIRIR MLIRMemRef diff --git a/compiler/lib/Transforms/ForLoopToParallel.cpp b/compiler/lib/Transforms/ForLoopToParallel.cpp index 73219be54..c2adffae9 100644 --- a/compiler/lib/Transforms/ForLoopToParallel.cpp +++ b/compiler/lib/Transforms/ForLoopToParallel.cpp @@ -3,7 +3,7 @@ // https://github.com/zama-ai/concrete-compiler-internal/blob/main/LICENSE.txt // for license information. -#include "concretelang/Transforms/Bufferize.h" +#include "concretelang/Transforms/Passes.h" #include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" #include "mlir/Dialect/SCF/SCF.h"