IPO.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //===-- IPO.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 the common infrastructure (including C bindings) for
  11. // libLLVMIPO.a, which implements several transformations over the LLVM
  12. // intermediate representation.
  13. //
  14. //===----------------------------------------------------------------------===//
  15. #include "llvm-c/Initialization.h"
  16. #include "llvm-c/Transforms/IPO.h"
  17. #include "llvm/InitializePasses.h"
  18. #include "llvm/IR/LegacyPassManager.h"
  19. #include "llvm/Transforms/IPO.h"
  20. using namespace llvm;
  21. void llvm::initializeIPO(PassRegistry &Registry) {
  22. initializeArgPromotionPass(Registry);
  23. initializeConstantMergePass(Registry);
  24. initializeDAEPass(Registry);
  25. initializeDAHPass(Registry);
  26. initializeFunctionAttrsPass(Registry);
  27. initializeGlobalDCEPass(Registry);
  28. initializeGlobalOptPass(Registry);
  29. initializeIPCPPass(Registry);
  30. initializeAlwaysInlinerPass(Registry);
  31. initializeSimpleInlinerPass(Registry);
  32. initializeInternalizePassPass(Registry);
  33. initializeLoopExtractorPass(Registry);
  34. initializeBlockExtractorPassPass(Registry);
  35. initializeSingleLoopExtractorPass(Registry);
  36. initializeLowerBitSetsPass(Registry);
  37. initializeMergeFunctionsPass(Registry);
  38. initializePartialInlinerPass(Registry);
  39. initializePruneEHPass(Registry);
  40. initializeStripDeadPrototypesPassPass(Registry);
  41. initializeStripSymbolsPass(Registry);
  42. initializeStripDebugDeclarePass(Registry);
  43. initializeStripDeadDebugInfoPass(Registry);
  44. initializeStripNonDebugSymbolsPass(Registry);
  45. initializeBarrierNoopPass(Registry);
  46. initializeEliminateAvailableExternallyPass(Registry);
  47. }
  48. void LLVMInitializeIPO(LLVMPassRegistryRef R) {
  49. initializeIPO(*unwrap(R));
  50. }
  51. void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) {
  52. unwrap(PM)->add(createArgumentPromotionPass());
  53. }
  54. void LLVMAddConstantMergePass(LLVMPassManagerRef PM) {
  55. unwrap(PM)->add(createConstantMergePass());
  56. }
  57. void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) {
  58. unwrap(PM)->add(createDeadArgEliminationPass());
  59. }
  60. void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) {
  61. unwrap(PM)->add(createFunctionAttrsPass());
  62. }
  63. void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) {
  64. unwrap(PM)->add(createFunctionInliningPass());
  65. }
  66. void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) {
  67. unwrap(PM)->add(llvm::createAlwaysInlinerPass());
  68. }
  69. void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) {
  70. unwrap(PM)->add(createGlobalDCEPass());
  71. }
  72. void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) {
  73. unwrap(PM)->add(createGlobalOptimizerPass());
  74. }
  75. void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) {
  76. unwrap(PM)->add(createIPConstantPropagationPass());
  77. }
  78. void LLVMAddPruneEHPass(LLVMPassManagerRef PM) {
  79. unwrap(PM)->add(createPruneEHPass());
  80. }
  81. void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) {
  82. unwrap(PM)->add(createIPSCCPPass());
  83. }
  84. void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) {
  85. std::vector<const char *> Export;
  86. if (AllButMain)
  87. Export.push_back("main");
  88. unwrap(PM)->add(createInternalizePass(Export));
  89. }
  90. void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) {
  91. unwrap(PM)->add(createStripDeadPrototypesPass());
  92. }
  93. void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) {
  94. unwrap(PM)->add(createStripSymbolsPass());
  95. }