Scalar.cpp revision 249423
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//
10239462Sdim// 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
16249423Sdim#include "llvm/Transforms/Scalar.h"
17249423Sdim#include "llvm-c/Initialization.h"
18193323Sed#include "llvm-c/Transforms/Scalar.h"
19249423Sdim#include "llvm/Analysis/Passes.h"
20249423Sdim#include "llvm/Analysis/Verifier.h"
21249423Sdim#include "llvm/IR/DataLayout.h"
22218893Sdim#include "llvm/InitializePasses.h"
23193323Sed#include "llvm/PassManager.h"
24193323Sed
25193323Sedusing namespace llvm;
26193323Sed
27239462Sdim/// 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);
53218893Sdim  initializeReassociatePass(Registry);
54218893Sdim  initializeRegToMemPass(Registry);
55218893Sdim  initializeSCCPPass(Registry);
56218893Sdim  initializeIPSCCPPass(Registry);
57243830Sdim  initializeSROAPass(Registry);
58218893Sdim  initializeSROA_DTPass(Registry);
59218893Sdim  initializeSROA_SSAUpPass(Registry);
60218893Sdim  initializeCFGSimplifyPassPass(Registry);
61218893Sdim  initializeSimplifyLibCallsPass(Registry);
62218893Sdim  initializeSinkingPass(Registry);
63218893Sdim  initializeTailCallElimPass(Registry);
64218893Sdim}
65218893Sdim
66218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
67218893Sdim  initializeScalarOpts(*unwrap(R));
68218893Sdim}
69218893Sdim
70193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
71193323Sed  unwrap(PM)->add(createAggressiveDCEPass());
72193323Sed}
73193323Sed
74193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) {
75193323Sed  unwrap(PM)->add(createCFGSimplificationPass());
76193323Sed}
77193323Sed
78193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) {
79193323Sed  unwrap(PM)->add(createDeadStoreEliminationPass());
80193323Sed}
81193323Sed
82193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) {
83193323Sed  unwrap(PM)->add(createGVNPass());
84193323Sed}
85193323Sed
86193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) {
87193323Sed  unwrap(PM)->add(createIndVarSimplifyPass());
88193323Sed}
89193323Sed
90193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) {
91193323Sed  unwrap(PM)->add(createInstructionCombiningPass());
92193323Sed}
93193323Sed
94193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) {
95193323Sed  unwrap(PM)->add(createJumpThreadingPass());
96193323Sed}
97193323Sed
98193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) {
99193323Sed  unwrap(PM)->add(createLICMPass());
100193323Sed}
101193323Sed
102193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) {
103193323Sed  unwrap(PM)->add(createLoopDeletionPass());
104193323Sed}
105193323Sed
106221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) {
107221345Sdim  unwrap(PM)->add(createLoopIdiomPass());
108221345Sdim}
109221345Sdim
110193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) {
111193323Sed  unwrap(PM)->add(createLoopRotatePass());
112193323Sed}
113193323Sed
114193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) {
115193323Sed  unwrap(PM)->add(createLoopUnrollPass());
116193323Sed}
117193323Sed
118193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) {
119193323Sed  unwrap(PM)->add(createLoopUnswitchPass());
120193323Sed}
121193323Sed
122193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) {
123193323Sed  unwrap(PM)->add(createMemCpyOptPass());
124193323Sed}
125193323Sed
126193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
127193323Sed  unwrap(PM)->add(createPromoteMemoryToRegisterPass());
128193323Sed}
129193323Sed
130193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) {
131193323Sed  unwrap(PM)->add(createReassociatePass());
132193323Sed}
133193323Sed
134193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) {
135193323Sed  unwrap(PM)->add(createSCCPPass());
136193323Sed}
137193323Sed
138193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) {
139193323Sed  unwrap(PM)->add(createScalarReplAggregatesPass());
140193323Sed}
141193323Sed
142221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) {
143221345Sdim  unwrap(PM)->add(createScalarReplAggregatesPass(-1, false));
144221345Sdim}
145221345Sdim
146205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
147205218Srdivacky                                                  int Threshold) {
148205218Srdivacky  unwrap(PM)->add(createScalarReplAggregatesPass(Threshold));
149205218Srdivacky}
150205218Srdivacky
151193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) {
152193323Sed  unwrap(PM)->add(createSimplifyLibCallsPass());
153193323Sed}
154193323Sed
155193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) {
156193323Sed  unwrap(PM)->add(createTailCallEliminationPass());
157193323Sed}
158193323Sed
159193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) {
160193323Sed  unwrap(PM)->add(createConstantPropagationPass());
161193323Sed}
162193323Sed
163193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
164193323Sed  unwrap(PM)->add(createDemoteRegisterToMemoryPass());
165193323Sed}
166205218Srdivacky
167205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) {
168205218Srdivacky  unwrap(PM)->add(createVerifierPass());
169205218Srdivacky}
170221345Sdim
171221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) {
172221345Sdim  unwrap(PM)->add(createCorrelatedValuePropagationPass());
173221345Sdim}
174221345Sdim
175221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) {
176221345Sdim  unwrap(PM)->add(createEarlyCSEPass());
177221345Sdim}
178221345Sdim
179221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
180221345Sdim  unwrap(PM)->add(createTypeBasedAliasAnalysisPass());
181221345Sdim}
182221345Sdim
183221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
184221345Sdim  unwrap(PM)->add(createBasicAliasAnalysisPass());
185221345Sdim}
186226633Sdim
187226633Sdimvoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) {
188226633Sdim  unwrap(PM)->add(createLowerExpectIntrinsicPass());
189226633Sdim}
190