LinkAllPasses.h 5.2 KB

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