Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- llvm/Transforms/Utils.h - Utility Transformations --------*- 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 defines prototypes for accessor functions that expose passes
  10. // in the Utils transformations library.
  11. //
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_TRANSFORMS_UTILS_H
  15. #define LLVM_TRANSFORMS_UTILS_H
  16.  
  17. namespace llvm {
  18.  
  19. class ModulePass;
  20. class FunctionPass;
  21. class Pass;
  22.  
  23. //===----------------------------------------------------------------------===//
  24. // createMetaRenamerPass - Rename everything with metasyntatic names.
  25. //
  26. ModulePass *createMetaRenamerPass();
  27.  
  28. //===----------------------------------------------------------------------===//
  29. //
  30. // LowerInvoke - This pass removes invoke instructions, converting them to call
  31. // instructions.
  32. //
  33. FunctionPass *createLowerInvokePass();
  34. extern char &LowerInvokePassID;
  35.  
  36. //===----------------------------------------------------------------------===//
  37. //
  38. // InstructionNamer - Give any unnamed non-void instructions "tmp" names.
  39. //
  40. FunctionPass *createInstructionNamerPass();
  41. extern char &InstructionNamerID;
  42.  
  43. //===----------------------------------------------------------------------===//
  44. //
  45. // LowerSwitch - This pass converts SwitchInst instructions into a sequence of
  46. // chained binary branch instructions.
  47. //
  48. FunctionPass *createLowerSwitchPass();
  49. extern char &LowerSwitchID;
  50.  
  51. //===----------------------------------------------------------------------===//
  52. //
  53. // BreakCriticalEdges - Break all of the critical edges in the CFG by inserting
  54. // a dummy basic block. This pass may be "required" by passes that cannot deal
  55. // with critical edges. For this usage, a pass must call:
  56. //
  57. //   AU.addRequiredID(BreakCriticalEdgesID);
  58. //
  59. // This pass obviously invalidates the CFG, but can update forward dominator
  60. // (set, immediate dominators, tree, and frontier) information.
  61. //
  62. FunctionPass *createBreakCriticalEdgesPass();
  63. extern char &BreakCriticalEdgesID;
  64.  
  65. //===----------------------------------------------------------------------===//
  66. //
  67. // LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop
  68. // optimizations.
  69. //
  70. Pass *createLCSSAPass();
  71. extern char &LCSSAID;
  72.  
  73. //===----------------------------------------------------------------------===//
  74. //
  75. // AddDiscriminators - Add DWARF path discriminators to the IR.
  76. FunctionPass *createAddDiscriminatorsPass();
  77.  
  78. //===----------------------------------------------------------------------===//
  79. //
  80. // PromoteMemoryToRegister - This pass is used to promote memory references to
  81. // be register references. A simple example of the transformation performed by
  82. // this pass is:
  83. //
  84. //        FROM CODE                           TO CODE
  85. //   %X = alloca i32, i32 1                 ret i32 42
  86. //   store i32 42, i32 *%X
  87. //   %Y = load i32* %X
  88. //   ret i32 %Y
  89. //
  90. FunctionPass *createPromoteMemoryToRegisterPass();
  91.  
  92. //===----------------------------------------------------------------------===//
  93. //
  94. // LoopSimplify - Insert Pre-header blocks into the CFG for every function in
  95. // the module.  This pass updates dominator information, loop information, and
  96. // does not add critical edges to the CFG.
  97. //
  98. //   AU.addRequiredID(LoopSimplifyID);
  99. //
  100. Pass *createLoopSimplifyPass();
  101. extern char &LoopSimplifyID;
  102.  
  103. /// This function returns a new pass that downgrades the debug info in the
  104. /// module to line tables only.
  105. ModulePass *createStripNonLineTableDebugLegacyPass();
  106.  
  107. //===----------------------------------------------------------------------===//
  108. //
  109. // InjectTLIMappingsLegacy - populates the VFABI attribute with the
  110. // scalar-to-vector mappings from the TargetLibraryInfo.
  111. //
  112. FunctionPass *createInjectTLIMappingsLegacyPass();
  113.  
  114. //===----------------------------------------------------------------------===//
  115. //
  116. // UnifyLoopExits - For each loop, creates a new block N such that all exiting
  117. // blocks branch to N, and then N distributes control flow to all the original
  118. // exit blocks.
  119. //
  120. FunctionPass *createUnifyLoopExitsPass();
  121.  
  122. //===----------------------------------------------------------------------===//
  123. //
  124. // FixIrreducible - Convert each SCC with irreducible control-flow
  125. // into a natural loop.
  126. //
  127. FunctionPass *createFixIrreduciblePass();
  128.  
  129. //===----------------------------------------------------------------------===//
  130. //
  131. // AssumeSimplify - remove redundant assumes and merge assumes in the same
  132. // BasicBlock when possible.
  133. //
  134. FunctionPass *createAssumeSimplifyPass();
  135.  
  136. //===----------------------------------------------------------------------===//
  137. //
  138. // CanonicalizeFreezeInLoops - Canonicalize freeze instructions in loops so they
  139. // don't block SCEV.
  140. //
  141. Pass *createCanonicalizeFreezeInLoopsPass();
  142.  
  143. //===----------------------------------------------------------------------===//
  144. // LowerGlobalDtorsLegacy - Lower @llvm.global_dtors by creating wrapper
  145. // functions that are registered in @llvm.global_ctors and which contain a call
  146. // to `__cxa_atexit` to register their destructor functions.
  147. ModulePass *createLowerGlobalDtorsLegacyPass();
  148. } // namespace llvm
  149.  
  150. #endif
  151.