xref: /llvm-project/flang/include/flang/Optimizer/Transforms/Passes.h (revision a88677edc0792534ba3157bf7d7a1b98e470f2fb)
1 //===-- Optimizer/Transforms/Passes.h ---------------------------*- 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 #ifndef FORTRAN_OPTIMIZER_TRANSFORMS_PASSES_H
10 #define FORTRAN_OPTIMIZER_TRANSFORMS_PASSES_H
11 
12 #include "flang/Optimizer/Dialect/FIROps.h"
13 #include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
14 #include "mlir/Dialect/OpenMP/OpenMPDialect.h"
15 #include "mlir/Pass/Pass.h"
16 #include "mlir/Pass/PassRegistry.h"
17 #include <memory>
18 
19 namespace mlir {
20 class IRMapping;
21 class GreedyRewriteConfig;
22 class Operation;
23 class Pass;
24 class Region;
25 class ModuleOp;
26 } // namespace mlir
27 
28 namespace fir {
29 
30 //===----------------------------------------------------------------------===//
31 // Passes defined in Passes.td
32 //===----------------------------------------------------------------------===//
33 
34 #define GEN_PASS_DECL_ABSTRACTRESULTOPT
35 #define GEN_PASS_DECL_AFFINEDIALECTPROMOTION
36 #define GEN_PASS_DECL_AFFINEDIALECTDEMOTION
37 #define GEN_PASS_DECL_ANNOTATECONSTANTOPERANDS
38 #define GEN_PASS_DECL_ARRAYVALUECOPY
39 #define GEN_PASS_DECL_ASSUMEDRANKOPCONVERSION
40 #define GEN_PASS_DECL_CHARACTERCONVERSION
41 #define GEN_PASS_DECL_CFGCONVERSION
42 #define GEN_PASS_DECL_CUFADDCONSTRUCTOR
43 #define GEN_PASS_DECL_CUFDEVICEGLOBAL
44 #define GEN_PASS_DECL_CUFGPUTOLLVMCONVERSION
45 #define GEN_PASS_DECL_CUFOPCONVERSION
46 #define GEN_PASS_DECL_EXTERNALNAMECONVERSION
47 #define GEN_PASS_DECL_MEMREFDATAFLOWOPT
48 #define GEN_PASS_DECL_SIMPLIFYINTRINSICS
49 #define GEN_PASS_DECL_MEMORYALLOCATIONOPT
50 #define GEN_PASS_DECL_SIMPLIFYREGIONLITE
51 #define GEN_PASS_DECL_ALGEBRAICSIMPLIFICATION
52 #define GEN_PASS_DECL_POLYMORPHICOPCONVERSION
53 #define GEN_PASS_DECL_OPENACCDATAOPERANDCONVERSION
54 #define GEN_PASS_DECL_ADDDEBUGINFO
55 #define GEN_PASS_DECL_STACKARRAYS
56 #define GEN_PASS_DECL_STACKRECLAIM
57 #define GEN_PASS_DECL_LOOPVERSIONING
58 #define GEN_PASS_DECL_ADDALIASTAGS
59 #define GEN_PASS_DECL_VSCALEATTR
60 #define GEN_PASS_DECL_FUNCTIONATTR
61 #define GEN_PASS_DECL_CONSTANTARGUMENTGLOBALISATIONOPT
62 #define GEN_PASS_DECL_COMPILERGENERATEDNAMESCONVERSION
63 
64 #include "flang/Optimizer/Transforms/Passes.h.inc"
65 
66 std::unique_ptr<mlir::Pass> createAffineDemotionPass();
67 std::unique_ptr<mlir::Pass>
68 createArrayValueCopyPass(fir::ArrayValueCopyOptions options = {});
69 std::unique_ptr<mlir::Pass> createMemDataFlowOptPass();
70 std::unique_ptr<mlir::Pass> createPromoteToAffinePass();
71 std::unique_ptr<mlir::Pass>
72 createAddDebugInfoPass(fir::AddDebugInfoOptions options = {});
73 
74 std::unique_ptr<mlir::Pass> createAnnotateConstantOperandsPass();
75 std::unique_ptr<mlir::Pass> createAlgebraicSimplificationPass();
76 std::unique_ptr<mlir::Pass>
77 createAlgebraicSimplificationPass(const mlir::GreedyRewriteConfig &config);
78 
79 std::unique_ptr<mlir::Pass> createVScaleAttrPass();
80 std::unique_ptr<mlir::Pass>
81 createVScaleAttrPass(std::pair<unsigned, unsigned> vscaleAttr);
82 
83 void populateCfgConversionRewrites(mlir::RewritePatternSet &patterns,
84                                    bool forceLoopToExecuteOnce = false,
85                                    bool setNSW = true);
86 
87 // declarative passes
88 #define GEN_PASS_REGISTRATION
89 #include "flang/Optimizer/Transforms/Passes.h.inc"
90 
91 } // namespace fir
92 
93 #endif // FORTRAN_OPTIMIZER_TRANSFORMS_PASSES_H
94