//===- Pattern.h - Pattern for conversion to the LLVM dialect ---*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef MLIR_CONVERSION_LLVMCOMMON_PATTERN_H #define MLIR_CONVERSION_LLVMCOMMON_PATTERN_H #include "mlir/Conversion/LLVMCommon/MemRefBuilder.h" #include "mlir/Conversion/LLVMCommon/TypeConverter.h" #include "mlir/Dialect/LLVMIR/LLVMAttrs.h" #include "mlir/Transforms/DialectConversion.h" namespace mlir { class CallOpInterface; namespace LLVM { namespace detail { /// Handle generically setting flags as native properties on LLVM operations. void setNativeProperties(Operation *op, IntegerOverflowFlags overflowFlags); /// Replaces the given operation "op" with a new operation of type "targetOp" /// and given operands. LogicalResult oneToOneRewrite( Operation *op, StringRef targetOp, ValueRange operands, ArrayRef<NamedAttribute> targetAttrs, const LLVMTypeConverter &typeConverter, ConversionPatternRewriter &rewriter, IntegerOverflowFlags overflowFlags = IntegerOverflowFlags::none); } // namespace detail } // namespace LLVM /// Base class for operation conversions targeting the LLVM IR dialect. It /// provides the conversion patterns with access to the LLVMTypeConverter and /// the LowerToLLVMOptions. The class captures the LLVMTypeConverter and the /// LowerToLLVMOptions by reference meaning the references have to remain alive /// during the entire pattern lifetime. class ConvertToLLVMPattern : public ConversionPattern { … }; /// Utility class for operation conversions targeting the LLVM dialect that /// match exactly one source operation. template <typename SourceOp> class ConvertOpToLLVMPattern : public ConvertToLLVMPattern { … }; /// Generic implementation of one-to-one conversion from "SourceOp" to /// "TargetOp" where the latter belongs to the LLVM dialect or an equivalent. /// Upholds a convention that multi-result operations get converted into an /// operation returning the LLVM IR structure type, in which case individual /// values must be extracted from using LLVM::ExtractValueOp before being used. template <typename SourceOp, typename TargetOp> class OneToOneConvertToLLVMPattern : public ConvertOpToLLVMPattern<SourceOp> { … }; } // namespace mlir #endif // MLIR_CONVERSION_LLVMCOMMON_PATTERN_H