MLIR 22.0.0git
VectorDistribute.cpp File Reference
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
#include "mlir/Dialect/GPU/Utils/DistributionUtils.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/SCF/IR/SCF.h"
#include "mlir/Dialect/Vector/IR/VectorOps.h"
#include "mlir/Dialect/Vector/Transforms/VectorDistribution.h"
#include "mlir/IR/AffineExpr.h"
#include "mlir/IR/Attributes.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"
#include "mlir/Transforms/RegionUtils.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVectorExtras.h"
#include "llvm/Support/FormatVariadic.h"
#include <utility>

Go to the source code of this file.

Functions

static AffineMap calculateImplicitMap (VectorType sequentialType, VectorType distributedType)
 Currently the distribution map is implicit based on the vector shape.
static int getDistributedDim (VectorType sequentialType, VectorType distributedType)
 Given a sequential and distributed vector type, returns the distributed dimension.
static OperationcloneOpWithOperandsAndTypes (RewriterBase &rewriter, Location loc, Operation *op, ArrayRef< Value > operands, ArrayRef< Type > resultTypes)
static bool canBeHoisted (Operation *op, function_ref< bool(Value)> definedOutside)
 Helper to know if an op can be hoisted out of the region.

Function Documentation

◆ calculateImplicitMap()

AffineMap calculateImplicitMap ( VectorType sequentialType,
VectorType distributedType )
static

Currently the distribution map is implicit based on the vector shape.

In the future it will be part of the op. Example:

%0 = gpu.warp_execute_on_lane_0(%arg0) -> (vector<1x16x2xf32>) {
...
}

Would have an implicit map of: (d0, d1, d2) -> (d0, d2)

Definition at line 42 of file VectorDistribute.cpp.

References mlir::AffineMap::get(), and mlir::getAffineDimExpr().

◆ canBeHoisted()

bool canBeHoisted ( Operation * op,
function_ref< bool(Value)> definedOutside )
static

Helper to know if an op can be hoisted out of the region.

Definition at line 2308 of file VectorDistribute.cpp.

References mlir::Operation::getNumRegions(), mlir::Operation::getOperands(), and mlir::isMemoryEffectFree().

Referenced by hoistSubsetAtIterArg().

◆ cloneOpWithOperandsAndTypes()

Operation * cloneOpWithOperandsAndTypes ( RewriterBase & rewriter,
Location loc,
Operation * op,
ArrayRef< Value > operands,
ArrayRef< Type > resultTypes )
static

◆ getDistributedDim()

int getDistributedDim ( VectorType sequentialType,
VectorType distributedType )
static

Given a sequential and distributed vector type, returns the distributed dimension.

This function expects that only a single dimension is distributed.

Definition at line 61 of file VectorDistribute.cpp.