My Project
SliceAnalysis.h
Go to the documentation of this file.
1 //===- SliceAnalysis.h - Analysis for Transitive UseDef chains --*- C++ -*-===//
2 //
3 // Part of the MLIR 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_ANALYSIS_SLICEANALYSIS_H_
10 #define MLIR_ANALYSIS_SLICEANALYSIS_H_
11 
12 #include <functional>
13 #include <vector>
14 
15 #include "mlir/Support/LLVM.h"
16 
17 #include "llvm/ADT/SetVector.h"
18 
19 namespace mlir {
20 
21 class Operation;
22 
27 using TransitiveFilter = std::function<bool(Operation *)>;
28 
70 void getForwardSlice(
71  Operation *op, llvm::SetVector<Operation *> *forwardSlice,
72  TransitiveFilter filter = /* pass-through*/
73  [](Operation *) { return true; });
74 
109 void getBackwardSlice(
110  Operation *op, llvm::SetVector<Operation *> *backwardSlice,
111  TransitiveFilter filter = /* pass-through*/
112  [](Operation *) { return true; });
113 
191 llvm::SetVector<Operation *> getSlice(
192  Operation *op,
193  TransitiveFilter backwardFilter = /* pass-through*/
194  [](Operation *) { return true; },
195  TransitiveFilter forwardFilter = /* pass-through*/
196  [](Operation *) { return true; });
197 
201 llvm::SetVector<Operation *>
202 topologicalSort(const llvm::SetVector<Operation *> &toSort);
203 
204 } // end namespace mlir
205 
206 #endif // MLIR_ANALYSIS_SLICEANALYSIS_H_
Definition: InferTypeOpInterface.cpp:20
Definition: Operation.h:27
void getForwardSlice(Operation *op, llvm::SetVector< Operation *> *forwardSlice, TransitiveFilter filter=[](Operation *) { return true;})
llvm::SetVector< Operation * > topologicalSort(const llvm::SetVector< Operation *> &toSort)
std::function< bool(Operation *)> TransitiveFilter
Definition: SliceAnalysis.h:27
void getBackwardSlice(Operation *op, llvm::SetVector< Operation *> *backwardSlice, TransitiveFilter filter=[](Operation *) { return true;})
llvm::SetVector< Operation * > getSlice(Operation *op, TransitiveFilter backwardFilter=[](Operation *) { return true;}, TransitiveFilter forwardFilter=[](Operation *) { return true;})
Definition: SliceAnalysis.cpp:134