Scalar.cpp revision 226633
1193323Sed//===-- Scalar.cpp --------------------------------------------------------===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10218893Sdim// This file implements common infrastructure for libLLVMScalarOpts.a, which
11218893Sdim// implements several scalar transformations over the LLVM intermediate
12218893Sdim// representation, including the C bindings for that library.
13193323Sed//
14193323Sed//===----------------------------------------------------------------------===//
15193323Sed
16193323Sed#include "llvm-c/Transforms/Scalar.h"
17218893Sdim#include "llvm-c/Initialization.h"
18218893Sdim#include "llvm/InitializePasses.h"
19193323Sed#include "llvm/PassManager.h"
20221345Sdim#include "llvm/Analysis/Passes.h"
21205218Srdivacky#include "llvm/Analysis/Verifier.h"
22205218Srdivacky#include "llvm/Target/TargetData.h"
23193323Sed#include "llvm/Transforms/Scalar.h"
24193323Sed
25193323Sedusing namespace llvm;
26193323Sed
27218893Sdim/// initializeScalarOptsPasses - Initialize all passes linked into the
28218893Sdim/// ScalarOpts library.
29218893Sdimvoid llvm::initializeScalarOpts(PassRegistry &Registry) {
30218893Sdim  initializeADCEPass(Registry);
31218893Sdim  initializeBlockPlacementPass(Registry);
32218893Sdim  initializeCodeGenPreparePass(Registry);
33218893Sdim  initializeConstantPropagationPass(Registry);
34218893Sdim  initializeCorrelatedValuePropagationPass(Registry);
35218893Sdim  initializeDCEPass(Registry);
36218893Sdim  initializeDeadInstEliminationPass(Registry);
37218893Sdim  initializeDSEPass(Registry);
38218893Sdim  initializeGVNPass(Registry);
39218893Sdim  initializeEarlyCSEPass(Registry);
40218893Sdim  initializeIndVarSimplifyPass(Registry);
41218893Sdim  initializeJumpThreadingPass(Registry);
42218893Sdim  initializeLICMPass(Registry);
43218893Sdim  initializeLoopDeletionPass(Registry);
44218893Sdim  initializeLoopInstSimplifyPass(Registry);
45218893Sdim  initializeLoopRotatePass(Registry);
46218893Sdim  initializeLoopStrengthReducePass(Registry);
47218893Sdim  initializeLoopUnrollPass(Registry);
48218893Sdim  initializeLoopUnswitchPass(Registry);
49218893Sdim  initializeLoopIdiomRecognizePass(Registry);
50218893Sdim  initializeLowerAtomicPass(Registry);
51224145Sdim  initializeLowerExpectIntrinsicPass(Registry);
52218893Sdim  initializeMemCpyOptPass(Registry);
53224145Sdim  initializeObjCARCAliasAnalysisPass(Registry);
54224145Sdim  initializeObjCARCExpandPass(Registry);
55224145Sdim  initializeObjCARCContractPass(Registry);
56224145Sdim  initializeObjCARCOptPass(Registry);
57218893Sdim  initializeReassociatePass(Registry);
58218893Sdim  initializeRegToMemPass(Registry);
59218893Sdim  initializeSCCPPass(Registry);
60218893Sdim  initializeIPSCCPPass(Registry);
61218893Sdim  initializeSROA_DTPass(Registry);
62218893Sdim  initializeSROA_SSAUpPass(Registry);
63218893Sdim  initializeCFGSimplifyPassPass(Registry);
64218893Sdim  initializeSimplifyLibCallsPass(Registry);
65218893Sdim  initializeSinkingPass(Registry);
66218893Sdim  initializeTailCallElimPass(Registry);
67218893Sdim}
68218893Sdim
69218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
70218893Sdim  initializeScalarOpts(*unwrap(R));
71218893Sdim}
72218893Sdim
73193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
74193323Sed  unwrap(PM)->add(createAggressiveDCEPass());
75193323Sed}
76193323Sed
77193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) {
78193323Sed  unwrap(PM)->add(createCFGSimplificationPass());
79193323Sed}
80193323Sed
81193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) {
82193323Sed  unwrap(PM)->add(createDeadStoreEliminationPass());
83193323Sed}
84193323Sed
85193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) {
86193323Sed  unwrap(PM)->add(createGVNPass());
87193323Sed}
88193323Sed
89193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) {
90193323Sed  unwrap(PM)->add(createIndVarSimplifyPass());
91193323Sed}
92193323Sed
93193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) {
94193323Sed  unwrap(PM)->add(createInstructionCombiningPass());
95193323Sed}
96193323Sed
97193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) {
98193323Sed  unwrap(PM)->add(createJumpThreadingPass());
99193323Sed}
100193323Sed
101193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) {
102193323Sed  unwrap(PM)->add(createLICMPass());
103193323Sed}
104193323Sed
105193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) {
106193323Sed  unwrap(PM)->add(createLoopDeletionPass());
107193323Sed}
108193323Sed
109221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) {
110221345Sdim  unwrap(PM)->add(createLoopIdiomPass());
111221345Sdim}
112221345Sdim
113193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) {
114193323Sed  unwrap(PM)->add(createLoopRotatePass());
115193323Sed}
116193323Sed
117193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) {
118193323Sed  unwrap(PM)->add(createLoopUnrollPass());
119193323Sed}
120193323Sed
121193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) {
122193323Sed  unwrap(PM)->add(createLoopUnswitchPass());
123193323Sed}
124193323Sed
125193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) {
126193323Sed  unwrap(PM)->add(createMemCpyOptPass());
127193323Sed}
128193323Sed
129193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
130193323Sed  unwrap(PM)->add(createPromoteMemoryToRegisterPass());
131193323Sed}
132193323Sed
133193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) {
134193323Sed  unwrap(PM)->add(createReassociatePass());
135193323Sed}
136193323Sed
137193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) {
138193323Sed  unwrap(PM)->add(createSCCPPass());
139193323Sed}
140193323Sed
141193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) {
142193323Sed  unwrap(PM)->add(createScalarReplAggregatesPass());
143193323Sed}
144193323Sed
145221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) {
146221345Sdim  unwrap(PM)->add(createScalarReplAggregatesPass(-1, false));
147221345Sdim}
148221345Sdim
149205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
150205218Srdivacky                                                  int Threshold) {
151205218Srdivacky  unwrap(PM)->add(createScalarReplAggregatesPass(Threshold));
152205218Srdivacky}
153205218Srdivacky
154193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) {
155193323Sed  unwrap(PM)->add(createSimplifyLibCallsPass());
156193323Sed}
157193323Sed
158193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) {
159193323Sed  unwrap(PM)->add(createTailCallEliminationPass());
160193323Sed}
161193323Sed
162193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) {
163193323Sed  unwrap(PM)->add(createConstantPropagationPass());
164193323Sed}
165193323Sed
166193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
167193323Sed  unwrap(PM)->add(createDemoteRegisterToMemoryPass());
168193323Sed}
169205218Srdivacky
170205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) {
171205218Srdivacky  unwrap(PM)->add(createVerifierPass());
172205218Srdivacky}
173221345Sdim
174221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) {
175221345Sdim  unwrap(PM)->add(createCorrelatedValuePropagationPass());
176221345Sdim}
177221345Sdim
178221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) {
179221345Sdim  unwrap(PM)->add(createEarlyCSEPass());
180221345Sdim}
181221345Sdim
182221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
183221345Sdim  unwrap(PM)->add(createTypeBasedAliasAnalysisPass());
184221345Sdim}
185221345Sdim
186221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
187221345Sdim  unwrap(PM)->add(createBasicAliasAnalysisPass());
188221345Sdim}
189226633Sdim
190226633Sdimvoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) {
191226633Sdim  unwrap(PM)->add(createLowerExpectIntrinsicPass());
192226633Sdim}
193