MLIR 23.0.0git
MemRef.h
Go to the documentation of this file.
1//===- MemRef.h - MemRef dialect --------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef MLIR_DIALECT_MEMREF_IR_MEMREF_H_
10#define MLIR_DIALECT_MEMREF_IR_MEMREF_H_
11
16#include "mlir/IR/Dialect.h"
29
30#include <optional>
31
32namespace mlir {
33
34namespace arith {
35enum class AtomicRMWKind : uint64_t;
36class AtomicRMWKindAttr;
37} // namespace arith
38
39class Location;
40class OpBuilder;
41
42raw_ostream &operator<<(raw_ostream &os, const Range &range);
43
44/// Return the list of Range (i.e. offset, size, stride). Each Range
45/// entry contains either the dynamic value or a ConstantIndexOp constructed
46/// with `b` at location `loc`.
47SmallVector<Range, 8> getOrCreateRanges(OffsetSizeAndStrideOpInterface op,
48 OpBuilder &b, Location loc);
49
50namespace memref {
51
52/// This is a common utility used for patterns of the form
53/// "someop(memref.cast) -> someop". It folds the source of any memref.cast
54/// into the root operation directly.
55LogicalResult foldMemRefCast(Operation *op, Value inner = nullptr);
56
57/// Return an unranked/ranked tensor type for the given unranked/ranked memref
58/// type.
59Type getTensorTypeFromMemRefType(Type type);
60
61/// Finds a single dealloc operation for the given allocated value. If there
62/// are > 1 deallocates for `allocValue`, returns std::nullopt, else returns the
63/// single deallocate if it exists or nullptr.
64std::optional<Operation *> findDealloc(Value allocValue);
65
66/// Return the dimension of the given memref value.
67OpFoldResult getMixedSize(OpBuilder &builder, Location loc, Value value,
68 int64_t dim);
69
70/// Return the dimensions of the given memref value.
71SmallVector<OpFoldResult> getMixedSizes(OpBuilder &builder, Location loc,
72 Value value);
73
74/// Create a rank-reducing SubViewOp @[0 .. 0] with strides [1 .. 1] and
75/// appropriate sizes (i.e. `memref.getSizes()`) to reduce the rank of `memref`
76/// to that of `targetShape`.
77Value createCanonicalRankReducingSubViewOp(OpBuilder &b, Location loc,
78 Value memref,
79 ArrayRef<int64_t> targetShape);
80} // namespace memref
81} // namespace mlir
82
83//===----------------------------------------------------------------------===//
84// MemRef Dialect
85//===----------------------------------------------------------------------===//
86
87#include "mlir/Dialect/MemRef/IR/MemRefOpsDialect.h.inc"
88
89//===----------------------------------------------------------------------===//
90// MemRef Dialect Operations
91//===----------------------------------------------------------------------===//
92
93#define GET_OP_CLASSES
94#include "mlir/Dialect/MemRef/IR/MemRefOps.h.inc"
95
96#endif // MLIR_DIALECT_MEMREF_IR_MEMREF_H_
b
Return true if permutation is a valid permutation of the outer_dims_perm (case OuterOrInnerPerm::Oute...
This class defines the main interface for locations in MLIR and acts as a non-nullable wrapper around...
Definition Location.h:76
This class helps build Operations.
Definition Builders.h:209
Type getTensorTypeFromMemRefType(Type type)
Return an unranked/ranked tensor type for the given unranked/ranked memref type.
Definition MemRefOps.cpp:62
OpFoldResult getMixedSize(OpBuilder &builder, Location loc, Value value, int64_t dim)
Return the dimension of the given memref value.
Definition MemRefOps.cpp:70
std::optional< Operation * > findDealloc(Value allocValue)
Finds a single dealloc operation for the given allocated value.
LogicalResult foldMemRefCast(Operation *op, Value inner=nullptr)
This is a common utility used for patterns of the form "someop(memref.cast) -> someop".
Definition MemRefOps.cpp:47
SmallVector< OpFoldResult > getMixedSizes(OpBuilder &builder, Location loc, Value value)
Return the dimensions of the given memref value.
Definition MemRefOps.cpp:79
Value createCanonicalRankReducingSubViewOp(OpBuilder &b, Location loc, Value memref, ArrayRef< int64_t > targetShape)
Create a rank-reducing SubViewOp @[0 .
Include the generated interface declarations.
raw_ostream & operator<<(raw_ostream &os, const AliasResult &result)
SmallVector< Range, 8 > getOrCreateRanges(OffsetSizeAndStrideOpInterface op, OpBuilder &b, Location loc)
Return the list of Range (i.e.
Represents a range (offset, size, and stride) where each element of the triple may be dynamic or stat...