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/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 <numeric>
#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 WarpExecuteOnLane0Op moveRegionToNewWarpOpAndReplaceReturns (RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, ValueRange newYieldedValues, TypeRange newReturnTypes)
 Helper to create a new WarpExecuteOnLane0Op with different signature. More...
 
static WarpExecuteOnLane0Op moveRegionToNewWarpOpAndAppendReturns (RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, ValueRange newYieldedValues, TypeRange newReturnTypes, llvm::SmallVector< size_t > &indices)
 Helper to create a new WarpExecuteOnLane0Op region with extra outputs. More...
 
static bool canBeHoisted (Operation *op, function_ref< bool(Value)> definedOutside)
 Helper to know if an op can be hoisted out of the region. More...
 
static OpOperandgetWarpResult (WarpExecuteOnLane0Op warpOp, const std::function< bool(Operation *)> &fn)
 Return a value yielded by warpOp which statifies the filter lamdba condition and is not dead. More...
 
static OperationcloneOpWithOperandsAndTypes (RewriterBase &rewriter, Location loc, Operation *op, ArrayRef< Value > operands, ArrayRef< Type > resultTypes)
 

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 = vector.warp_execute_on_lane_0(%arg0) -> (vector<1x16x2xf32>) {
...
vector.yield %3 : vector<32x16x64xf32>
}

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

Definition at line 37 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 226 of file VectorDistribute.cpp.

◆ cloneOpWithOperandsAndTypes()

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

Definition at line 251 of file VectorDistribute.cpp.

◆ getWarpResult()

static OpOperand* getWarpResult ( WarpExecuteOnLane0Op  warpOp,
const std::function< bool(Operation *)> &  fn 
)
static

Return a value yielded by warpOp which statifies the filter lamdba condition and is not dead.

Definition at line 234 of file VectorDistribute.cpp.

References mlir::Value::getDefiningOp().

◆ moveRegionToNewWarpOpAndAppendReturns()

static WarpExecuteOnLane0Op moveRegionToNewWarpOpAndAppendReturns ( RewriterBase rewriter,
WarpExecuteOnLane0Op  warpOp,
ValueRange  newYieldedValues,
TypeRange  newReturnTypes,
llvm::SmallVector< size_t > &  indices 
)
static

Helper to create a new WarpExecuteOnLane0Op region with extra outputs.

indices return the index of each new output.

Definition at line 192 of file VectorDistribute.cpp.

References mlir::detail::enumerate(), moveRegionToNewWarpOpAndReplaceReturns(), and mlir::RewriterBase::replaceOp().

◆ moveRegionToNewWarpOpAndReplaceReturns()

static WarpExecuteOnLane0Op moveRegionToNewWarpOpAndReplaceReturns ( RewriterBase rewriter,
WarpExecuteOnLane0Op  warpOp,
ValueRange  newYieldedValues,
TypeRange  newReturnTypes 
)
static