Scalar.cpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. //===-- Scalar.cpp --------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This file implements common infrastructure for libLLVMScalarOpts.a, which
  11. // implements several scalar transformations over the LLVM intermediate
  12. // representation, including the C bindings for that library.
  13. //
  14. //===----------------------------------------------------------------------===//
  15. #include "llvm/Transforms/Scalar.h"
  16. #include "llvm-c/Initialization.h"
  17. #include "llvm-c/Transforms/Scalar.h"
  18. #include "llvm/Analysis/Passes.h"
  19. #include "llvm/IR/DataLayout.h"
  20. #include "llvm/IR/Verifier.h"
  21. #include "llvm/InitializePasses.h"
  22. #include "llvm/IR/LegacyPassManager.h"
  23. using namespace llvm;
  24. /// initializeScalarOptsPasses - Initialize all passes linked into the
  25. /// ScalarOpts library.
  26. void llvm::initializeScalarOpts(PassRegistry &Registry) {
  27. initializeADCEPass(Registry);
  28. initializeBDCEPass(Registry);
  29. initializeAlignmentFromAssumptionsPass(Registry);
  30. initializeSampleProfileLoaderPass(Registry);
  31. initializeConstantHoistingPass(Registry);
  32. initializeConstantPropagationPass(Registry);
  33. initializeCorrelatedValuePropagationPass(Registry);
  34. initializeDCEPass(Registry);
  35. initializeDeadInstEliminationPass(Registry);
  36. initializeScalarizerPass(Registry);
  37. initializeDSEPass(Registry);
  38. initializeGVNPass(Registry);
  39. initializeEarlyCSELegacyPassPass(Registry);
  40. initializeFlattenCFGPassPass(Registry);
  41. initializeInductiveRangeCheckEliminationPass(Registry);
  42. initializeIndVarSimplifyPass(Registry);
  43. initializeJumpThreadingPass(Registry);
  44. initializeLICMPass(Registry);
  45. initializeLoopDeletionPass(Registry);
  46. initializeLoopAccessAnalysisPass(Registry);
  47. initializeLoopInstSimplifyPass(Registry);
  48. initializeLoopInterchangePass(Registry);
  49. initializeLoopRotatePass(Registry);
  50. initializeLoopStrengthReducePass(Registry);
  51. initializeLoopRerollPass(Registry);
  52. initializeLoopUnrollPass(Registry);
  53. initializeLoopUnswitchPass(Registry);
  54. initializeLoopIdiomRecognizePass(Registry);
  55. initializeLowerAtomicPass(Registry);
  56. initializeLowerExpectIntrinsicPass(Registry);
  57. initializeMemCpyOptPass(Registry);
  58. initializeMergedLoadStoreMotionPass(Registry);
  59. initializeNaryReassociatePass(Registry);
  60. initializePartiallyInlineLibCallsPass(Registry);
  61. initializeReassociatePass(Registry);
  62. initializeRegToMemPass(Registry);
  63. initializeRegToMemHlslPass(Registry); // HLSL Change
  64. initializeRewriteStatepointsForGCPass(Registry);
  65. initializeSCCPPass(Registry);
  66. initializeIPSCCPPass(Registry);
  67. initializeSROAPass(Registry);
  68. initializeSROA_DTPass(Registry);
  69. initializeSROA_SSAUpPass(Registry);
  70. initializeCFGSimplifyPassPass(Registry);
  71. initializeStructurizeCFGPass(Registry);
  72. initializeSinkingPass(Registry);
  73. initializeTailCallElimPass(Registry);
  74. initializeSeparateConstOffsetFromGEPPass(Registry);
  75. initializeSpeculativeExecutionPass(Registry);
  76. initializeStraightLineStrengthReducePass(Registry);
  77. initializeLoadCombinePass(Registry);
  78. initializePlaceBackedgeSafepointsImplPass(Registry);
  79. initializePlaceSafepointsPass(Registry);
  80. initializeFloat2IntPass(Registry);
  81. initializeLoopDistributePass(Registry);
  82. }
  83. void LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
  84. initializeScalarOpts(*unwrap(R));
  85. }
  86. void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
  87. unwrap(PM)->add(createAggressiveDCEPass());
  88. }
  89. void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM) {
  90. unwrap(PM)->add(createBitTrackingDCEPass());
  91. }
  92. void LLVMAddAlignmentFromAssumptionsPass(LLVMPassManagerRef PM) {
  93. unwrap(PM)->add(createAlignmentFromAssumptionsPass());
  94. }
  95. void LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) {
  96. unwrap(PM)->add(createCFGSimplificationPass());
  97. }
  98. void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) {
  99. unwrap(PM)->add(createDeadStoreEliminationPass());
  100. }
  101. void LLVMAddScalarizerPass(LLVMPassManagerRef PM) {
  102. unwrap(PM)->add(createScalarizerPass());
  103. }
  104. void LLVMAddGVNPass(LLVMPassManagerRef PM) {
  105. unwrap(PM)->add(createGVNPass());
  106. }
  107. void LLVMAddMergedLoadStoreMotionPass(LLVMPassManagerRef PM) {
  108. unwrap(PM)->add(createMergedLoadStoreMotionPass());
  109. }
  110. void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) {
  111. unwrap(PM)->add(createIndVarSimplifyPass());
  112. }
  113. void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) {
  114. unwrap(PM)->add(createInstructionCombiningPass());
  115. }
  116. void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) {
  117. unwrap(PM)->add(createJumpThreadingPass());
  118. }
  119. void LLVMAddLICMPass(LLVMPassManagerRef PM) {
  120. unwrap(PM)->add(createLICMPass());
  121. }
  122. void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) {
  123. unwrap(PM)->add(createLoopDeletionPass());
  124. }
  125. void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) {
  126. unwrap(PM)->add(createLoopIdiomPass());
  127. }
  128. void LLVMAddLoopRotatePass(LLVMPassManagerRef PM) {
  129. unwrap(PM)->add(createLoopRotatePass());
  130. }
  131. void LLVMAddLoopRerollPass(LLVMPassManagerRef PM) {
  132. unwrap(PM)->add(createLoopRerollPass());
  133. }
  134. void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) {
  135. unwrap(PM)->add(createLoopUnrollPass());
  136. }
  137. void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) {
  138. unwrap(PM)->add(createLoopUnswitchPass());
  139. }
  140. void LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) {
  141. unwrap(PM)->add(createMemCpyOptPass());
  142. }
  143. void LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM) {
  144. unwrap(PM)->add(createPartiallyInlineLibCallsPass());
  145. }
  146. void LLVMAddLowerSwitchPass(LLVMPassManagerRef PM) {
  147. unwrap(PM)->add(createLowerSwitchPass());
  148. }
  149. void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
  150. unwrap(PM)->add(createPromoteMemoryToRegisterPass());
  151. }
  152. void LLVMAddReassociatePass(LLVMPassManagerRef PM) {
  153. unwrap(PM)->add(createReassociatePass());
  154. }
  155. void LLVMAddSCCPPass(LLVMPassManagerRef PM) {
  156. unwrap(PM)->add(createSCCPPass());
  157. }
  158. void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) {
  159. unwrap(PM)->add(createScalarReplAggregatesPass());
  160. }
  161. void LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) {
  162. unwrap(PM)->add(createScalarReplAggregatesPass(-1, false));
  163. }
  164. void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
  165. int Threshold) {
  166. unwrap(PM)->add(createScalarReplAggregatesPass(Threshold));
  167. }
  168. void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) {
  169. // NOTE: The simplify-libcalls pass has been removed.
  170. }
  171. void LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) {
  172. unwrap(PM)->add(createTailCallEliminationPass());
  173. }
  174. void LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) {
  175. unwrap(PM)->add(createConstantPropagationPass());
  176. }
  177. void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
  178. unwrap(PM)->add(createDemoteRegisterToMemoryPass());
  179. }
  180. // HLSL Change start
  181. void LLVMAddDemoteMemoryToRegisterHlslPass(LLVMPassManagerRef PM) {
  182. unwrap(PM)->add(createDemoteRegisterToMemoryHlslPass());
  183. }
  184. // HLSL Change end
  185. void LLVMAddVerifierPass(LLVMPassManagerRef PM) {
  186. unwrap(PM)->add(createVerifierPass());
  187. }
  188. void LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) {
  189. unwrap(PM)->add(createCorrelatedValuePropagationPass());
  190. }
  191. void LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) {
  192. unwrap(PM)->add(createEarlyCSEPass());
  193. }
  194. void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
  195. unwrap(PM)->add(createTypeBasedAliasAnalysisPass());
  196. }
  197. void LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM) {
  198. unwrap(PM)->add(createScopedNoAliasAAPass());
  199. }
  200. void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
  201. unwrap(PM)->add(createBasicAliasAnalysisPass());
  202. }
  203. void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) {
  204. unwrap(PM)->add(createLowerExpectIntrinsicPass());
  205. }