diff options
Diffstat (limited to 'mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp')
| -rw-r--r-- | mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp index bf1b59a9913f..aa824a95b157 100644 --- a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp +++ b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp @@ -10,6 +10,7 @@ #include "mlir/Conversion/ArithToLLVM/ArithToLLVM.h" #include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h" +#include "mlir/Conversion/ConvertToLLVM/ToLLVMInterface.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h" #include "mlir/Conversion/LLVMCommon/ConversionTarget.h" @@ -314,3 +315,31 @@ void ConvertOpenMPToLLVMPass::runOnOperation() { if (failed(applyPartialConversion(module, target, std::move(patterns)))) signalPassFailure(); } + +//===----------------------------------------------------------------------===// +// ConvertToLLVMPatternInterface implementation +//===----------------------------------------------------------------------===// +namespace { +/// Implement the interface to convert OpenMP to LLVM. +struct OpenMPToLLVMDialectInterface : public ConvertToLLVMPatternInterface { + using ConvertToLLVMPatternInterface::ConvertToLLVMPatternInterface; + void loadDependentDialects(MLIRContext *context) const final { + context->loadDialect<LLVM::LLVMDialect>(); + } + + /// Hook for derived dialect interface to provide conversion patterns + /// and mark dialect legal for the conversion target. + void populateConvertToLLVMConversionPatterns( + ConversionTarget &target, LLVMTypeConverter &typeConverter, + RewritePatternSet &patterns) const final { + configureOpenMPToLLVMConversionLegality(target, typeConverter); + populateOpenMPToLLVMConversionPatterns(typeConverter, patterns); + } +}; +} // namespace + +void mlir::registerConvertOpenMPToLLVMInterface(DialectRegistry ®istry) { + registry.addExtension(+[](MLIRContext *ctx, omp::OpenMPDialect *dialect) { + dialect->addInterfaces<OpenMPToLLVMDialectInterface>(); + }); +} |
