MLIR  22.0.0git
Functions
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. More...
 
static int getDistributedDim (VectorType sequentialType, VectorType distributedType)
 Given a sequential and distributed vector type, returns the distributed dimension. More...
 
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. More...
 

Function Documentation

◆ calculateImplicitMap()

static 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>) {
...
gpu.yield %3 : vector<32x16x64xf32>
}

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()

static 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 2082 of file VectorDistribute.cpp.

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

◆ cloneOpWithOperandsAndTypes()

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

◆ getDistributedDim()

static 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.