MLIR 24.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
17
18#include <optional>
19
20namespace mlir {
21
22namespace arith {
23enum class AtomicRMWKind : uint64_t;
24class AtomicRMWKindAttr;
25} // namespace arith
26
27class Location;
28class OpBuilder;
29
30raw_ostream &operator<<(raw_ostream &os, const Range &range);
31
32/// Return the list of Range (i.e. offset, size, stride). Each Range
33/// entry contains either the dynamic value or a ConstantIndexOp constructed
34/// with `b` at location `loc`.
35SmallVector<Range, 8> getOrCreateRanges(OffsetSizeAndStrideOpInterface op,
36 OpBuilder &b, Location loc);
37
38namespace memref {
39
40/// This is a common utility used for patterns of the form
41/// "someop(memref.cast) -> someop". It folds the source of any memref.cast
42/// into the root operation directly.
43LogicalResult foldMemRefCast(Operation *op, Value inner = nullptr);
44
45/// Return an unranked/ranked tensor type for the given unranked/ranked memref
46/// type.
47Type getTensorTypeFromMemRefType(Type type);
48
49/// Finds a single dealloc operation for the given allocated value. If there
50/// are > 1 deallocates for `allocValue`, returns std::nullopt, else returns the
51/// single deallocate if it exists or nullptr.
52std::optional<Operation *> findDealloc(Value allocValue);
53
54/// Return the dimension of the given memref value.
55OpFoldResult getMixedSize(OpBuilder &builder, Location loc, Value value,
56 int64_t dim);
57
58/// Return the dimensions of the given memref value.
59SmallVector<OpFoldResult> getMixedSizes(OpBuilder &builder, Location loc,
60 Value value);
61
62/// Create a rank-reducing SubViewOp @[0 .. 0] with strides [1 .. 1] and
63/// appropriate sizes (i.e. `memref.getSizes()`) to reduce the rank of `memref`
64/// to that of `targetShape`.
65Value createCanonicalRankReducingSubViewOp(OpBuilder &b, Location loc,
66 Value memref,
67 ArrayRef<int64_t> targetShape);
68} // namespace memref
69} // namespace mlir
70
71//===----------------------------------------------------------------------===//
72// MemRef Dialect Operations
73//===----------------------------------------------------------------------===//
74
75#define GET_OP_CLASSES
76#include "mlir/Dialect/MemRef/IR/MemRefOps.h.inc"
77
78#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:210
Type getTensorTypeFromMemRefType(Type type)
Return an unranked/ranked tensor type for the given unranked/ranked memref type.
Definition MemRefOps.cpp:63
OpFoldResult getMixedSize(OpBuilder &builder, Location loc, Value value, int64_t dim)
Return the dimension of the given memref value.
Definition MemRefOps.cpp:71
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:48
SmallVector< OpFoldResult > getMixedSizes(OpBuilder &builder, Location loc, Value value)
Return the dimensions of the given memref value.
Definition MemRefOps.cpp:80
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...