aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp
diff options
context:
space:
mode:
authorAkash Banerjee <Akash.Banerjee@amd.com>2023-01-26 14:40:33 +0000
committerAkash Banerjee <Akash.Banerjee@amd.com>2023-01-28 20:24:41 +0000
commita536d3e40e088ab725c6d2e6c0b8ca21451b511c (patch)
tree5b9264af49d033b8d00b7c217416161ab5875a16 /mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp
parent6f15919d986d671be084eb4edce21ef76301808d (diff)
downloadllvm-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.cpp32
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 {