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 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/PassManager.h"
20#include "llvm/Transforms/IPO.h"
21
22using namespace llvm;
23
24void llvm::initializeIPO(PassRegistry &Registry) {
25  initializeArgPromotionPass(Registry);
26  initializeConstantMergePass(Registry);
27  initializeDAEPass(Registry);
28  initializeDAHPass(Registry);
29  initializeFunctionAttrsPass(Registry);
30  initializeGlobalDCEPass(Registry);
31  initializeGlobalOptPass(Registry);
32  initializeIPCPPass(Registry);
33  initializeAlwaysInlinerPass(Registry);
34  initializeSimpleInlinerPass(Registry);
35  initializeInternalizePassPass(Registry);
36  initializeLoopExtractorPass(Registry);
37  initializeBlockExtractorPassPass(Registry);
38  initializeSingleLoopExtractorPass(Registry);
39  initializeMergeFunctionsPass(Registry);
40  initializePartialInlinerPass(Registry);
41  initializePruneEHPass(Registry);
42  initializeStripDeadPrototypesPassPass(Registry);
43  initializeStripSymbolsPass(Registry);
44  initializeStripDebugDeclarePass(Registry);
45  initializeStripDeadDebugInfoPass(Registry);
46  initializeStripNonDebugSymbolsPass(Registry);
47}
48
49void LLVMInitializeIPO(LLVMPassRegistryRef R) {
50  initializeIPO(*unwrap(R));
51}
52
53void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) {
54  unwrap(PM)->add(createArgumentPromotionPass());
55}
56
57void LLVMAddConstantMergePass(LLVMPassManagerRef PM) {
58  unwrap(PM)->add(createConstantMergePass());
59}
60
61void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) {
62  unwrap(PM)->add(createDeadArgEliminationPass());
63}
64
65void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) {
66  unwrap(PM)->add(createFunctionAttrsPass());
67}
68
69void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) {
70  unwrap(PM)->add(createFunctionInliningPass());
71}
72
73void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) {
74  unwrap(PM)->add(llvm::createAlwaysInlinerPass());
75}
76
77void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) {
78  unwrap(PM)->add(createGlobalDCEPass());
79}
80
81void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) {
82  unwrap(PM)->add(createGlobalOptimizerPass());
83}
84
85void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) {
86  unwrap(PM)->add(createIPConstantPropagationPass());
87}
88
89void LLVMAddPruneEHPass(LLVMPassManagerRef PM) {
90  unwrap(PM)->add(createPruneEHPass());
91}
92
93void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) {
94  unwrap(PM)->add(createIPSCCPPass());
95}
96
97void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) {
98  unwrap(PM)->add(createInternalizePass(AllButMain != 0));
99}
100
101void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) {
102  unwrap(PM)->add(createStripDeadPrototypesPass());
103}
104
105void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) {
106  unwrap(PM)->add(createStripSymbolsPass());
107}
108