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