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 
24 /// Create a pass to convert Async operations to the LLVM dialect.
25 std::unique_ptr<OperationPass<ModuleOp>> createConvertAsyncToLLVMPass();
26 
27 /// Populates patterns for async structural type conversions.
28 ///
29 /// A "structural" type conversion is one where the underlying ops are
30 /// completely agnostic to the actual types involved and simply need to update
31 /// their types. An example of this is async.execute -- the async.execute op and
32 /// the corresponding async.yield ops need to update their types accordingly to
33 /// the TypeConverter, but otherwise don't care what type conversions are
34 /// happening.
35 void populateAsyncStructuralTypeConversionsAndLegality(
36     TypeConverter &typeConverter, RewritePatternSet &patterns,
37     ConversionTarget &target);
38 
39 } // namespace mlir
40 
41 #endif // MLIR_CONVERSION_ASYNCTOLLVM_ASYNCTOLLVM_H
42