MLIR 24.0.0git
OpenMPToLLVMPass.cpp
Go to the documentation of this file.
1//===- OpenMPToLLVMPass.cpp - OpenMP to LLVM pass ------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
10
19#include "mlir/Pass/Pass.h"
21
22namespace mlir {
23#define GEN_PASS_DEF_CONVERTOPENMPTOLLVMPASS
24#include "mlir/Conversion/Passes.h.inc"
25} // namespace mlir
26
27using namespace mlir;
28
29namespace {
30struct ConvertOpenMPToLLVMPass
31 : public impl::ConvertOpenMPToLLVMPassBase<ConvertOpenMPToLLVMPass> {
32 using Base::Base;
33
34 void runOnOperation() override;
35};
36} // namespace
37
38void ConvertOpenMPToLLVMPass::runOnOperation() {
39 auto module = getOperation();
40
41 // Convert to OpenMP operations with LLVM IR dialect
42 RewritePatternSet patterns(&getContext());
43 LLVMTypeConverter converter(&getContext());
44 arith::populateArithToLLVMConversionPatterns(converter, patterns);
48 populateFuncToLLVMConversionPatterns(converter, patterns);
49 populateOpenMPToLLVMConversionPatterns(converter, patterns);
50
51 LLVMConversionTarget target(getContext());
52 target.addLegalOp<omp::BarrierOp, omp::FlushOp, omp::TaskwaitOp,
53 omp::TaskyieldOp, omp::TerminatorOp>();
55 if (failed(applyPartialConversion(module, target, std::move(patterns))))
56 signalPassFailure();
57}
b getContext())
void populateControlFlowToLLVMConversionPatterns(const LLVMTypeConverter &converter, RewritePatternSet &patterns)
Collect the patterns to convert from the ControlFlow dialect to LLVM.
void populateAssertToLLVMConversionPattern(const LLVMTypeConverter &converter, RewritePatternSet &patterns, bool abortOnFailure=true, SymbolTableCollection *symbolTables=nullptr)
Populate the cf.assert to LLVM conversion pattern.
detail::InFlightRemark failed(Location loc, RemarkOpts opts)
Report an optimization remark that failed.
Definition Remarks.h:734
Include the generated interface declarations.
void populateOpenMPToLLVMConversionPatterns(LLVMTypeConverter &converter, RewritePatternSet &patterns)
Populate the given list with patterns that convert from OpenMP to LLVM.
void populateFuncToLLVMConversionPatterns(const LLVMTypeConverter &converter, RewritePatternSet &patterns, SymbolTableCollection *symbolTables=nullptr)
Collect the patterns to convert from the Func dialect to LLVM.
void populateFinalizeMemRefToLLVMConversionPatterns(const LLVMTypeConverter &converter, RewritePatternSet &patterns, SymbolTableCollection *symbolTables=nullptr)
Collect a set of patterns to convert memory-related operations from the MemRef dialect to the LLVM di...
void configureOpenMPToLLVMConversionLegality(ConversionTarget &target, const LLVMTypeConverter &typeConverter)
Configure dynamic conversion legality of regionless operations from OpenMP to LLVM.