1 //===- AsyncToLLVM.h - Convert Async to LLVM dialect ------------*- C++ -*-===//
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 
9 #ifndef MLIR_CONVERSION_ASYNCTOLLVM_ASYNCTOLLVM_H
10 #define MLIR_CONVERSION_ASYNCTOLLVM_ASYNCTOLLVM_H
11 
12 #include <memory>
13 
14 namespace mlir {
15 
16 class ConversionTarget;
17 class ModuleOp;
18 template <typename T>
19 class OperationPass;
20 class MLIRContext;
21 class TypeConverter;
22 class RewritePatternSet;
23 using OwningRewritePatternList = RewritePatternSet;
24 
25 /// Create a pass to convert Async operations to the LLVM dialect.
26 std::unique_ptr<OperationPass<ModuleOp>> createConvertAsyncToLLVMPass();
27 
28 /// Populates patterns for async structural type conversions.
29 ///
30 /// A "structural" type conversion is one where the underlying ops are
31 /// completely agnostic to the actual types involved and simply need to update
32 /// their types. An example of this is async.execute -- the async.execute op and
33 /// the corresponding async.yield ops need to update their types accordingly to
34 /// the TypeConverter, but otherwise don't care what type conversions are
35 /// happening.
36 void populateAsyncStructuralTypeConversionsAndLegality(
37     TypeConverter &typeConverter, RewritePatternSet &patterns,
38     ConversionTarget &target);
39 
40 } // namespace mlir
41 
42 #endif // MLIR_CONVERSION_ASYNCTOLLVM_ASYNCTOLLVM_H
43