Revert "[mlir][func] Use the generated pass options in func to llvm."
authorTobias Gysi <tobias.gysi@nextsilicon.com>
Sat, 11 Feb 2023 09:42:20 +0000 (10:42 +0100)
committerTobias Gysi <tobias.gysi@nextsilicon.com>
Sat, 11 Feb 2023 09:42:20 +0000 (10:42 +0100)
The commit breaks the mlir-vulkan runner:
https://lab.llvm.org/buildbot#builders/61/builds/39694

This reverts commit 771d9c05afc2515b474fb53db857716dfdfc1dcf.

mlir/include/mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h
mlir/include/mlir/Conversion/Passes.td
mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
mlir/test/CAPI/execution_engine.c

index f6be8a0..701c6ac 100644 (file)
 #include <string>
 
 namespace mlir {
+class LowerToLLVMOptions;
+class ModuleOp;
+template <typename T>
+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<OperationPass<ModuleOp>> createConvertFuncToLLVMPass();
+std::unique_ptr<OperationPass<ModuleOp>>
+createConvertFuncToLLVMPass(const LowerToLLVMOptions &options);
+
 } // namespace mlir
 
 #endif // MLIR_CONVERSION_FUNCTOLLVM_CONVERTFUNCTOLLVMPASS_H_
index dacad1a..60c28be 100644 (file)
@@ -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",
index 80f0bbb..724b690 100644 (file)
@@ -48,7 +48,7 @@
 #include <functional>
 
 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<ConvertFuncToLLVMPass> {
-  using Base::Base;
+    : public impl::ConvertFuncToLLVMBase<ConvertFuncToLLVMPass> {
+  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<OperationPass<ModuleOp>> mlir::createConvertFuncToLLVMPass() {
+  return std::make_unique<ConvertFuncToLLVMPass>();
+}
+
+std::unique_ptr<OperationPass<ModuleOp>>
+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<ConvertFuncToLLVMPass>(
+      options.useBarePtrCallConv, options.getIndexBitwidth(), useAlignedAlloc,
+      options.dataLayout);
+}
index 582b2f8..96ad8eb 100644 (file)
@@ -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);