From: Tobias Gysi Date: Sat, 11 Feb 2023 09:42:20 +0000 (+0100) Subject: Revert "[mlir][func] Use the generated pass options in func to llvm." X-Git-Tag: upstream/17.0.6~17854 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=39da46826da82c24ca4407c13ad7feb8e5dc32a1;p=platform%2Fupstream%2Fllvm.git Revert "[mlir][func] Use the generated pass options in func to llvm." The commit breaks the mlir-vulkan runner: https://lab.llvm.org/buildbot#builders/61/builds/39694 This reverts commit 771d9c05afc2515b474fb53db857716dfdfc1dcf. --- diff --git a/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h b/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h index f6be8a0..701c6ac 100644 --- a/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h +++ b/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h @@ -13,11 +13,20 @@ #include namespace mlir { +class LowerToLLVMOptions; +class ModuleOp; +template +class OperationPass; class Pass; -#define GEN_PASS_DECL_CONVERTFUNCTOLLVMPASS +#define GEN_PASS_DECL_CONVERTFUNCTOLLVM #include "mlir/Conversion/Passes.h.inc" +/// Creates a pass to convert the Func dialect into the LLVMIR dialect. +std::unique_ptr> createConvertFuncToLLVMPass(); +std::unique_ptr> +createConvertFuncToLLVMPass(const LowerToLLVMOptions &options); + } // namespace mlir #endif // MLIR_CONVERSION_FUNCTOLLVM_CONVERTFUNCTOLLVMPASS_H_ diff --git a/mlir/include/mlir/Conversion/Passes.td b/mlir/include/mlir/Conversion/Passes.td index dacad1a..60c28be 100644 --- a/mlir/include/mlir/Conversion/Passes.td +++ b/mlir/include/mlir/Conversion/Passes.td @@ -276,7 +276,7 @@ def ConvertControlFlowToSPIRV : Pass<"convert-cf-to-spirv"> { // FuncToLLVM //===----------------------------------------------------------------------===// -def ConvertFuncToLLVMPass : Pass<"convert-func-to-llvm", "ModuleOp"> { +def ConvertFuncToLLVM : Pass<"convert-func-to-llvm", "ModuleOp"> { let summary = "Convert from the Func dialect to the LLVM dialect"; let description = [{ Convert Func dialect operations into the LLVM IR dialect operations. @@ -300,6 +300,7 @@ def ConvertFuncToLLVMPass : Pass<"convert-func-to-llvm", "ModuleOp"> { returns are updated accordingly. Block argument types are updated to use LLVM IR types. }]; + let constructor = "mlir::createConvertFuncToLLVMPass()"; let dependentDialects = ["LLVM::LLVMDialect"]; let options = [ Option<"useBarePtrCallConv", "use-bare-ptr-memref-call-conv", "bool", diff --git a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp index 80f0bbb..724b690 100644 --- a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp +++ b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp @@ -48,7 +48,7 @@ #include namespace mlir { -#define GEN_PASS_DEF_CONVERTFUNCTOLLVMPASS +#define GEN_PASS_DEF_CONVERTFUNCTOLLVM #include "mlir/Conversion/Passes.h.inc" } // namespace mlir @@ -711,8 +711,15 @@ void mlir::populateFuncToLLVMConversionPatterns(LLVMTypeConverter &converter, namespace { /// A pass converting Func operations into the LLVM IR dialect. struct ConvertFuncToLLVMPass - : public impl::ConvertFuncToLLVMPassBase { - using Base::Base; + : public impl::ConvertFuncToLLVMBase { + ConvertFuncToLLVMPass() = default; + ConvertFuncToLLVMPass(bool useBarePtrCallConv, unsigned indexBitwidth, + bool useAlignedAlloc, + const llvm::DataLayout &dataLayout) { + this->useBarePtrCallConv = useBarePtrCallConv; + this->indexBitwidth = indexBitwidth; + this->dataLayout = dataLayout.getStringRepresentation(); + } /// Run the dialect converter on the module. void runOnOperation() override { @@ -754,3 +761,21 @@ struct ConvertFuncToLLVMPass } }; } // namespace + +std::unique_ptr> mlir::createConvertFuncToLLVMPass() { + return std::make_unique(); +} + +std::unique_ptr> +mlir::createConvertFuncToLLVMPass(const LowerToLLVMOptions &options) { + auto allocLowering = options.allocLowering; + // There is no way to provide additional patterns for pass, so + // AllocLowering::None will always fail. + assert(allocLowering != LowerToLLVMOptions::AllocLowering::None && + "ConvertFuncToLLVMPass doesn't support AllocLowering::None"); + bool useAlignedAlloc = + (allocLowering == LowerToLLVMOptions::AllocLowering::AlignedAlloc); + return std::make_unique( + options.useBarePtrCallConv, options.getIndexBitwidth(), useAlignedAlloc, + options.dataLayout); +} diff --git a/mlir/test/CAPI/execution_engine.c b/mlir/test/CAPI/execution_engine.c index 582b2f8..96ad8eb 100644 --- a/mlir/test/CAPI/execution_engine.c +++ b/mlir/test/CAPI/execution_engine.c @@ -34,7 +34,7 @@ void lowerModuleToLLVM(MlirContext ctx, MlirModule module) { MlirPassManager pm = mlirPassManagerCreate(ctx); MlirOpPassManager opm = mlirPassManagerGetNestedUnder( pm, mlirStringRefCreateFromCString("func.func")); - mlirPassManagerAddOwnedPass(pm, mlirCreateConversionConvertFuncToLLVMPass()); + mlirPassManagerAddOwnedPass(pm, mlirCreateConversionConvertFuncToLLVM()); mlirOpPassManagerAddOwnedPass( opm, mlirCreateConversionArithToLLVMConversionPass()); MlirLogicalResult status = mlirPassManagerRun(pm, module);