9#ifndef MLIR_CONVERSION_LLVMCOMMON_VECTORPATTERN_H
10#define MLIR_CONVERSION_LLVMCOMMON_VECTORPATTERN_H
45 unsigned linearIndex);
55 ConversionPatternRewriter &rewriter);
61 IntegerOverflowFlags overflowFlags = IntegerOverflowFlags::none);
67template <
typename SourceOp,
typename TargetOp>
74 return LLVM::IntegerOverflowFlags::none;
87template <
typename SourceOp,
typename TargetOp,
88 template <
typename,
typename>
typename AttrConvert =
89 AttrConvertPassThrough>
98 if (
auto floatType = dyn_cast<FloatType>(type))
100 if (
auto vecType = dyn_cast<VectorType>(type))
101 return dyn_cast<FloatType>(vecType.getElementType());
107 ConversionPatternRewriter &rewriter)
const override {
109 std::is_base_of<OpTrait::OneResult<SourceOp>, SourceOp>::value,
110 "expected single result op");
116 auto checkType = [&](
Value v) -> LogicalResult {
121 if (!isa_and_nonnull<FloatType>(convertedType))
122 return rewriter.notifyMatchFailure(op,
123 "unsupported floating point type");
126 for (
Value operand : op->getOperands())
127 if (failed(checkType(operand)))
129 if (failed(checkType(op->getResult(0))))
133 AttrConvert<SourceOp, TargetOp> attrConvert(op);
136 op, TargetOp::getOperationName(), adaptor.getOperands(),
137 attrConvert.getAttrs(), *this->getTypeConverter(), rewriter,
138 attrConvert.getOverflowFlags());
AttrConvertPassThrough(SourceOp srcOp)
LLVM::IntegerOverflowFlags getOverflowFlags() const
ArrayRef< NamedAttribute > getAttrs() const
ConvertOpToLLVMPattern(const LLVMTypeConverter &typeConverter, PatternBenefit benefit=1)
const LLVMTypeConverter * getTypeConverter() const
Conversion from types to the LLVM IR dialect.
This class helps build Operations.
Operation is the basic unit of execution within MLIR.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
This class provides an abstraction over the different types of ranges over Values.
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
Basic lowering implementation to rewrite Ops with just one result to the LLVM Dialect.
VectorConvertToLLVMPattern< SourceOp, TargetOp > Super
static FloatType getFloatingPointType(Type type)
Return the given type if it's a floating point type.
LogicalResult matchAndRewrite(SourceOp op, typename SourceOp::Adaptor adaptor, ConversionPatternRewriter &rewriter) const override
Methods that operate on the SourceOp type.
LogicalResult handleMultidimensionalVectors(Operation *op, ValueRange operands, const LLVMTypeConverter &typeConverter, std::function< Value(Type, ValueRange)> createOperand, ConversionPatternRewriter &rewriter)
LogicalResult vectorOneToOneRewrite(Operation *op, StringRef targetOp, ValueRange operands, ArrayRef< NamedAttribute > targetAttrs, const LLVMTypeConverter &typeConverter, ConversionPatternRewriter &rewriter, IntegerOverflowFlags overflowFlags=IntegerOverflowFlags::none)
void nDVectorIterate(const NDVectorTypeInfo &info, OpBuilder &builder, function_ref< void(ArrayRef< int64_t >)> fun)
NDVectorTypeInfo extractNDVectorTypeInfo(VectorType vectorType, const LLVMTypeConverter &converter)
SmallVector< int64_t, 4 > getCoordinates(ArrayRef< int64_t > basis, unsigned linearIndex)
Include the generated interface declarations.
llvm::function_ref< Fn > function_ref
SmallVector< int64_t, 4 > arraySizes