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/Support/DumpFunctionPass.h" 20 #include "polly/Support/DumpModulePass.h" 21 #include "llvm/ADT/StringRef.h" 22 #include <cstdlib> 23 24 namespace llvm { 25 class Pass; 26 class PassRegistry; 27 } // namespace llvm 28 29 namespace polly { 30 llvm::Pass *createCodePreparationPass(); 31 llvm::Pass *createScopInlinerPass(); 32 llvm::Pass *createDeadCodeElimWrapperPass(); 33 llvm::Pass *createDependenceInfoPass(); 34 llvm::Pass *createDependenceInfoWrapperPassPass(); 35 llvm::Pass *createDOTOnlyPrinterPass(); 36 llvm::Pass *createDOTOnlyViewerPass(); 37 llvm::Pass *createDOTPrinterPass(); 38 llvm::Pass *createDOTViewerPass(); 39 llvm::Pass *createJSONExporterPass(); 40 llvm::Pass *createJSONImporterPass(); 41 llvm::Pass *createPollyCanonicalizePass(); 42 llvm::Pass *createPolyhedralInfoPass(); 43 llvm::Pass *createScopDetectionWrapperPassPass(); 44 llvm::Pass *createScopInfoRegionPassPass(); 45 llvm::Pass *createScopInfoWrapperPassPass(); 46 llvm::Pass *createRewriteByrefParamsWrapperPass(); 47 llvm::Pass *createIslAstInfoWrapperPassPass(); 48 llvm::Pass *createCodeGenerationPass(); 49 #ifdef GPU_CODEGEN 50 llvm::Pass *createPPCGCodeGenerationPass(GPUArch Arch = GPUArch::NVPTX64, 51 GPURuntime Runtime = GPURuntime::CUDA); 52 53 llvm::Pass * 54 createManagedMemoryRewritePassPass(GPUArch Arch = GPUArch::NVPTX64, 55 GPURuntime Runtime = GPURuntime::CUDA); 56 #endif 57 llvm::Pass *createIslScheduleOptimizerWrapperPass(); 58 llvm::Pass *createFlattenSchedulePass(); 59 llvm::Pass *createForwardOpTreeWrapperPass(); 60 llvm::Pass *createDeLICMWrapperPass(); 61 llvm::Pass *createMaximalStaticExpansionPass(); 62 llvm::Pass *createSimplifyWrapperPass(int); 63 llvm::Pass *createPruneUnprofitableWrapperPass(); 64 65 extern char &CodePreparationID; 66 } // namespace polly 67 68 namespace { 69 struct PollyForcePassLinking { PollyForcePassLinkingPollyForcePassLinking70 PollyForcePassLinking() { 71 // We must reference the passes in such a way that compilers will not 72 // delete it all as dead code, even with whole program optimization, 73 // yet is effectively a NO-OP. As the compiler isn't smart enough 74 // to know that getenv() never returns -1, this will do the job. 75 if (std::getenv("bar") != (char *)-1) 76 return; 77 78 polly::createCodePreparationPass(); 79 polly::createDeadCodeElimWrapperPass(); 80 polly::createDependenceInfoPass(); 81 polly::createDOTOnlyPrinterPass(); 82 polly::createDOTOnlyViewerPass(); 83 polly::createDOTPrinterPass(); 84 polly::createDOTViewerPass(); 85 polly::createJSONExporterPass(); 86 polly::createJSONImporterPass(); 87 polly::createScopDetectionWrapperPassPass(); 88 polly::createScopInfoRegionPassPass(); 89 polly::createPollyCanonicalizePass(); 90 polly::createPolyhedralInfoPass(); 91 polly::createRewriteByrefParamsWrapperPass(); 92 polly::createIslAstInfoWrapperPassPass(); 93 polly::createCodeGenerationPass(); 94 #ifdef GPU_CODEGEN 95 polly::createPPCGCodeGenerationPass(); 96 polly::createManagedMemoryRewritePassPass(); 97 #endif 98 polly::createIslScheduleOptimizerWrapperPass(); 99 polly::createMaximalStaticExpansionPass(); 100 polly::createFlattenSchedulePass(); 101 polly::createForwardOpTreeWrapperPass(); 102 polly::createDeLICMWrapperPass(); 103 polly::createDumpModuleWrapperPass("", true); 104 polly::createDumpFunctionWrapperPass(""); 105 polly::createSimplifyWrapperPass(0); 106 polly::createPruneUnprofitableWrapperPass(); 107 } 108 } PollyForcePassLinking; // Force link by creating a global definition. 109 } // namespace 110 111 namespace llvm { 112 class PassRegistry; 113 void initializeCodePreparationPass(llvm::PassRegistry &); 114 void initializeScopInlinerPass(llvm::PassRegistry &); 115 void initializeDeadCodeElimWrapperPassPass(llvm::PassRegistry &); 116 void initializeJSONExporterPass(llvm::PassRegistry &); 117 void initializeJSONImporterPass(llvm::PassRegistry &); 118 void initializeIslAstInfoWrapperPassPass(llvm::PassRegistry &); 119 void initializeCodeGenerationPass(llvm::PassRegistry &); 120 void initializeRewriteByrefParamsWrapperPassPass(llvm::PassRegistry &); 121 #ifdef GPU_CODEGEN 122 void initializePPCGCodeGenerationPass(llvm::PassRegistry &); 123 void initializeManagedMemoryRewritePassPass(llvm::PassRegistry &); 124 #endif 125 void initializeIslScheduleOptimizerWrapperPassPass(llvm::PassRegistry &); 126 void initializeMaximalStaticExpanderPass(llvm::PassRegistry &); 127 void initializePollyCanonicalizePass(llvm::PassRegistry &); 128 void initializeFlattenSchedulePass(llvm::PassRegistry &); 129 void initializeForwardOpTreeWrapperPassPass(llvm::PassRegistry &); 130 void initializeDeLICMWrapperPassPass(llvm::PassRegistry &); 131 void initializeSimplifyWrapperPassPass(llvm::PassRegistry &); 132 void initializePruneUnprofitableWrapperPassPass(llvm::PassRegistry &); 133 } // namespace llvm 134 135 #endif 136