1 //===- polly/LinkAllPasses.h ----------- Reference All Passes ---*- 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 pulls in all transformation and analysis passes for tools 10 // like opt and bugpoint that need this functionality. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef POLLY_LINKALLPASSES_H 15 #define POLLY_LINKALLPASSES_H 16 17 #include "polly/CodeGen/PPCGCodeGeneration.h" 18 #include "polly/Config/config.h" 19 #include "polly/PruneUnprofitable.h" 20 #include "polly/Simplify.h" 21 #include "polly/Support/DumpModulePass.h" 22 #include "llvm/ADT/StringRef.h" 23 #include <cstdlib> 24 25 namespace llvm { 26 class Pass; 27 class PassRegistry; 28 } // namespace llvm 29 30 namespace polly { 31 llvm::Pass *createCodePreparationPass(); 32 llvm::Pass *createScopInlinerPass(); 33 llvm::Pass *createDeadCodeElimPass(); 34 llvm::Pass *createDependenceInfoPass(); 35 llvm::Pass *createDependenceInfoWrapperPassPass(); 36 llvm::Pass *createDOTOnlyPrinterPass(); 37 llvm::Pass *createDOTOnlyViewerPass(); 38 llvm::Pass *createDOTPrinterPass(); 39 llvm::Pass *createDOTViewerPass(); 40 llvm::Pass *createJSONExporterPass(); 41 llvm::Pass *createJSONImporterPass(); 42 llvm::Pass *createPollyCanonicalizePass(); 43 llvm::Pass *createPolyhedralInfoPass(); 44 llvm::Pass *createScopDetectionWrapperPassPass(); 45 llvm::Pass *createScopInfoRegionPassPass(); 46 llvm::Pass *createScopInfoWrapperPassPass(); 47 llvm::Pass *createRewriteByrefParamsPass(); 48 llvm::Pass *createIslAstInfoWrapperPassPass(); 49 llvm::Pass *createCodeGenerationPass(); 50 #ifdef GPU_CODEGEN 51 llvm::Pass *createPPCGCodeGenerationPass(GPUArch Arch = GPUArch::NVPTX64, 52 GPURuntime Runtime = GPURuntime::CUDA); 53 54 llvm::Pass * 55 createManagedMemoryRewritePassPass(GPUArch Arch = GPUArch::NVPTX64, 56 GPURuntime Runtime = GPURuntime::CUDA); 57 #endif 58 llvm::Pass *createIslScheduleOptimizerPass(); 59 llvm::Pass *createFlattenSchedulePass(); 60 llvm::Pass *createDeLICMPass(); 61 llvm::Pass *createMaximalStaticExpansionPass(); 62 63 extern char &CodePreparationID; 64 } // namespace polly 65 66 namespace { 67 struct PollyForcePassLinking { PollyForcePassLinkingPollyForcePassLinking68 PollyForcePassLinking() { 69 // We must reference the passes in such a way that compilers will not 70 // delete it all as dead code, even with whole program optimization, 71 // yet is effectively a NO-OP. As the compiler isn't smart enough 72 // to know that getenv() never returns -1, this will do the job. 73 if (std::getenv("bar") != (char *)-1) 74 return; 75 76 polly::createCodePreparationPass(); 77 polly::createDeadCodeElimPass(); 78 polly::createDependenceInfoPass(); 79 polly::createDOTOnlyPrinterPass(); 80 polly::createDOTOnlyViewerPass(); 81 polly::createDOTPrinterPass(); 82 polly::createDOTViewerPass(); 83 polly::createJSONExporterPass(); 84 polly::createJSONImporterPass(); 85 polly::createScopDetectionWrapperPassPass(); 86 polly::createScopInfoRegionPassPass(); 87 polly::createPollyCanonicalizePass(); 88 polly::createPolyhedralInfoPass(); 89 polly::createIslAstInfoWrapperPassPass(); 90 polly::createCodeGenerationPass(); 91 #ifdef GPU_CODEGEN 92 polly::createPPCGCodeGenerationPass(); 93 polly::createManagedMemoryRewritePassPass(); 94 #endif 95 polly::createIslScheduleOptimizerPass(); 96 polly::createMaximalStaticExpansionPass(); 97 polly::createFlattenSchedulePass(); 98 polly::createDeLICMPass(); 99 polly::createDumpModulePass("", true); 100 polly::createSimplifyPass(); 101 polly::createPruneUnprofitablePass(); 102 } 103 } PollyForcePassLinking; // Force link by creating a global definition. 104 } // namespace 105 106 namespace llvm { 107 class PassRegistry; 108 void initializeCodePreparationPass(llvm::PassRegistry &); 109 void initializeScopInlinerPass(llvm::PassRegistry &); 110 void initializeDeadCodeElimPass(llvm::PassRegistry &); 111 void initializeJSONExporterPass(llvm::PassRegistry &); 112 void initializeJSONImporterPass(llvm::PassRegistry &); 113 void initializeIslAstInfoWrapperPassPass(llvm::PassRegistry &); 114 void initializeCodeGenerationPass(llvm::PassRegistry &); 115 void initializeRewriteByrefParamsPass(llvm::PassRegistry &); 116 #ifdef GPU_CODEGEN 117 void initializePPCGCodeGenerationPass(llvm::PassRegistry &); 118 void initializeManagedMemoryRewritePassPass(llvm::PassRegistry &); 119 #endif 120 void initializeIslScheduleOptimizerPass(llvm::PassRegistry &); 121 void initializeMaximalStaticExpanderPass(llvm::PassRegistry &); 122 void initializePollyCanonicalizePass(llvm::PassRegistry &); 123 void initializeFlattenSchedulePass(llvm::PassRegistry &); 124 void initializeDeLICMPass(llvm::PassRegistry &); 125 } // namespace llvm 126 127 #endif 128