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