MLIR
18.0.0git
|
#include "mlir/Dialect/Vector/IR/VectorOps.h"
#include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Arith/Utils/Utils.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Utils/IndexingUtils.h"
#include "mlir/Dialect/Utils/StructuredOpsUtils.h"
#include "mlir/IR/AffineExpr.h"
#include "mlir/IR/AffineMap.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/IRMapping.h"
#include "mlir/IR/OpImplementation.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/TypeUtilities.h"
#include "mlir/Interfaces/ValueBoundsOpInterface.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/ADT/bit.h"
#include <cassert>
#include <cstdint>
#include <numeric>
#include "mlir/Dialect/Vector/IR/VectorDialect.cpp.inc"
#include "mlir/Dialect/Vector/IR/VectorEnums.cpp.inc"
#include "mlir/Dialect/Vector/IR/VectorAttributes.cpp.inc"
#include "mlir/Dialect/Vector/IR/VectorOps.cpp.inc"
Go to the source code of this file.
Classes | |
struct | mlir::vector::detail::BitmaskEnumStorage |
struct | CanonicalizeContractAdd< AddOpType > |
Return a fused vector::ContractionOp which represents a patterns such as: More... | |
Namespaces | |
mlir | |
Include the generated interface declarations. | |
mlir::vector | |
mlir::vector::detail | |
Macros | |
#define | GET_ATTRDEF_LIST |
#define | GET_OP_LIST |
#define | GET_ATTRDEF_CLASSES |
#define | GET_OP_CLASSES |
Enumerations | |
enum class | MaskFormat { AllTrue = 0 , AllFalse = 1 , Unknown = 2 } |
Helper enum to classify mask value. More... | |
Functions | |
static MaskFormat | getMaskFormat (Value mask) |
Helper method to classify a mask value. More... | |
static bool | isSupportedCombiningKind (CombiningKind combiningKind, Type elementType) |
static LogicalResult | incSlicePosition (MutableArrayRef< int64_t > position, ArrayRef< int64_t > shape, ArrayRef< int64_t > offsets) |
static bool | verifyDimMap (VectorType lhsType, VectorType rhsType, const std::vector< std::pair< int64_t, int64_t >> &map) |
static LogicalResult | verifyOutputShape (ContractionOp op, VectorType lhsType, VectorType rhsType, Type accType, Type resType, const std::vector< std::pair< int64_t, int64_t >> &contractingDimMap, const std::vector< std::pair< int64_t, int64_t >> &batchDimMap) |
static int64_t | getResultIndex (AffineMap map, AffineExpr targetExpr) |
static std::vector< std::pair< int64_t, int64_t > > | getDimMap (ArrayRef< AffineMap > indexingMaps, ArrayAttr iteratorTypes, IteratorType targetIteratorType, MLIRContext *context) |
template<typename IntType > | |
static SmallVector< IntType > | extractVector (ArrayAttr arrayAttr) |
static LogicalResult | foldExtractOpFromExtractChain (ExtractOp extractOp) |
Fold the result of chains of ExtractOp in place by simply concatenating the positions. More... | |
static bool | hasZeroDimVectors (Operation *op) |
Returns true if the operation has a 0-D vector type operand or result. More... | |
static Value | foldExtractFromBroadcast (ExtractOp extractOp) |
Fold extractOp with scalar result coming from BroadcastOp or SplatOp. More... | |
static Value | foldExtractFromShapeCast (ExtractOp extractOp) |
static Value | foldExtractFromExtractStrided (ExtractOp extractOp) |
Fold an ExtractOp from ExtractStridedSliceOp. More... | |
static Value | foldExtractStridedOpFromInsertChain (ExtractOp extractOp) |
Fold extract_op fed from a chain of insertStridedSlice ops. More... | |
static void | populateFromInt64AttrArray (ArrayAttr arrayAttr, SmallVectorImpl< int64_t > &results) |
static llvm::SetVector< int64_t > | computeBroadcastedUnitDims (ArrayRef< int64_t > srcShape, ArrayRef< int64_t > dstShape) |
Return the dimensions of the result vector that were formerly ones in the source tensor and thus correspond to "dim-1" broadcasting. More... | |
static bool | isStepIndexArray (ArrayAttr idxArr, uint64_t begin, size_t width) |
template<typename OpType > | |
static LogicalResult | isIntegerArrayAttrSmallerThanShape (OpType op, ArrayAttr arrayAttr, ArrayRef< int64_t > shape, StringRef attrName) |
template<typename OpType > | |
static LogicalResult | isIntegerArrayAttrConfinedToRange (OpType op, ArrayAttr arrayAttr, int64_t min, int64_t max, StringRef attrName, bool halfOpen=true) |
template<typename OpType > | |
static LogicalResult | isIntegerArrayAttrConfinedToShape (OpType op, ArrayAttr arrayAttr, ArrayRef< int64_t > shape, StringRef attrName, bool halfOpen=true, int64_t min=0) |
template<typename OpType > | |
static LogicalResult | isSumOfIntegerArrayAttrConfinedToShape (OpType op, ArrayAttr arrayAttr1, ArrayAttr arrayAttr2, ArrayRef< int64_t > shape, StringRef attrName1, StringRef attrName2, bool halfOpen=true, int64_t min=1) |
static ArrayAttr | makeI64ArrayAttr (ArrayRef< int64_t > values, MLIRContext *context) |
static Type | inferStridedSliceOpResultType (VectorType vectorType, ArrayAttr offsets, ArrayAttr sizes, ArrayAttr strides) |
static LogicalResult | foldExtractStridedOpFromInsertChain (ExtractStridedSliceOp op) |
template<typename EmitFun > | |
static LogicalResult | verifyPermutationMap (AffineMap permutationMap, EmitFun emitOpError) |
static LogicalResult | verifyTransferOp (VectorTransferOpInterface op, ShapedType shapedType, VectorType vectorType, VectorType maskType, VectorType inferredMaskType, AffineMap permutationMap, ArrayAttr inBounds) |
static void | printTransferAttrs (OpAsmPrinter &p, VectorTransferOpInterface op) |
template<typename TransferOp > | |
static bool | isInBounds (TransferOp op, int64_t resultIdx, int64_t indicesIdx) |
template<typename TransferOp > | |
static LogicalResult | foldTransferInBoundsAttribute (TransferOp op) |
template<typename TransferOp > | |
static LogicalResult | foldTransferFullMask (TransferOp op) |
#define GET_ATTRDEF_CLASSES |
#define GET_ATTRDEF_LIST |
#define GET_OP_CLASSES |
#define GET_OP_LIST |
|
strong |
Helper enum to classify mask value.
Enumerator | |
---|---|
AllTrue | |
AllFalse | |
Unknown |
Definition at line 56 of file VectorOps.cpp.
|
static |
Return the dimensions of the result vector that were formerly ones in the source tensor and thus correspond to "dim-1" broadcasting.
Definition at line 2090 of file VectorOps.cpp.
|
static |
Definition at line 1302 of file VectorOps.cpp.
|
static |
Fold extractOp with scalar result coming from BroadcastOp or SplatOp.
Definition at line 1582 of file VectorOps.cpp.
References mlir::Operation::getOperand(), mlir::Value::getType(), and hasZeroDimVectors().
|
static |
Fold an ExtractOp from ExtractStridedSliceOp.
Definition at line 1715 of file VectorOps.cpp.
References hasZeroDimVectors().
|
static |
Definition at line 1645 of file VectorOps.cpp.
References delinearize(), hasZeroDimVectors(), and mlir::linearize().
|
static |
Fold the result of chains of ExtractOp in place by simply concatenating the positions.
Definition at line 1310 of file VectorOps.cpp.
References mlir::failure(), and mlir::success().
|
static |
Fold extract_op fed from a chain of insertStridedSlice ops.
Definition at line 1767 of file VectorOps.cpp.
References hasZeroDimVectors().
|
static |
Definition at line 3270 of file VectorOps.cpp.
|
static |
Definition at line 3935 of file VectorOps.cpp.
|
static |
Definition at line 3901 of file VectorOps.cpp.
|
static |
Definition at line 1029 of file VectorOps.cpp.
References mlir::detail::enumerate(), mlir::getAffineDimExpr(), and getResultIndex().
|
static |
Helper method to classify a mask value.
Currently, the method looks "under the hood" of a constant value with dense attributes and a constant mask operation (since the client may be called at various stages during progressive lowering).
Definition at line 66 of file VectorOps.cpp.
References AllFalse, AllTrue, mlir::Value::getDefiningOp(), and Unknown.
|
static |
Definition at line 1021 of file VectorOps.cpp.
References mlir::AffineMap::getNumResults(), and mlir::AffineMap::getResult().
Referenced by getDimMap().
|
static |
Returns true if the operation has a 0-D vector type operand or result.
Definition at line 1571 of file VectorOps.cpp.
Referenced by foldExtractFromBroadcast(), foldExtractFromExtractStrided(), foldExtractFromShapeCast(), and foldExtractStridedOpFromInsertChain().
|
static |
Definition at line 264 of file VectorOps.cpp.
References mlir::failure(), and mlir::success().
|
static |
Definition at line 3192 of file VectorOps.cpp.
References mlir::get().
|
static |
Definition at line 3884 of file VectorOps.cpp.
|
static |
Definition at line 2752 of file VectorOps.cpp.
|
static |
Definition at line 2772 of file VectorOps.cpp.
|
static |
Definition at line 2737 of file VectorOps.cpp.
|
static |
Definition at line 2378 of file VectorOps.cpp.
|
static |
Definition at line 2793 of file VectorOps.cpp.
|
static |
Definition at line 129 of file VectorOps.cpp.
References mlir::Type::isIntOrIndex(), and mlir::Type::isIntOrIndexOrFloat().
|
static |
Definition at line 2814 of file VectorOps.cpp.
References mlir::get().
|
static |
Definition at line 2069 of file VectorOps.cpp.
|
static |
Definition at line 3738 of file VectorOps.cpp.
|
static |
Definition at line 809 of file VectorOps.cpp.
|
static |
Definition at line 820 of file VectorOps.cpp.
|
static |
Definition at line 3624 of file VectorOps.cpp.
References mlir::AffineMap::getNumInputs(), mlir::AffineMap::getResults(), and mlir::success().
|
static |
Definition at line 3653 of file VectorOps.cpp.