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