#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Arith/Utils/Utils.h"
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/Bufferization/IR/Bufferization.h"
#include "mlir/Dialect/Linalg/IR/Linalg.h"
#include "mlir/Dialect/Linalg/Transforms/Transforms.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Utils/StaticValueUtils.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/PatternMatch.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Debug.h"
usingnamespacemlir;
usingnamespacemlir::tensor;
static Value createInserts(RewriterBase &rewriter, Location loc, int dim,
Value destination, ArrayRef<int64_t> shape,
ArrayRef<Value> constants,
OperandRange::iterator &elementIt,
SmallVectorImpl<Value> &indices) { … }
static void createMemcpy(OpBuilder &b, Location loc, Value tensorSource,
Value memrefDest,
const linalg::BufferizeToAllocationOptions &options) { … }
static Operation *movePaddingToFillOrGenericOp(RewriterBase &rewriter,
Location loc, PadOp padOp,
Value dest) { … }
static SmallVector<Value> reifyOrComputeDynamicSizes(OpBuilder &b,
Value value) { … }
static Value
createAllocationForTensor(RewriterBase &rewriter, Location loc, Value value,
const linalg::BufferizeToAllocationOptions &options,
Attribute memorySpace = { … }
Value linalg::bufferizeToAllocation(
RewriterBase &rewriter, const linalg::BufferizeToAllocationOptions &options,
PadOp padOp, Attribute memorySpace, Operation *insertionPoint) { … }
Value linalg::bufferizeToAllocation(
RewriterBase &rewriter, const linalg::BufferizeToAllocationOptions &options,
vector::MaskOp maskOp, Attribute memorySpace, Operation *insertionPoint) { … }
Value linalg::bufferizeToAllocation(
RewriterBase &rewriter, const linalg::BufferizeToAllocationOptions &options,
bufferization::AllocTensorOp allocTensorOp, Attribute memorySpace,
Operation *insertionPoint) { … }
FailureOr<Operation *> mlir::linalg::rewriteInDestinationPassingStyle(
RewriterBase &rewriter, tensor::FromElementsOp fromElementsOp) { … }
FailureOr<Operation *>
mlir::linalg::rewriteInDestinationPassingStyle(RewriterBase &rewriter,
tensor::GenerateOp generateOp) { … }
FailureOr<Operation *>
mlir::linalg::rewriteInDestinationPassingStyle(RewriterBase &rewriter,
tensor::PadOp padOp) { … }
Value linalg::bufferizeToAllocation(
RewriterBase &rewriter, const linalg::BufferizeToAllocationOptions &options,
Operation *op, Attribute memorySpace, Operation *insertionPoint) { … }
namespace {
template <typename OpTy>
LogicalResult rewriteOpInDestinationPassingStyle(OpTy op,
PatternRewriter &rewriter) { … }
}
void linalg::populateConvertToDestinationStylePatterns(
RewritePatternSet &patterns) { … }