From: Tobias Gysi Date: Sat, 11 Feb 2023 09:31:19 +0000 (+0100) Subject: [mlir][func] Use the generated pass options in func to llvm. X-Git-Tag: upstream/17.0.6~17855 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=771d9c05afc2515b474fb53db857716dfdfc1dcf;p=platform%2Fupstream%2Fllvm.git [mlir][func] Use the generated pass options in func to llvm. Update the FuncToLLVM pass to use the generated constructors and the generated pass option struct. The hand written constructor got out of sync after some refactorings. Using a generated constructor and options struct ensures the everything remains in sync. Reviewed By: zero9178 Differential Revision: https://reviews.llvm.org/D143733 --- diff --git a/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h b/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h index 701c6ac..f6be8a0 100644 --- a/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h +++ b/mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h @@ -13,20 +13,11 @@ #include namespace mlir { -class LowerToLLVMOptions; -class ModuleOp; -template -class OperationPass; class Pass; -#define GEN_PASS_DECL_CONVERTFUNCTOLLVM +#define GEN_PASS_DECL_CONVERTFUNCTOLLVMPASS #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 60c28be..dacad1a 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 ConvertFuncToLLVM : Pass<"convert-func-to-llvm", "ModuleOp"> { +def ConvertFuncToLLVMPass : 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,7 +300,6 @@ def ConvertFuncToLLVM : 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 724b690..80f0bbb 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_CONVERTFUNCTOLLVM +#define GEN_PASS_DEF_CONVERTFUNCTOLLVMPASS #include "mlir/Conversion/Passes.h.inc" } // namespace mlir @@ -711,15 +711,8 @@ void mlir::populateFuncToLLVMConversionPatterns(LLVMTypeConverter &converter, namespace { /// A pass converting Func operations into the LLVM IR dialect. struct ConvertFuncToLLVMPass - : 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(); - } + : public impl::ConvertFuncToLLVMPassBase { + using Base::Base; /// Run the dialect converter on the module. void runOnOperation() override { @@ -761,21 +754,3 @@ 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 96ad8eb..582b2f8 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, mlirCreateConversionConvertFuncToLLVM()); + mlirPassManagerAddOwnedPass(pm, mlirCreateConversionConvertFuncToLLVMPass()); mlirOpPassManagerAddOwnedPass( opm, mlirCreateConversionArithToLLVMConversionPass()); MlirLogicalResult status = mlirPassManagerRun(pm, module);