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
16#include "llvm-c/Initialization.h"
17#include "llvm-c/Transforms/IPO.h"
18#include "llvm/InitializePasses.h"
19#include "llvm/IR/LegacyPassManager.h"
20#include "llvm/Transforms/IPO.h"
21
22using namespace llvm;
23
24void llvm::initializeIPO(PassRegistry &Registry) {
25  initializeArgPromotionPass(Registry);
26  initializeConstantMergePass(Registry);
27  initializeCrossDSOCFIPass(Registry);
28  initializeDAEPass(Registry);
29  initializeDAHPass(Registry);
30  initializeForceFunctionAttrsLegacyPassPass(Registry);
31  initializeGlobalDCEPass(Registry);
32  initializeGlobalOptPass(Registry);
33  initializeIPCPPass(Registry);
34  initializeAlwaysInlinerPass(Registry);
35  initializeSimpleInlinerPass(Registry);
36  initializeInferFunctionAttrsLegacyPassPass(Registry);
37  initializeInternalizePassPass(Registry);
38  initializeLoopExtractorPass(Registry);
39  initializeBlockExtractorPassPass(Registry);
40  initializeSingleLoopExtractorPass(Registry);
41  initializeLowerBitSetsPass(Registry);
42  initializeMergeFunctionsPass(Registry);
43  initializePartialInlinerPass(Registry);
44  initializePostOrderFunctionAttrsPass(Registry);
45  initializeReversePostOrderFunctionAttrsPass(Registry);
46  initializePruneEHPass(Registry);
47  initializeStripDeadPrototypesLegacyPassPass(Registry);
48  initializeStripSymbolsPass(Registry);
49  initializeStripDebugDeclarePass(Registry);
50  initializeStripDeadDebugInfoPass(Registry);
51  initializeStripNonDebugSymbolsPass(Registry);
52  initializeBarrierNoopPass(Registry);
53  initializeEliminateAvailableExternallyPass(Registry);
54  initializeSampleProfileLoaderPass(Registry);
55  initializeFunctionImportPassPass(Registry);
56}
57
58void LLVMInitializeIPO(LLVMPassRegistryRef R) {
59  initializeIPO(*unwrap(R));
60}
61
62void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) {
63  unwrap(PM)->add(createArgumentPromotionPass());
64}
65
66void LLVMAddConstantMergePass(LLVMPassManagerRef PM) {
67  unwrap(PM)->add(createConstantMergePass());
68}
69
70void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) {
71  unwrap(PM)->add(createDeadArgEliminationPass());
72}
73
74void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) {
75  unwrap(PM)->add(createPostOrderFunctionAttrsPass());
76}
77
78void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) {
79  unwrap(PM)->add(createFunctionInliningPass());
80}
81
82void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) {
83  unwrap(PM)->add(llvm::createAlwaysInlinerPass());
84}
85
86void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) {
87  unwrap(PM)->add(createGlobalDCEPass());
88}
89
90void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) {
91  unwrap(PM)->add(createGlobalOptimizerPass());
92}
93
94void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) {
95  unwrap(PM)->add(createIPConstantPropagationPass());
96}
97
98void LLVMAddPruneEHPass(LLVMPassManagerRef PM) {
99  unwrap(PM)->add(createPruneEHPass());
100}
101
102void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) {
103  unwrap(PM)->add(createIPSCCPPass());
104}
105
106void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) {
107  std::vector<const char *> Export;
108  if (AllButMain)
109    Export.push_back("main");
110  unwrap(PM)->add(createInternalizePass(Export));
111}
112
113void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) {
114  unwrap(PM)->add(createStripDeadPrototypesPass());
115}
116
117void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) {
118  unwrap(PM)->add(createStripSymbolsPass());
119}
120