MLIR 22.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
18namespace mlir {
19
20#define GEN_PASS_DECL
21#include "mlir/Dialect/SCF/Transforms/Passes.h.inc"
22
23/// Creates a pass that specializes for loop for unrolling and
24/// vectorization.
25std::unique_ptr<Pass> createForLoopSpecializationPass();
26
27/// Creates a pass that peels for loops at their upper bounds for
28/// better vectorization.
29std::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.
33std::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.
37std::unique_ptr<Pass> createTestSCFParallelLoopCollapsingPass();
38
39/// Creates a loop fusion pass which fuses parallel loops.
40std::unique_ptr<Pass> createParallelLoopFusionPass();
41
42/// Creates a pass that specializes parallel loop for unrolling and
43/// vectorization.
44std::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.
51std::unique_ptr<Pass>
53 bool noMinMaxBounds = false);
54
55/// Creates a pass which folds arith ops on induction variable into
56/// loop range.
57std::unique_ptr<Pass> createForLoopRangeFoldingPass();
58
59/// Creates a pass that converts SCF forall loops to SCF for loops.
60std::unique_ptr<Pass> createForallToForLoopPass();
61
62/// Creates a pass that converts SCF forall loops to SCF parallel loops.
63std::unique_ptr<Pass> createForallToParallelLoopPass();
64
65/// Creates a pass that converts SCF forall loops to SCF parallel loops.
66std::unique_ptr<Pass> createParallelForToNestedForsPass();
67
68// Creates a pass which lowers for loops into while loops.
69std::unique_ptr<Pass> createForToWhileLoopPass();
70
71//===----------------------------------------------------------------------===//
72// Registration
73//===----------------------------------------------------------------------===//
74
75/// Generate the code for registering passes.
76#define GEN_PASS_REGISTRATION
77#include "mlir/Dialect/SCF/Transforms/Passes.h.inc"
78
79} // namespace mlir
80
81#endif // MLIR_DIALECT_SCF_TRANSFORMS_PASSES_H_
Include the generated interface declarations.
std::unique_ptr< Pass > createForallToParallelLoopPass()
Creates a pass that converts SCF forall loops to SCF parallel loops.
std::unique_ptr< Pass > createParallelLoopSpecializationPass()
Creates a pass that specializes parallel loop for unrolling and vectorization.
std::unique_ptr< Pass > createForLoopSpecializationPass()
Creates a pass that specializes for loop for unrolling and vectorization.
std::unique_ptr< Pass > createForallToForLoopPass()
Creates a pass that converts SCF forall loops to SCF for loops.
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 > createForLoopRangeFoldingPass()
Creates a pass which folds arith ops on induction variable into loop range.
std::unique_ptr< Pass > createParallelForToNestedForsPass()
Creates a pass that converts SCF forall loops to SCF parallel loops.
std::unique_ptr< Pass > createForToWhileLoopPass()
std::unique_ptr< Pass > createForLoopPeelingPass()
Creates a pass that peels for loops at their upper bounds for better vectorization.
std::unique_ptr< Pass > createTestSCFParallelLoopCollapsingPass()
Creates a pass that transforms a single ParallelLoop over N induction variables into another Parallel...
std::unique_ptr< Pass > createSCFForLoopCanonicalizationPass()
Creates a pass that canonicalizes affine.min and affine.max operations inside of scf....
std::unique_ptr< Pass > createParallelLoopFusionPass()
Creates a loop fusion pass which fuses parallel loops.