MLIR
20.0.0git
|
#include "mlir/Dialect/Vector/Utils/VectorUtils.h"
#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h"
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Utils/IndexingUtils.h"
#include "mlir/Dialect/Vector/IR/VectorOps.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/IntegerSet.h"
#include "mlir/IR/Operation.h"
#include "mlir/IR/TypeUtilities.h"
#include "mlir/Support/LLVM.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SetVector.h"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "vector-utils" |
#define | DBGS() (llvm::dbgs() << '[' << DEBUG_TYPE << "] ") |
#define | LDBG(X) LLVM_DEBUG(DBGS() << X << "\n") |
Functions | |
static bool | areDimsTransposedIn2DSlice (int64_t dim0, int64_t dim1, ArrayRef< int64_t > transp) |
Given the n-D transpose pattern 'transp', return true if 'dim0' and 'dim1' should be transposed with each other within the context of their 2D transposition slice. More... | |
static AffineMap | makePermutationMap (ArrayRef< Value > indices, const DenseMap< Operation *, unsigned > &enclosingLoopToVectorDim) |
Constructs a permutation map from memref indices to vector dimension. More... | |
template<typename T > | |
static SetVector< Operation * > | getParentsOfType (Block *block) |
Implementation detail that walks up the parents and records the ones with the specified type. More... | |
static SetVector< Operation * > | getEnclosingforOps (Block *block) |
Returns the enclosing AffineForOp, from closest to farthest. More... | |
#define DBGS | ( | ) | (llvm::dbgs() << '[' << DEBUG_TYPE << "] ") |
Definition at line 34 of file VectorUtils.cpp.
#define DEBUG_TYPE "vector-utils" |
Definition at line 32 of file VectorUtils.cpp.
#define LDBG | ( | X | ) | LLVM_DEBUG(DBGS() << X << "\n") |
Definition at line 35 of file VectorUtils.cpp.
|
static |
Given the n-D transpose pattern 'transp', return true if 'dim0' and 'dim1' should be transposed with each other within the context of their 2D transposition slice.
Example 1: dim0 = 0, dim1 = 2, transp = [2, 1, 0] Return true: dim0 and dim1 are transposed within the context of their 2D transposition slice ([1, 0]).
Example 2: dim0 = 0, dim1 = 1, transp = [2, 1, 0] Return true: dim0 and dim1 are transposed within the context of their 2D transposition slice ([1, 0]). Paradoxically, note how dim1 (1) is not transposed within the full context of the transposition.
Example 3: dim0 = 0, dim1 = 1, transp = [2, 0, 1] Return false: dim0 and dim1 are not transposed within the context of their 2D transposition slice ([0, 1]). Paradoxically, note how dim0 (0) and dim1 (1) are transposed within the full context of the of the transposition.
Definition at line 68 of file VectorUtils.cpp.
Referenced by mlir::vector::isTranspose2DSlice().
Returns the enclosing AffineForOp, from closest to farthest.
Definition at line 179 of file VectorUtils.cpp.
Implementation detail that walks up the parents and records the ones with the specified type.
TODO: could also be implemented as a collect parents followed by a filter and made available outside this file.
Definition at line 165 of file VectorUtils.cpp.
References mlir::Block::getParentOp().
|
static |
Constructs a permutation map from memref indices to vector dimension.
The implementation uses the knowledge of the mapping of enclosing loop to vector dimension. enclosingLoopToVectorDim
carries this information as a map with:
Returns an empty AffineMap if enclosingLoopToVectorDim
is empty, signalling that no permutation map can be constructed given enclosingLoopToVectorDim
.
Examples can be found in the documentation of makePermutationMap
, in the header file.
Definition at line 126 of file VectorUtils.cpp.
References mlir::AffineMap::get(), mlir::getAffineConstantExpr(), mlir::getAffineDimExpr(), and mlir::affine::getInvariantAccesses().