|
1 | | -//===- Passes.h - Transform Pass Construction and Registration --*- C++ -*-===// |
2 | | -// |
3 | | -// This file is licensed 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_DIALECT_POLYGEIST_TRANSFORMS_PASSES_H |
10 | | -#define MLIR_DIALECT_POLYGEIST_TRANSFORMS_PASSES_H |
| 1 | +#ifndef POLYGEIST_DIALECT_POLYGEIST_PASSES_H |
| 2 | +#define POLYGEIST_DIALECT_POLYGEIST_PASSES_H |
11 | 3 |
|
| 4 | +#include "mlir/Conversion/LLVMCommon/LoweringOptions.h" |
| 5 | +#include "mlir/Dialect/ControlFlow/IR/ControlFlow.h" |
| 6 | +#include "mlir/Dialect/OpenMP/OpenMPDialect.h" |
12 | 7 | #include "mlir/Pass/Pass.h" |
13 | | - |
| 8 | +#include "mlir/Transforms/GreedyPatternRewriteDriver.h" |
| 9 | +#include "polygeist/Dialect.h" |
14 | 10 | #include <memory> |
15 | 11 |
|
| 12 | +enum PolygeistAlternativesMode { PAM_Static, PAM_PGO_Profile, PAM_PGO_Opt }; |
| 13 | +enum PolygeistGPUStructureMode { |
| 14 | + PGSM_Discard, |
| 15 | + PGSM_BlockThreadWrappers, |
| 16 | + PGSM_ThreadNoop, |
| 17 | + PGSM_BlockThreadNoops |
| 18 | +}; |
| 19 | + |
16 | 20 | namespace mlir { |
17 | 21 | class PatternRewriter; |
| 22 | +class RewritePatternSet; |
18 | 23 | class DominanceInfo; |
19 | | -class LLVMTypeConverter; |
20 | 24 | namespace polygeist { |
21 | | -//===----------------------------------------------------------------------===// |
22 | | -// Patterns |
23 | | -//===----------------------------------------------------------------------===// |
24 | | - |
25 | | -/// Collect a set of patterns to convert memory-related operations from the |
26 | | -/// MemRef dialect to the LLVM dialect forcing a "bare pointer" calling |
27 | | -/// convention. |
28 | | -void populateBareMemRefToLLVMConversionPatterns(LLVMTypeConverter &converter, |
29 | | - RewritePatternSet &patterns); |
30 | | - |
31 | | -#define GEN_PASS_DECL |
32 | | -#include "mlir/Dialect/Polygeist/Transforms/Passes.h.inc" |
33 | | - |
34 | | -std::unique_ptr<Pass> createArgumentPromotionPass(); |
35 | | -std::unique_ptr<Pass> createBarrierRemovalContinuation(); |
36 | | -std::unique_ptr<Pass> createCPUifyPass(); |
37 | | -std::unique_ptr<Pass> createCPUifyPass(const SCFCPUifyOptions &options); |
38 | | -std::unique_ptr<Pass> createCanonicalizeForPass(); |
39 | | -std::unique_ptr<Pass> createDetectReductionPass(); |
40 | | -std::unique_ptr<Pass> |
41 | | -createDetectReductionPass(const DetectReductionOptions &options); |
42 | | -std::unique_ptr<Pass> createInnerSerializationPass(); |
43 | | -std::unique_ptr<Pass> createKernelDisjointSpecializationPass(); |
44 | | -std::unique_ptr<Pass> createKernelDisjointSpecializationPass( |
45 | | - const KernelDisjointSpecializationOptions &options); |
46 | | -std::unique_ptr<Pass> createLICMPass(); |
47 | | -std::unique_ptr<Pass> createLICMPass(const LICMOptions &options); |
48 | | -std::unique_ptr<Pass> createLegalizeForSPIRVPass(); |
49 | | -std::unique_ptr<Pass> createLoopInternalizationPass(); |
50 | | -std::unique_ptr<Pass> |
51 | | -createLoopInternalizationPass(const LoopInternalizationOptions &options); |
| 25 | +std::unique_ptr<Pass> createParallelLICMPass(); |
| 26 | +std::unique_ptr<Pass> createPolygeistMem2RegPass(); |
52 | 27 | std::unique_ptr<Pass> createLoopRestructurePass(); |
53 | | -std::unique_ptr<Pass> createMem2RegPass(); |
| 28 | +std::unique_ptr<Pass> createInnerSerializationPass(); |
| 29 | +std::unique_ptr<Pass> createSerializationPass(); |
| 30 | +std::unique_ptr<Pass> replaceAffineCFGPass(); |
54 | 31 | std::unique_ptr<Pass> createOpenMPOptPass(); |
55 | | -std::unique_ptr<Pass> createParallelLowerPass(); |
| 32 | +std::unique_ptr<Pass> createCanonicalizeForPass(); |
56 | 33 | std::unique_ptr<Pass> createRaiseSCFToAffinePass(); |
| 34 | +std::unique_ptr<Pass> createCPUifyPass(StringRef method = ""); |
| 35 | +std::unique_ptr<Pass> createBarrierRemovalContinuation(); |
| 36 | +std::unique_ptr<Pass> detectReductionPass(); |
57 | 37 | std::unique_ptr<Pass> createRemoveTrivialUsePass(); |
58 | | -std::unique_ptr<Pass> createReplaceAffineCFGPass(); |
59 | | -std::unique_ptr<Pass> createSYCLHostRaisingPass(); |
| 38 | +std::unique_ptr<Pass> createParallelLowerPass( |
| 39 | + bool wrapParallelOps = false, |
| 40 | + PolygeistGPUStructureMode gpuKernelStructureMode = PGSM_Discard); |
| 41 | +std::unique_ptr<Pass> createConvertCudaRTtoCPUPass(); |
| 42 | +std::unique_ptr<Pass> createConvertCudaRTtoGPUPass(); |
| 43 | +std::unique_ptr<Pass> createConvertCudaRTtoHipRTPass(); |
| 44 | +std::unique_ptr<Pass> createFixGPUFuncPass(); |
| 45 | +std::unique_ptr<Pass> createSCFParallelLoopUnrollPass(int unrollFactor = 2); |
| 46 | +std::unique_ptr<Pass> |
| 47 | +createConvertPolygeistToLLVMPass(const LowerToLLVMOptions &options, |
| 48 | + bool useCStyleMemRef, bool onlyGpuModules, |
| 49 | + std::string gpuTarget); |
| 50 | +std::unique_ptr<Pass> createConvertPolygeistToLLVMPass(); |
| 51 | +std::unique_ptr<Pass> createForBreakToWhilePass(); |
60 | 52 | std::unique_ptr<Pass> |
61 | | -createSYCLHostRaisingPass(const SYCLRaiseHostConstructsOptions &options); |
| 53 | +createConvertParallelToGPUPass1(std::string arch = "sm_60"); |
| 54 | +std::unique_ptr<Pass> |
| 55 | +createConvertParallelToGPUPass2(bool emitGPUKernelLaunchBounds = true); |
| 56 | +std::unique_ptr<Pass> createMergeGPUModulesPass(); |
| 57 | +std::unique_ptr<Pass> createConvertToOpaquePtrPass(); |
| 58 | +std::unique_ptr<Pass> createLowerAlternativesPass(); |
| 59 | +std::unique_ptr<Pass> createCollectKernelStatisticsPass(); |
| 60 | +std::unique_ptr<Pass> createPolygeistCanonicalizePass(); |
| 61 | +std::unique_ptr<Pass> |
| 62 | +createPolygeistCanonicalizePass(const GreedyRewriteConfig &config, |
| 63 | + ArrayRef<std::string> disabledPatterns, |
| 64 | + ArrayRef<std::string> enabledPatterns); |
| 65 | +std::unique_ptr<Pass> createGpuSerializeToCubinPass( |
| 66 | + StringRef arch, StringRef features, int llvmOptLevel, int ptxasOptLevel, |
| 67 | + std::string ptxasPath, std::string libDevicePath, bool outputIntermediate); |
| 68 | +std::unique_ptr<Pass> |
| 69 | +createGpuSerializeToHsacoPass(StringRef arch, StringRef features, |
| 70 | + int llvmOptLevel, int hsaOptLevel, |
| 71 | + std::string rocmPath, bool outputIntermediate); |
62 | 72 |
|
63 | | -//===----------------------------------------------------------------------===// |
64 | | -// Registration |
65 | | -//===----------------------------------------------------------------------===// |
66 | | - |
67 | | -#define GEN_PASS_REGISTRATION |
68 | | -#include "mlir/Dialect/Polygeist/Transforms/Passes.h.inc" |
| 73 | +void registerGpuSerializeToCubinPass(); |
| 74 | +void registerGpuSerializeToHsacoPass(); |
69 | 75 |
|
| 76 | +void populateForBreakToWhilePatterns(RewritePatternSet &patterns); |
70 | 77 | } // namespace polygeist |
71 | 78 | } // namespace mlir |
72 | 79 |
|
73 | | -#endif // MLIR_DIALECT_POLYGEIST_TRANSFORMS_PASSES_H |
| 80 | +void fully2ComposeAffineMapAndOperands( |
| 81 | + mlir::PatternRewriter &rewriter, mlir::AffineMap *map, |
| 82 | + llvm::SmallVectorImpl<mlir::Value> *operands, mlir::DominanceInfo &DI); |
| 83 | +bool isValidIndex(mlir::Value val); |
| 84 | + |
| 85 | +namespace mlir { |
| 86 | +// Forward declaration from Dialect.h |
| 87 | +template <typename ConcreteDialect> |
| 88 | +void registerDialect(DialectRegistry ®istry); |
| 89 | + |
| 90 | +namespace arith { |
| 91 | +class ArithDialect; |
| 92 | +} // end namespace arith |
| 93 | + |
| 94 | +namespace omp { |
| 95 | +class OpenMPDialect; |
| 96 | +} // end namespace omp |
| 97 | + |
| 98 | +namespace polygeist { |
| 99 | +class PolygeistDialect; |
| 100 | +} // end namespace polygeist |
| 101 | + |
| 102 | +namespace scf { |
| 103 | +class SCFDialect; |
| 104 | +} // end namespace scf |
| 105 | + |
| 106 | +namespace cf { |
| 107 | +class ControlFlowDialect; |
| 108 | +} // end namespace cf |
| 109 | + |
| 110 | +namespace math { |
| 111 | +class MathDialect; |
| 112 | +} // end namespace math |
| 113 | + |
| 114 | +namespace memref { |
| 115 | +class MemRefDialect; |
| 116 | +} // end namespace memref |
| 117 | + |
| 118 | +namespace func { |
| 119 | +class FuncDialect; |
| 120 | +} |
| 121 | + |
| 122 | +namespace affine { |
| 123 | +class AffineDialect; |
| 124 | +} |
| 125 | + |
| 126 | +namespace LLVM { |
| 127 | +class LLVMDialect; |
| 128 | +} |
| 129 | + |
| 130 | +#define GEN_PASS_REGISTRATION |
| 131 | +#include "polygeist/Passes/Passes.h.inc" |
| 132 | + |
| 133 | +} // end namespace mlir |
| 134 | + |
| 135 | +#endif // POLYGEIST_DIALECT_POLYGEIST_PASSES_H |
0 commit comments