diff --git a/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/CMakeLists.txt b/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/CMakeLists.txt index 74ccc58f8..c81b3babe 100644 --- a/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/CMakeLists.txt +++ b/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/CMakeLists.txt @@ -16,6 +16,7 @@ add_mlir_dialect_library(MLIRLowerableDialectsToLLVM MLIRTransforms MLIRLLVMIR MLIRLLVMToLLVMIRTranslation + MLIROpenMPToLLVMIRTranslation MLIRMath) target_link_libraries(MLIRLowerableDialectsToLLVM PUBLIC MLIRIR) diff --git a/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/MLIRLowerableDialectsToLLVM.cpp b/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/MLIRLowerableDialectsToLLVM.cpp index 7ab51b460..887870d76 100644 --- a/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/MLIRLowerableDialectsToLLVM.cpp +++ b/compiler/lib/Conversion/MLIRLowerableDialectsToLLVM/MLIRLowerableDialectsToLLVM.cpp @@ -12,10 +12,12 @@ #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" #include "mlir/Conversion/LLVMCommon/TypeConverter.h" #include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h" +#include "mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h" #include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/Dialect/OpenMP/OpenMPDialect.h" #include "mlir/Dialect/SCF/SCF.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Pass/Pass.h" @@ -67,6 +69,15 @@ void MLIRLowerableDialectsToLLVMPass::runOnOperation() { mlir::arith::populateArithmeticToLLVMConversionPatterns(typeConverter, patterns); mlir::populateMemRefToLLVMConversionPatterns(typeConverter, patterns); + mlir::populateOpenMPToLLVMConversionPatterns(typeConverter, patterns); + + target.addDynamicallyLegalOp([&](mlir::Operation *op) { + return typeConverter.isLegal(&op->getRegion(0)); + }); + target.addLegalOp(); // Apply a `FullConversion` to `llvm`. auto module = getOperation(); diff --git a/compiler/lib/Support/CompilerEngine.cpp b/compiler/lib/Support/CompilerEngine.cpp index 0b9b7944c..24b4b2adc 100644 --- a/compiler/lib/Support/CompilerEngine.cpp +++ b/compiler/lib/Support/CompilerEngine.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -65,6 +66,7 @@ mlir::MLIRContext *CompilationContext::getMLIRContext() { this->mlirContext->getOrLoadDialect(); this->mlirContext->getOrLoadDialect(); this->mlirContext->getOrLoadDialect(); + this->mlirContext->getOrLoadDialect(); } return this->mlirContext; diff --git a/compiler/lib/Support/Pipeline.cpp b/compiler/lib/Support/Pipeline.cpp index 9630bb1e9..027b4bd08 100644 --- a/compiler/lib/Support/Pipeline.cpp +++ b/compiler/lib/Support/Pipeline.cpp @@ -6,7 +6,8 @@ #include #include -#include +#include + #include #include #include @@ -14,6 +15,7 @@ #include #include #include +#include #include #include @@ -206,7 +208,7 @@ lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module, addPotentiallyNestedPass(pm, mlir::createStdBufferizePass(), enablePass); addPotentiallyNestedPass(pm, mlir::createTensorBufferizePass(), enablePass); addPotentiallyNestedPass(pm, mlir::createLinalgBufferizePass(), enablePass); - addPotentiallyNestedPass(pm, mlir::createConvertLinalgToLoopsPass(), + addPotentiallyNestedPass(pm, mlir::createConvertLinalgToParallelLoopsPass(), enablePass); addPotentiallyNestedPass(pm, mlir::createSCFBufferizePass(), enablePass); addPotentiallyNestedPass(pm, mlir::createFuncBufferizePass(), enablePass); @@ -214,14 +216,14 @@ lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module, pm, mlir::concretelang::createBufferizeDataflowTaskOpsPass(), enablePass); addPotentiallyNestedPass(pm, mlir::createFinalizingBufferizePass(), enablePass); + addPotentiallyNestedPass(pm, mlir::createConvertSCFToOpenMPPass(), + enablePass); // Lower Dataflow tasks to DRF addPotentiallyNestedPass( pm, mlir::concretelang::createFixupDataflowTaskOpsPass(), enablePass); addPotentiallyNestedPass( pm, mlir::concretelang::createLowerDataflowTasksPass(), enablePass); - addPotentiallyNestedPass(pm, mlir::createConvertLinalgToLoopsPass(), - enablePass); addPotentiallyNestedPass(pm, mlir::createLowerToCFGPass(), enablePass); // Convert to MLIR LLVM Dialect @@ -239,6 +241,7 @@ lowerLLVMDialectToLLVMIR(mlir::MLIRContext &context, llvm::InitializeNativeTarget(); llvm::InitializeNativeTargetAsmPrinter(); mlir::registerLLVMDialectTranslation(*module->getContext()); + mlir::registerOpenMPDialectTranslation(*module->getContext()); return mlir::translateModuleToLLVMIR(module, llvmContext); }