Scalar.cpp revision 263508
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
16#include "llvm/Transforms/Scalar.h"
17#include "llvm-c/Initialization.h"
18#include "llvm-c/Transforms/Scalar.h"
19#include "llvm/Analysis/Passes.h"
20#include "llvm/Analysis/Verifier.h"
21#include "llvm/IR/DataLayout.h"
22#include "llvm/InitializePasses.h"
23#include "llvm/PassManager.h"
24
25using namespace llvm;
26
27/// initializeScalarOptsPasses - Initialize all passes linked into the
28/// ScalarOpts library.
29void llvm::initializeScalarOpts(PassRegistry &Registry) {
30  initializeADCEPass(Registry);
31  initializeSampleProfileLoaderPass(Registry);
32  initializeCodeGenPreparePass(Registry);
33  initializeConstantPropagationPass(Registry);
34  initializeCorrelatedValuePropagationPass(Registry);
35  initializeDCEPass(Registry);
36  initializeDeadInstEliminationPass(Registry);
37  initializeDSEPass(Registry);
38  initializeGVNPass(Registry);
39  initializeEarlyCSEPass(Registry);
40  initializeIndVarSimplifyPass(Registry);
41  initializeJumpThreadingPass(Registry);
42  initializeLICMPass(Registry);
43  initializeLoopDeletionPass(Registry);
44  initializeLoopInstSimplifyPass(Registry);
45  initializeLoopRotatePass(Registry);
46  initializeLoopStrengthReducePass(Registry);
47  initializeLoopRerollPass(Registry);
48  initializeLoopUnrollPass(Registry);
49  initializeLoopUnswitchPass(Registry);
50  initializeLoopIdiomRecognizePass(Registry);
51  initializeLowerAtomicPass(Registry);
52  initializeLowerExpectIntrinsicPass(Registry);
53  initializeMemCpyOptPass(Registry);
54  initializePartiallyInlineLibCallsPass(Registry);
55  initializeReassociatePass(Registry);
56  initializeRegToMemPass(Registry);
57  initializeSCCPPass(Registry);
58  initializeIPSCCPPass(Registry);
59  initializeSROAPass(Registry);
60  initializeSROA_DTPass(Registry);
61  initializeSROA_SSAUpPass(Registry);
62  initializeCFGSimplifyPassPass(Registry);
63  initializeStructurizeCFGPass(Registry);
64  initializeSinkingPass(Registry);
65  initializeTailCallElimPass(Registry);
66}
67
68void LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
69  initializeScalarOpts(*unwrap(R));
70}
71
72void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
73  unwrap(PM)->add(createAggressiveDCEPass());
74}
75
76void LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) {
77  unwrap(PM)->add(createCFGSimplificationPass());
78}
79
80void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) {
81  unwrap(PM)->add(createDeadStoreEliminationPass());
82}
83
84void LLVMAddGVNPass(LLVMPassManagerRef PM) {
85  unwrap(PM)->add(createGVNPass());
86}
87
88void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) {
89  unwrap(PM)->add(createIndVarSimplifyPass());
90}
91
92void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) {
93  unwrap(PM)->add(createInstructionCombiningPass());
94}
95
96void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) {
97  unwrap(PM)->add(createJumpThreadingPass());
98}
99
100void LLVMAddLICMPass(LLVMPassManagerRef PM) {
101  unwrap(PM)->add(createLICMPass());
102}
103
104void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) {
105  unwrap(PM)->add(createLoopDeletionPass());
106}
107
108void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) {
109  unwrap(PM)->add(createLoopIdiomPass());
110}
111
112void LLVMAddLoopRotatePass(LLVMPassManagerRef PM) {
113  unwrap(PM)->add(createLoopRotatePass());
114}
115
116void LLVMAddLoopRerollPass(LLVMPassManagerRef PM) {
117  unwrap(PM)->add(createLoopRerollPass());
118}
119
120void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) {
121  unwrap(PM)->add(createLoopUnrollPass());
122}
123
124void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) {
125  unwrap(PM)->add(createLoopUnswitchPass());
126}
127
128void LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) {
129  unwrap(PM)->add(createMemCpyOptPass());
130}
131
132void LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM) {
133  unwrap(PM)->add(createPartiallyInlineLibCallsPass());
134}
135
136void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
137  unwrap(PM)->add(createPromoteMemoryToRegisterPass());
138}
139
140void LLVMAddReassociatePass(LLVMPassManagerRef PM) {
141  unwrap(PM)->add(createReassociatePass());
142}
143
144void LLVMAddSCCPPass(LLVMPassManagerRef PM) {
145  unwrap(PM)->add(createSCCPPass());
146}
147
148void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) {
149  unwrap(PM)->add(createScalarReplAggregatesPass());
150}
151
152void LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) {
153  unwrap(PM)->add(createScalarReplAggregatesPass(-1, false));
154}
155
156void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
157                                                  int Threshold) {
158  unwrap(PM)->add(createScalarReplAggregatesPass(Threshold));
159}
160
161void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) {
162  // NOTE: The simplify-libcalls pass has been removed.
163}
164
165void LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) {
166  unwrap(PM)->add(createTailCallEliminationPass());
167}
168
169void LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) {
170  unwrap(PM)->add(createConstantPropagationPass());
171}
172
173void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
174  unwrap(PM)->add(createDemoteRegisterToMemoryPass());
175}
176
177void LLVMAddVerifierPass(LLVMPassManagerRef PM) {
178  unwrap(PM)->add(createVerifierPass());
179}
180
181void LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) {
182  unwrap(PM)->add(createCorrelatedValuePropagationPass());
183}
184
185void LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) {
186  unwrap(PM)->add(createEarlyCSEPass());
187}
188
189void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
190  unwrap(PM)->add(createTypeBasedAliasAnalysisPass());
191}
192
193void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
194  unwrap(PM)->add(createBasicAliasAnalysisPass());
195}
196
197void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) {
198  unwrap(PM)->add(createLowerExpectIntrinsicPass());
199}
200