1 //===------------ SCFToSPIRV.h - Pass entrypoint ----------------*- 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 // Provides patterns for lowering SCF ops to SPIR-V dialect.
10 //
11 //===----------------------------------------------------------------------===//
12 #ifndef MLIR_CONVERSION_SCFTOSPIRV_SCFTOSPIRV_H_
13 #define MLIR_CONVERSION_SCFTOSPIRV_SCFTOSPIRV_H_
14 
15 #include <memory>
16 
17 namespace mlir {
18 class MLIRContext;
19 class Pass;
20 
21 // Owning list of rewriting patterns.
22 class OwningRewritePatternList;
23 class SPIRVTypeConverter;
24 struct ScfToSPIRVContextImpl;
25 
26 struct ScfToSPIRVContext {
27   ScfToSPIRVContext();
28   ~ScfToSPIRVContext();
29 
getImplScfToSPIRVContext30   ScfToSPIRVContextImpl *getImpl() { return impl.get(); }
31 
32 private:
33   std::unique_ptr<ScfToSPIRVContextImpl> impl;
34 };
35 
36 /// Collects a set of patterns to lower from scf.for, scf.if, and
37 /// loop.terminator to CFG operations within the SPIR-V dialect.
38 void populateSCFToSPIRVPatterns(MLIRContext *context,
39                                 SPIRVTypeConverter &typeConverter,
40                                 ScfToSPIRVContext &scfToSPIRVContext,
41                                 OwningRewritePatternList &patterns);
42 } // namespace mlir
43 
44 #endif // MLIR_CONVERSION_SCFTOSPIRV_SCFTOSPIRV_H_
45