From c9f7c370fcf96f941774648da5b80955299bf80a Mon Sep 17 00:00:00 2001 From: lonely eagle <75576166+linuxlonelyeagle@users.noreply.github.com> Date: Tue, 19 Sep 2023 14:01:56 +0800 Subject: [PATCH] fix toy DSL. (#202) fix toy DSL. --- examples/ToyDSL/main.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/examples/ToyDSL/main.cpp b/examples/ToyDSL/main.cpp index 616193f07c..f5355e739b 100644 --- a/examples/ToyDSL/main.cpp +++ b/examples/ToyDSL/main.cpp @@ -45,6 +45,7 @@ #include "mlir/Parser/Parser.h" #include "mlir/Pass/Pass.h" #include "mlir/Pass/PassManager.h" +#include "mlir/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Export.h" #include "mlir/Transforms/Passes.h" @@ -135,7 +136,6 @@ int loadAndProcessMLIR(mlir::MLIRContext &context, // Now that there is only one function, we can infer the shapes of each of // the operations. mlir::OpPassManager &optPM = pm.nest(); - optPM.addPass(mlir::createCanonicalizerPass()); optPM.addPass(mlir::toy::createShapeInferencePass()); optPM.addPass(mlir::createCanonicalizerPass()); optPM.addPass(mlir::createCSEPass()); @@ -152,8 +152,8 @@ int loadAndProcessMLIR(mlir::MLIRContext &context, // Add optimizations if enabled. if (enableOpt) { - optPM.addPass(mlir::createLoopFusionPass()); - optPM.addPass(mlir::createAffineScalarReplacementPass()); + optPM.addPass(mlir::affine::createLoopFusionPass()); + optPM.addPass(mlir::affine::createAffineScalarReplacementPass()); } } @@ -191,7 +191,16 @@ int dumpLLVMIR(mlir::ModuleOp module) { // Initialize LLVM targets. llvm::InitializeNativeTarget(); llvm::InitializeNativeTargetAsmPrinter(); - mlir::ExecutionEngine::setupTargetTriple(llvmModule.get()); + + auto tmBuilderOrError = llvm::orc::JITTargetMachineBuilder::detectHost(); + if (!tmBuilderOrError) { + llvm::errs() << "Could not create JITTargetMachineBuilder\n"; + return -1; + } + + auto tmOrError = tmBuilderOrError->createTargetMachine(); + mlir::ExecutionEngine::setupTargetTripleAndDataLayout(llvmModule.get(), + tmOrError.get().get()); /// Optionally run an optimization pipeline over the llvm module. auto optPipeline = mlir::makeOptimizingTransformer( @@ -212,6 +221,7 @@ int runJit(mlir::ModuleOp module) { // Register the translation from MLIR to LLVM IR, which must happen before we // can JIT-compile. + mlir::registerBuiltinDialectTranslation(*module->getContext()); mlir::registerLLVMDialectTranslation(*module->getContext()); // An optimization pipeline to use within the execution engine.