MLIR  20.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/Interfaces/SideEffectInterfaces.h"
#include "mlir/Transforms/RegionUtils.h"
#include "llvm/ADT/SetVector.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 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 39 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 1784 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