MLIR  16.0.0git
Passes.h
Go to the documentation of this file.
1 //===- Passes.h - Pass Entrypoints ------------------------------*- 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 // This header file defines prototypes that expose pass constructors.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef MLIR_DIALECT_SCF_TRANSFORMS_PASSES_H_
14 #define MLIR_DIALECT_SCF_TRANSFORMS_PASSES_H_
15 
16 #include "mlir/Pass/Pass.h"
17 
18 namespace mlir {
19 
20 /// Creates a pass that bufferizes the SCF dialect.
21 std::unique_ptr<Pass> createSCFBufferizePass();
22 
23 /// Creates a pass that specializes for loop for unrolling and
24 /// vectorization.
25 std::unique_ptr<Pass> createForLoopSpecializationPass();
26 
27 /// Creates a pass that peels for loops at their upper bounds for
28 /// better vectorization.
29 std::unique_ptr<Pass> createForLoopPeelingPass();
30 
31 /// Creates a pass that canonicalizes affine.min and affine.max operations
32 /// inside of scf.for loops with known lower and upper bounds.
33 std::unique_ptr<Pass> createSCFForLoopCanonicalizationPass();
34 
35 /// Creates a pass that transforms a single ParallelLoop over N induction
36 /// variables into another ParallelLoop over less than N induction variables.
37 std::unique_ptr<Pass> createParallelLoopCollapsingPass();
38 
39 /// Creates a loop fusion pass which fuses parallel loops.
40 std::unique_ptr<Pass> createParallelLoopFusionPass();
41 
42 /// Creates a pass that specializes parallel loop for unrolling and
43 /// vectorization.
44 std::unique_ptr<Pass> createParallelLoopSpecializationPass();
45 
46 /// Creates a pass which tiles innermost parallel loops.
47 /// If noMinMaxBounds, the upper bound of the inner loop will
48 /// be a same value among different outter loop iterations, and
49 /// an additional inbound check will be emitted inside the internal
50 /// loops.
51 std::unique_ptr<Pass>
53  bool noMinMaxBounds = false);
54 
55 /// Creates a pass which folds arith ops on induction variable into
56 /// loop range.
57 std::unique_ptr<Pass> createForLoopRangeFoldingPass();
58 
59 // Creates a pass which lowers for loops into while loops.
60 std::unique_ptr<Pass> createForToWhileLoopPass();
61 
62 //===----------------------------------------------------------------------===//
63 // Registration
64 //===----------------------------------------------------------------------===//
65 
66 /// Generate the code for registering passes.
67 #define GEN_PASS_REGISTRATION
68 #include "mlir/Dialect/SCF/Transforms/Passes.h.inc"
69 
70 } // namespace mlir
71 
72 #endif // MLIR_DIALECT_SCF_TRANSFORMS_PASSES_H_
Include the generated interface declarations.
std::unique_ptr< Pass > createParallelLoopSpecializationPass()
Creates a pass that specializes parallel loop for unrolling and vectorization.
std::unique_ptr< Pass > createSCFForLoopCanonicalizationPass()
Creates a pass that canonicalizes affine.min and affine.max operations inside of scf.for loops with known lower and upper bounds.
std::unique_ptr< Pass > createForLoopRangeFoldingPass()
Creates a pass which folds arith ops on induction variable into loop range.
std::unique_ptr< Pass > createParallelLoopCollapsingPass()
Creates a pass that transforms a single ParallelLoop over N induction variables into another Parallel...
std::unique_ptr< Pass > createForLoopSpecializationPass()
Creates a pass that specializes for loop for unrolling and vectorization.
std::unique_ptr< Pass > createForLoopPeelingPass()
Creates a pass that peels for loops at their upper bounds for better vectorization.
std::unique_ptr< Pass > createForToWhileLoopPass()
Definition: ForToWhile.cpp:112
std::unique_ptr< Pass > createSCFBufferizePass()
Creates a pass that bufferizes the SCF dialect.
Definition: Bufferize.cpp:40
std::unique_ptr< Pass > createParallelLoopTilingPass(llvm::ArrayRef< int64_t > tileSize={}, bool noMinMaxBounds=false)
Creates a pass which tiles innermost parallel loops.
std::unique_ptr< Pass > createParallelLoopFusionPass()
Creates a loop fusion pass which fuses parallel loops.