Scalar.cpp revision 221345
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);
51218893Sdim  initializeMemCpyOptPass(Registry);
52218893Sdim  initializeReassociatePass(Registry);
53218893Sdim  initializeRegToMemPass(Registry);
54218893Sdim  initializeSCCPPass(Registry);
55218893Sdim  initializeIPSCCPPass(Registry);
56218893Sdim  initializeSROA_DTPass(Registry);
57218893Sdim  initializeSROA_SSAUpPass(Registry);
58218893Sdim  initializeCFGSimplifyPassPass(Registry);
59218893Sdim  initializeSimplifyLibCallsPass(Registry);
60218893Sdim  initializeSinkingPass(Registry);
61218893Sdim  initializeTailDupPass(Registry);
62218893Sdim  initializeTailCallElimPass(Registry);
63218893Sdim}
64218893Sdim
65218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
66218893Sdim  initializeScalarOpts(*unwrap(R));
67218893Sdim}
68218893Sdim
69193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
70193323Sed  unwrap(PM)->add(createAggressiveDCEPass());
71193323Sed}
72193323Sed
73193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) {
74193323Sed  unwrap(PM)->add(createCFGSimplificationPass());
75193323Sed}
76193323Sed
77193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) {
78193323Sed  unwrap(PM)->add(createDeadStoreEliminationPass());
79193323Sed}
80193323Sed
81193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) {
82193323Sed  unwrap(PM)->add(createGVNPass());
83193323Sed}
84193323Sed
85193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) {
86193323Sed  unwrap(PM)->add(createIndVarSimplifyPass());
87193323Sed}
88193323Sed
89193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) {
90193323Sed  unwrap(PM)->add(createInstructionCombiningPass());
91193323Sed}
92193323Sed
93193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) {
94193323Sed  unwrap(PM)->add(createJumpThreadingPass());
95193323Sed}
96193323Sed
97193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) {
98193323Sed  unwrap(PM)->add(createLICMPass());
99193323Sed}
100193323Sed
101193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) {
102193323Sed  unwrap(PM)->add(createLoopDeletionPass());
103193323Sed}
104193323Sed
105221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) {
106221345Sdim  unwrap(PM)->add(createLoopIdiomPass());
107221345Sdim}
108221345Sdim
109193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) {
110193323Sed  unwrap(PM)->add(createLoopRotatePass());
111193323Sed}
112193323Sed
113193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) {
114193323Sed  unwrap(PM)->add(createLoopUnrollPass());
115193323Sed}
116193323Sed
117193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) {
118193323Sed  unwrap(PM)->add(createLoopUnswitchPass());
119193323Sed}
120193323Sed
121193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) {
122193323Sed  unwrap(PM)->add(createMemCpyOptPass());
123193323Sed}
124193323Sed
125193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
126193323Sed  unwrap(PM)->add(createPromoteMemoryToRegisterPass());
127193323Sed}
128193323Sed
129193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) {
130193323Sed  unwrap(PM)->add(createReassociatePass());
131193323Sed}
132193323Sed
133193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) {
134193323Sed  unwrap(PM)->add(createSCCPPass());
135193323Sed}
136193323Sed
137193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) {
138193323Sed  unwrap(PM)->add(createScalarReplAggregatesPass());
139193323Sed}
140193323Sed
141221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) {
142221345Sdim  unwrap(PM)->add(createScalarReplAggregatesPass(-1, false));
143221345Sdim}
144221345Sdim
145205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
146205218Srdivacky                                                  int Threshold) {
147205218Srdivacky  unwrap(PM)->add(createScalarReplAggregatesPass(Threshold));
148205218Srdivacky}
149205218Srdivacky
150193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) {
151193323Sed  unwrap(PM)->add(createSimplifyLibCallsPass());
152193323Sed}
153193323Sed
154193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) {
155193323Sed  unwrap(PM)->add(createTailCallEliminationPass());
156193323Sed}
157193323Sed
158193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) {
159193323Sed  unwrap(PM)->add(createConstantPropagationPass());
160193323Sed}
161193323Sed
162193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
163193323Sed  unwrap(PM)->add(createDemoteRegisterToMemoryPass());
164193323Sed}
165205218Srdivacky
166205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) {
167205218Srdivacky  unwrap(PM)->add(createVerifierPass());
168205218Srdivacky}
169221345Sdim
170221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) {
171221345Sdim  unwrap(PM)->add(createCorrelatedValuePropagationPass());
172221345Sdim}
173221345Sdim
174221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) {
175221345Sdim  unwrap(PM)->add(createEarlyCSEPass());
176221345Sdim}
177221345Sdim
178221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
179221345Sdim  unwrap(PM)->add(createTypeBasedAliasAnalysisPass());
180221345Sdim}
181221345Sdim
182221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
183221345Sdim  unwrap(PM)->add(createBasicAliasAnalysisPass());
184221345Sdim}
185