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 #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. 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> createTestSCFParallelLoopCollapsingPass(); 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> 52 createParallelLoopTilingPass(llvm::ArrayRef<int64_t> tileSize = {}, 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 that converts SCF forall loops to SCF for loops. 60 std::unique_ptr<Pass> createForallToForLoopPass(); 61 62 /// Creates a pass that converts SCF forall loops to SCF parallel loops. 63 std::unique_ptr<Pass> createForallToParallelLoopPass(); 64 65 // Creates a pass which lowers for loops into while loops. 66 std::unique_ptr<Pass> createForToWhileLoopPass(); 67 68 //===----------------------------------------------------------------------===// 69 // Registration 70 //===----------------------------------------------------------------------===// 71 72 /// Generate the code for registering passes. 73 #define GEN_PASS_REGISTRATION 74 #include "mlir/Dialect/SCF/Transforms/Passes.h.inc" 75 76 } // namespace mlir 77 78 #endif // MLIR_DIALECT_SCF_TRANSFORMS_PASSES_H_ 79