diff options
author | Akash Banerjee <Akash.Banerjee@amd.com> | 2023-01-26 14:40:33 +0000 |
---|---|---|
committer | Akash Banerjee <Akash.Banerjee@amd.com> | 2023-01-28 20:24:41 +0000 |
commit | a536d3e40e088ab725c6d2e6c0b8ca21451b511c (patch) | |
tree | 5b9264af49d033b8d00b7c217416161ab5875a16 /mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp | |
parent | 6f15919d986d671be084eb4edce21ef76301808d (diff) | |
download | llvm-a536d3e40e088ab725c6d2e6c0b8ca21451b511c.zip llvm-a536d3e40e088ab725c6d2e6c0b8ca21451b511c.tar.gz llvm-a536d3e40e088ab725c6d2e6c0b8ca21451b511c.tar.bz2 |
[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP Target Data directives
This enables conversion of OpenMP Target Data, Enter Data and Exit Data from FIR Dialect to LLVM IR Dialect.
Differential Revision: https://reviews.llvm.org/D142629
Diffstat (limited to 'mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp')
-rw-r--r-- | mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp index 6160043..cbb6f6c 100644 --- a/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp +++ b/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp @@ -97,6 +97,18 @@ struct ReductionOpConversion : public ConvertOpToLLVMPattern<omp::ReductionOp> { return success(); } }; + +template <typename Op> +struct LegalizeDataOpForLLVMTranslation : public ConvertOpToLLVMPattern<Op> { + using ConvertOpToLLVMPattern<Op>::ConvertOpToLLVMPattern; + LogicalResult + matchAndRewrite(Op curOp, typename Op::Adaptor adaptor, + ConversionPatternRewriter &rewriter) const override { + rewriter.replaceOpWithNewOp<Op>(curOp, TypeRange(), adaptor.getOperands(), + curOp.getOperation()->getAttrs()); + return success(); + } +}; } // namespace void mlir::configureOpenMPToLLVMConversionLegality( @@ -109,13 +121,14 @@ void mlir::configureOpenMPToLLVMConversionLegality( typeConverter.isLegal(op->getOperandTypes()) && typeConverter.isLegal(op->getResultTypes()); }); - target - .addDynamicallyLegalOp<mlir::omp::AtomicReadOp, mlir::omp::AtomicWriteOp, - mlir::omp::FlushOp, mlir::omp::ThreadprivateOp>( - [&](Operation *op) { - return 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::ReductionOp>([&](Operation *op) { return typeConverter.isLegal(op->getOperandTypes()); }); @@ -132,7 +145,10 @@ void mlir::populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter, RegionLessOpWithVarOperandsConversion<omp::AtomicReadOp>, RegionLessOpWithVarOperandsConversion<omp::AtomicWriteOp>, RegionLessOpWithVarOperandsConversion<omp::FlushOp>, - RegionLessOpWithVarOperandsConversion<omp::ThreadprivateOp>>(converter); + RegionLessOpWithVarOperandsConversion<omp::ThreadprivateOp>, + LegalizeDataOpForLLVMTranslation<omp::DataOp>, + LegalizeDataOpForLLVMTranslation<omp::EnterDataOp>, + LegalizeDataOpForLLVMTranslation<omp::ExitDataOp>>(converter); } namespace { |