diff options
author | Akash Banerjee <Akash.Banerjee@amd.com> | 2023-02-23 16:58:04 +0000 |
---|---|---|
committer | Akash Banerjee <Akash.Banerjee@amd.com> | 2023-02-23 17:01:20 +0000 |
commit | af694df712f28f419883e322d7dc978f04bfe38f (patch) | |
tree | d92c848e063b19f0d8ba0eb6e00039e6ae8684ed /mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp | |
parent | dbf149c91b7bdf08b2d4dd94ab76f3209af4c6d4 (diff) | |
download | llvm-af694df712f28f419883e322d7dc978f04bfe38f.zip llvm-af694df712f28f419883e322d7dc978f04bfe38f.tar.gz llvm-af694df712f28f419883e322d7dc978f04bfe38f.tar.bz2 |
[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP Target Data with region
This enables conversion of OpenMP Target Data op with region from FIR Dialect to LLVM IR Dialect.
Differential Revision: https://reviews.llvm.org/D144380
Diffstat (limited to 'mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp')
-rw-r--r-- | mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp index d2eecf2..4e38aaf 100644 --- a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp +++ b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp @@ -151,24 +151,23 @@ struct LegalizeDataOpForLLVMTranslation : public ConvertOpToLLVMPattern<Op> { void mlir::configureOpenMPToLLVMConversionLegality( ConversionTarget &target, LLVMTypeConverter &typeConverter) { - target.addDynamicallyLegalOp<mlir::omp::AtomicUpdateOp, mlir::omp::CriticalOp, - mlir::omp::ParallelOp, mlir::omp::WsLoopOp, - mlir::omp::SimdLoopOp, mlir::omp::MasterOp, - mlir::omp::SectionOp, mlir::omp::SectionsOp, - mlir::omp::SingleOp, mlir::omp::TaskOp>( - [&](Operation *op) { - return typeConverter.isLegal(&op->getRegion(0)) && - typeConverter.isLegal(op->getOperandTypes()) && - typeConverter.isLegal(op->getResultTypes()); - }); - target.addDynamicallyLegalOp<mlir::omp::AtomicReadOp, - mlir::omp::AtomicWriteOp, mlir::omp::FlushOp, - mlir::omp::ThreadprivateOp, mlir::omp::DataOp, - mlir::omp::EnterDataOp, mlir::omp::ExitDataOp>( - [&](Operation *op) { - return typeConverter.isLegal(op->getOperandTypes()) && - typeConverter.isLegal(op->getResultTypes()); - }); + target.addDynamicallyLegalOp< + mlir::omp::AtomicUpdateOp, mlir::omp::CriticalOp, mlir::omp::DataOp, + mlir::omp::ParallelOp, mlir::omp::WsLoopOp, mlir::omp::SimdLoopOp, + mlir::omp::MasterOp, mlir::omp::SectionOp, mlir::omp::SectionsOp, + mlir::omp::SingleOp, mlir::omp::TaskOp>([&](Operation *op) { + return typeConverter.isLegal(&op->getRegion(0)) && + typeConverter.isLegal(op->getOperandTypes()) && + typeConverter.isLegal(op->getResultTypes()); + }); + target + .addDynamicallyLegalOp<mlir::omp::AtomicReadOp, mlir::omp::AtomicWriteOp, + mlir::omp::FlushOp, mlir::omp::ThreadprivateOp, + mlir::omp::EnterDataOp, mlir::omp::ExitDataOp>( + [&](Operation *op) { + return typeConverter.isLegal(op->getOperandTypes()) && + typeConverter.isLegal(op->getResultTypes()); + }); target.addDynamicallyLegalOp<mlir::omp::ReductionOp>([&](Operation *op) { return typeConverter.isLegal(op->getOperandTypes()); }); @@ -177,20 +176,20 @@ void mlir::configureOpenMPToLLVMConversionLegality( void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter, RewritePatternSet &patterns) { patterns.add< - ReductionOpConversion, RegionOpConversion<omp::CriticalOp>, - RegionOpConversion<omp::MasterOp>, ReductionOpConversion, - RegionOpConversion<omp::MasterOp>, RegionOpConversion<omp::ParallelOp>, - RegionOpConversion<omp::WsLoopOp>, RegionOpConversion<omp::SectionsOp>, - RegionOpConversion<omp::SectionOp>, RegionOpConversion<omp::SimdLoopOp>, - RegionOpConversion<omp::SingleOp>, RegionOpConversion<omp::TaskOp>, + LegalizeDataOpForLLVMTranslation<omp::DataOp>, + LegalizeDataOpForLLVMTranslation<omp::EnterDataOp>, + LegalizeDataOpForLLVMTranslation<omp::ExitDataOp>, ReductionOpConversion, + RegionOpConversion<omp::CriticalOp>, RegionOpConversion<omp::MasterOp>, + ReductionOpConversion, RegionOpConversion<omp::MasterOp>, + RegionOpConversion<omp::ParallelOp>, RegionOpConversion<omp::WsLoopOp>, + RegionOpConversion<omp::SectionsOp>, RegionOpConversion<omp::SectionOp>, + RegionOpConversion<omp::SimdLoopOp>, RegionOpConversion<omp::SingleOp>, + RegionOpConversion<omp::TaskOp>, RegionOpConversion<omp::DataOp>, RegionLessOpWithVarOperandsConversion<omp::AtomicReadOp>, RegionLessOpWithVarOperandsConversion<omp::AtomicWriteOp>, RegionOpWithVarOperandsConversion<omp::AtomicUpdateOp>, RegionLessOpWithVarOperandsConversion<omp::FlushOp>, - RegionLessOpWithVarOperandsConversion<omp::ThreadprivateOp>, - LegalizeDataOpForLLVMTranslation<omp::DataOp>, - LegalizeDataOpForLLVMTranslation<omp::EnterDataOp>, - LegalizeDataOpForLLVMTranslation<omp::ExitDataOp>>(converter); + RegionLessOpWithVarOperandsConversion<omp::ThreadprivateOp>>(converter); } namespace { |