diff --git a/compiler/include/concretelang/Support/Pipeline.h b/compiler/include/concretelang/Support/Pipeline.h index abec3df90..3e5797916 100644 --- a/compiler/include/concretelang/Support/Pipeline.h +++ b/compiler/include/concretelang/Support/Pipeline.h @@ -48,7 +48,8 @@ lowerConcreteToStd(mlir::MLIRContext &context, mlir::ModuleOp &module, mlir::LogicalResult lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module, - std::function enablePass); + std::function enablePass, + bool parallelizeLoops); mlir::LogicalResult optimizeLLVMModule(llvm::LLVMContext &llvmContext, llvm::Module &module); diff --git a/compiler/lib/Support/CompilerEngine.cpp b/compiler/lib/Support/CompilerEngine.cpp index 24b4b2adc..26806bf38 100644 --- a/compiler/lib/Support/CompilerEngine.cpp +++ b/compiler/lib/Support/CompilerEngine.cpp @@ -296,8 +296,9 @@ CompilerEngine::compile(llvm::SourceMgr &sm, Target target, OptionalLib lib) { } // MLIR canonical dialects -> LLVM Dialect - if (mlir::concretelang::pipeline::lowerStdToLLVMDialect(mlirContext, module, - enablePass) + if (mlir::concretelang::pipeline::lowerStdToLLVMDialect( + mlirContext, module, enablePass, + /*parallelizeLoops =*/this->autoParallelize) .failed()) { return errorDiag("Failed to lower to LLVM dialect"); } diff --git a/compiler/lib/Support/Pipeline.cpp b/compiler/lib/Support/Pipeline.cpp index 027b4bd08..5d0f1e37e 100644 --- a/compiler/lib/Support/Pipeline.cpp +++ b/compiler/lib/Support/Pipeline.cpp @@ -193,7 +193,8 @@ lowerConcreteToStd(mlir::MLIRContext &context, mlir::ModuleOp &module, mlir::LogicalResult lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module, - std::function enablePass) { + std::function enablePass, + bool parallelizeLoops) { mlir::PassManager pm(&context); pipelinePrinting("StdToLLVM", pm, context); @@ -208,16 +209,21 @@ 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::createConvertLinalgToParallelLoopsPass(), - enablePass); + if (parallelizeLoops) + addPotentiallyNestedPass(pm, mlir::createConvertLinalgToParallelLoopsPass(), + enablePass); + else + addPotentiallyNestedPass(pm, mlir::createConvertLinalgToLoopsPass(), + enablePass); addPotentiallyNestedPass(pm, mlir::createSCFBufferizePass(), enablePass); addPotentiallyNestedPass(pm, mlir::createFuncBufferizePass(), enablePass); addPotentiallyNestedPass( pm, mlir::concretelang::createBufferizeDataflowTaskOpsPass(), enablePass); addPotentiallyNestedPass(pm, mlir::createFinalizingBufferizePass(), enablePass); - addPotentiallyNestedPass(pm, mlir::createConvertSCFToOpenMPPass(), - enablePass); + if (parallelizeLoops) + addPotentiallyNestedPass(pm, mlir::createConvertSCFToOpenMPPass(), + enablePass); // Lower Dataflow tasks to DRF addPotentiallyNestedPass(