MLIR  16.0.0git
Bufferize.h
Go to the documentation of this file.
1 //===- Bufferize.h - Bufferization Utilities --------------------*- 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 // We use the term "bufferize" to mean conversion from tensor types to
10 // memref types.
11 //
12 // Generally speaking, for each op that operates on tensor types, the
13 // `BufferizableOpInterface` needs to be implemented. This file contains the
14 // bufferization driver that is responsible for bufferizing the ops in the right
15 // order, etc.
16 //
17 //===----------------------------------------------------------------------===//
18 
19 #ifndef MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_BUFFERIZE_H
20 #define MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_BUFFERIZE_H
21 
23 
24 namespace mlir {
25 namespace bufferization {
26 
27 class AnalysisState;
28 struct BufferizationOptions;
29 class OpFilter;
30 
31 /// A helper type converter class that automatically populates the relevant
32 /// materializations and type conversions for bufferization.
34 public:
36 };
37 
38 /// Marks ops used by bufferization for type conversion materializations as
39 /// "legal" in the given ConversionTarget.
40 ///
41 /// This function should be called by all bufferization passes using
42 /// BufferizeTypeConverter so that materializations work properly. One exception
43 /// is bufferization passes doing "full" conversions, where it can be desirable
44 /// for even the materializations to remain illegal so that they are eliminated,
45 /// such as via the patterns in
46 /// populateEliminateBufferizeMaterializationsPatterns.
48 
49 /// Populate patterns to eliminate bufferize materializations.
50 ///
51 /// In particular, these are the tensor_load/buffer_cast ops.
53  BufferizeTypeConverter &typeConverter, RewritePatternSet &patterns);
54 
55 /// Bufferize `op` and its nested ops that implement `BufferizableOpInterface`.
56 /// If `copyBeforeWrite`, buffers are duplicated and copied before any tensor
57 /// use that bufferizes to a memory write.
58 ///
59 /// Note: In the general case, it unsafe to run with `copyBeforeWrite = false`
60 /// because read-after-write conflicts may materialize during bufferization.
61 /// `copyBeforeWrite = false` is safe only if the input IR is guaranteed to
62 /// *not* require any out-of-place bufferization.
63 ///
64 /// Note: This function bufferizes ops without utilizing analysis results. It
65 /// can be used to implement partial bufferization passes.
67  bool copyBeforeWrite = true,
68  const OpFilter *opFilter = nullptr);
69 
71 
72 } // namespace bufferization
73 } // namespace mlir
74 
75 #endif // MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_BUFFERIZE_H
static llvm::ManagedStatic< PassManagerOptions > options
This class describes a specific conversion target.
Operation is a basic unit of execution within MLIR.
Definition: Operation.h:31
Type conversion class.
A helper type converter class that automatically populates the relevant materializations and type con...
Definition: Bufferize.h:33
BufferizeTypeConverter()
Registers conversions into BufferizeTypeConverter.
Definition: Bufferize.cpp:51
LogicalResult bufferizeOp(Operation *op, const BufferizationOptions &options, bool copyBeforeWrite=true, const OpFilter *opFilter=nullptr)
Bufferize op and its nested ops that implement BufferizableOpInterface.
Definition: Bufferize.cpp:398
void populateEliminateBufferizeMaterializationsPatterns(BufferizeTypeConverter &typeConverter, RewritePatternSet &patterns)
Populate patterns to eliminate bufferize materializations.
Definition: Bufferize.cpp:128
void populateBufferizeMaterializationLegality(ConversionTarget &target)
Marks ops used by bufferization for type conversion materializations as "legal" in the given Conversi...
Definition: Bufferize.cpp:91
BufferizationOptions getPartialBufferizationOptions()
Definition: Bufferize.cpp:505
Include the generated interface declarations.
This class represents an efficient way to signal success or failure.
Definition: LogicalResult.h:26
Options for BufferizableOpInterface-based bufferization.