LLVM  3.7.0
Scalar.cpp
Go to the documentation of this file.
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"
19 #include "llvm/Analysis/Passes.h"
20 #include "llvm/IR/DataLayout.h"
21 #include "llvm/IR/Verifier.h"
22 #include "llvm/InitializePasses.h"
24 
25 using namespace llvm;
26 
27 /// initializeScalarOptsPasses - Initialize all passes linked into the
28 /// ScalarOpts library.
30  initializeADCEPass(Registry);
31  initializeBDCEPass(Registry);
37  initializeDCEPass(Registry);
39  initializeScalarizerPass(Registry);
40  initializeDSEPass(Registry);
41  initializeGVNPass(Registry);
47  initializeLICMPass(Registry);
52  initializeLoopRotatePass(Registry);
54  initializeLoopRerollPass(Registry);
55  initializeLoopUnrollPass(Registry);
58  initializeLowerAtomicPass(Registry);
60  initializeMemCpyOptPass(Registry);
64  initializeReassociatePass(Registry);
65  initializeRegToMemPass(Registry);
67  initializeSCCPPass(Registry);
68  initializeIPSCCPPass(Registry);
69  initializeSROAPass(Registry);
70  initializeSROA_DTPass(Registry);
71  initializeSROA_SSAUpPass(Registry);
74  initializeSinkingPass(Registry);
79  initializeLoadCombinePass(Registry);
82  initializeFloat2IntPass(Registry);
84 }
85 
88 }
89 
91  unwrap(PM)->add(createAggressiveDCEPass());
92 }
93 
95  unwrap(PM)->add(createBitTrackingDCEPass());
96 }
97 
100 }
101 
104 }
105 
108 }
109 
111  unwrap(PM)->add(createScalarizerPass());
112 }
113 
115  unwrap(PM)->add(createGVNPass());
116 }
117 
120 }
121 
123  unwrap(PM)->add(createIndVarSimplifyPass());
124 }
125 
128 }
129 
131  unwrap(PM)->add(createJumpThreadingPass());
132 }
133 
135  unwrap(PM)->add(createLICMPass());
136 }
137 
139  unwrap(PM)->add(createLoopDeletionPass());
140 }
141 
143  unwrap(PM)->add(createLoopIdiomPass());
144 }
145 
147  unwrap(PM)->add(createLoopRotatePass());
148 }
149 
151  unwrap(PM)->add(createLoopRerollPass());
152 }
153 
155  unwrap(PM)->add(createLoopUnrollPass());
156 }
157 
159  unwrap(PM)->add(createLoopUnswitchPass());
160 }
161 
163  unwrap(PM)->add(createMemCpyOptPass());
164 }
165 
168 }
169 
171  unwrap(PM)->add(createLowerSwitchPass());
172 }
173 
176 }
177 
179  unwrap(PM)->add(createReassociatePass());
180 }
181 
183  unwrap(PM)->add(createSCCPPass());
184 }
185 
188 }
189 
191  unwrap(PM)->add(createScalarReplAggregatesPass(-1, false));
192 }
193 
195  int Threshold) {
196  unwrap(PM)->add(createScalarReplAggregatesPass(Threshold));
197 }
198 
200  // NOTE: The simplify-libcalls pass has been removed.
201 }
202 
205 }
206 
209 }
210 
213 }
214 
216  unwrap(PM)->add(createVerifierPass());
217 }
218 
221 }
222 
224  unwrap(PM)->add(createEarlyCSEPass());
225 }
226 
229 }
230 
232  unwrap(PM)->add(createScopedNoAliasAAPass());
233 }
234 
237 }
238 
241 }
void initializeEarlyCSELegacyPassPass(PassRegistry &)
FunctionPass * createGVNPass(bool NoLoads=false)
Definition: GVN.cpp:732
void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM)
See llvm::createJumpThreadingPass function.
Definition: Scalar.cpp:130
void initializeLoopUnswitchPass(PassRegistry &)
void LLVMAddGVNPass(LLVMPassManagerRef PM)
See llvm::createGVNPass function.
Definition: Scalar.cpp:114
Pass * createLoopRerollPass()
FunctionPass * createLowerSwitchPass()
FunctionPass * createScalarReplAggregatesPass(signed Threshold=-1, bool UseDomTree=true, signed StructMemberThreshold=-1, signed ArrayElementThreshold=-1, signed ScalarLoadThreshold=-1)
void initializeJumpThreadingPass(PassRegistry &)
void initializeNaryReassociatePass(PassRegistry &)
void LLVMAddLICMPass(LLVMPassManagerRef PM)
See llvm::createLICMPass function.
Definition: Scalar.cpp:134
void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM)
See llvm::createSimplifyLibCallsPass function.
Definition: Scalar.cpp:199
void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM)
See llvm::createTypeBasedAliasAnalysisPass function.
Definition: Scalar.cpp:227
A global registry used in conjunction with static constructors to make pluggable components (like tar...
Definition: Registry.h:61
FunctionPass * createVerifierPass(bool FatalErrors=true)
Create a verifier pass.
Definition: Verifier.cpp:3703
void LLVMAddReassociatePass(LLVMPassManagerRef PM)
See llvm::createReassociatePass function.
Definition: Scalar.cpp:178
void initializeScalarOpts(PassRegistry &)
initializeScalarOpts - Initialize all passes linked into the ScalarOpts library.
Definition: Scalar.cpp:29
void LLVMAddLowerSwitchPass(LLVMPassManagerRef PM)
See llvm::createLowerSwitchPass function.
Definition: Scalar.cpp:170
void initializeLoopStrengthReducePass(PassRegistry &)
void initializePlaceSafepointsPass(PassRegistry &)
void initializeLoopRerollPass(PassRegistry &)
void LLVMAddConstantPropagationPass(LLVMPassManagerRef PM)
See llvm::createConstantPropagationPass function.
Definition: Scalar.cpp:207
FunctionPass * createDemoteRegisterToMemoryPass()
Definition: Reg2Mem.cpp:131
void initializeDSEPass(PassRegistry &)
void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM)
See llvm::createPromoteMemoryToRegisterPass function.
Definition: Scalar.cpp:174
FunctionPass * createAlignmentFromAssumptionsPass()
FunctionPass * createJumpThreadingPass(int Threshold=-1)
void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM)
See llvm::createLoopUnrollPass function.
Definition: Scalar.cpp:154
void initializeSROA_DTPass(PassRegistry &)
void initializeLoadCombinePass(PassRegistry &)
void LLVMAddScalarizerPass(LLVMPassManagerRef PM)
See llvm::createScalarizerPass function.
Definition: Scalar.cpp:110
void LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM)
See llvm::createScalarReplAggregatesPass function.
Definition: Scalar.cpp:190
void initializeMergedLoadStoreMotionPass(PassRegistry &)
void initializeLoopAccessAnalysisPass(PassRegistry &)
FunctionPass * createConstantPropagationPass()
FunctionPass * createReassociatePass()
void initializeStraightLineStrengthReducePass(PassRegistry &)
void LLVMAddMergedLoadStoreMotionPass(LLVMPassManagerRef PM)
See llvm::createMergedLoadStoreMotionPass function.
Definition: Scalar.cpp:118
Pass * createLoopUnswitchPass(bool OptimizeForSize=false)
void initializeConstantPropagationPass(PassRegistry &)
ImmutablePass * createBasicAliasAnalysisPass()
void initializeLoopRotatePass(PassRegistry &)
ImmutablePass * createScopedNoAliasAAPass()
Pass * createLoopUnrollPass(int Threshold=-1, int Count=-1, int AllowPartial=-1, int Runtime=-1)
FunctionPass * createInstructionCombiningPass()
void initializeLoopUnrollPass(PassRegistry &)
void LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM)
See llvm::createScopedNoAliasAAPass function.
Definition: Scalar.cpp:231
void LLVMAddLoopRerollPass(LLVMPassManagerRef PM)
See llvm::createLoopRerollPass function.
Definition: Scalar.cpp:150
void initializeSeparateConstOffsetFromGEPPass(PassRegistry &)
void initializePlaceBackedgeSafepointsImplPass(PassRegistry &)
Pass * createCorrelatedValuePropagationPass()
void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM)
See llvm::createDeadStoreEliminationPass function.
Definition: Scalar.cpp:106
DataLayout * unwrap(LLVMTargetDataRef P)
Definition: DataLayout.h:465
Pass * createLoopRotatePass(int MaxHeaderSize=-1)
ImmutablePass * createTypeBasedAliasAnalysisPass()
void initializeConstantHoistingPass(PassRegistry &)
void initializeLowerExpectIntrinsicPass(PassRegistry &)
void initializeSCCPPass(PassRegistry &)
FunctionPass * createTailCallEliminationPass()
void initializeInductiveRangeCheckEliminationPass(PassRegistry &)
void initializeBDCEPass(PassRegistry &)
FunctionPass * createCFGSimplificationPass(int Threshold=-1, std::function< bool(const Function &)> Ftor=nullptr)
void LLVMAddAlignmentFromAssumptionsPass(LLVMPassManagerRef PM)
See llvm::createAlignmentFromAssumptionsPass function.
Definition: Scalar.cpp:98
void initializeLoopDeletionPass(PassRegistry &)
void initializeLowerAtomicPass(PassRegistry &)
void LLVMAddLoopRotatePass(LLVMPassManagerRef PM)
See llvm::createLoopRotatePass function.
Definition: Scalar.cpp:146
void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, int Threshold)
See llvm::createScalarReplAggregatesPass function.
Definition: Scalar.cpp:194
FunctionPass * createMemCpyOptPass()
FunctionPass * createBitTrackingDCEPass()
Definition: BDCE.cpp:407
void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM)
See llvm::createLoopDeletionPass function.
Definition: Scalar.cpp:138
void initializeIPSCCPPass(PassRegistry &)
FunctionPass * createEarlyCSEPass()
Definition: EarlyCSE.cpp:771
void LLVMAddEarlyCSEPass(LLVMPassManagerRef PM)
See llvm::createEarlyCSEPass function.
Definition: Scalar.cpp:223
void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM)
See llvm::createScalarReplAggregatesPass function.
Definition: Scalar.cpp:186
void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM)
See llvm::createLoopIdiomPass function.
Definition: Scalar.cpp:142
void initializeLICMPass(PassRegistry &)
void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM)
See llvm::createInstructionCombiningPass function.
Definition: Scalar.cpp:126
void initializeLoopDistributePass(PassRegistry &)
void initializeStructurizeCFGPass(PassRegistry &)
void initializeLoopInterchangePass(PassRegistry &)
void initializeRegToMemPass(PassRegistry &)
void initializeCorrelatedValuePropagationPass(PassRegistry &)
struct LLVMOpaquePassRegistry * LLVMPassRegistryRef
Definition: Core.h:119
void LLVMAddSCCPPass(LLVMPassManagerRef PM)
See llvm::createSCCPPass function.
Definition: Scalar.cpp:182
void LLVMInitializeScalarOpts(LLVMPassRegistryRef R)
Definition: Scalar.cpp:86
FunctionPass * createDeadStoreEliminationPass()
void LLVMAddVerifierPass(LLVMPassManagerRef PM)
See llvm::createVerifierPass function.
Definition: Scalar.cpp:215
void initializeRewriteStatepointsForGCPass(PassRegistry &)
void initializeSROA_SSAUpPass(PassRegistry &)
void initializeScalarizerPass(PassRegistry &)
FunctionPass * createMergedLoadStoreMotionPass()
createMergedLoadStoreMotionPass - The public interface to this file.
void initializeTailCallElimPass(PassRegistry &)
void initializeReassociatePass(PassRegistry &)
Pass * createLoopDeletionPass()
void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM)
See llvm::demotePromoteMemoryToRegisterPass function.
Definition: Scalar.cpp:211
void initializeSinkingPass(PassRegistry &)
Pass * createLICMPass()
Definition: LICM.cpp:172
void initializeDCEPass(PassRegistry &)
void initializeIndVarSimplifyPass(PassRegistry &)
void initializeSROAPass(PassRegistry &)
void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM)
See llvm::createBasicAliasAnalysisPass function.
Definition: Scalar.cpp:235
void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM)
See llvm::createBitTrackingDCEPass function.
Definition: Scalar.cpp:94
Pass * createLoopIdiomPass()
FunctionPass * createSCCPPass()
FunctionPass * createPartiallyInlineLibCallsPass()
FunctionPass * createAggressiveDCEPass()
Definition: ADCE.cpp:97
struct LLVMOpaquePassManager * LLVMPassManagerRef
Definition: Core.h:116
void LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM)
See llvm::createCorrelatedValuePropagationPass function.
Definition: Scalar.cpp:219
void initializeAlignmentFromAssumptionsPass(PassRegistry &)
void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM)
See llvm::createLowerExpectIntrinsicPass function.
Definition: Scalar.cpp:239
void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM)
See llvm::createIndVarSimplifyPass function.
Definition: Scalar.cpp:122
void LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM)
See llvm::createTailCallEliminationPass function.
Definition: Scalar.cpp:203
FunctionPass * createPromoteMemoryToRegisterPass()
Definition: Mem2Reg.cpp:94
void LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM)
See llvm::createPartiallyInlineLibCallsPass function.
Definition: Scalar.cpp:166
void initializeLoopIdiomRecognizePass(PassRegistry &)
static int const Threshold
TODO: Write a new FunctionPass AliasAnalysis so that it can keep a cache.
void initializeCFGSimplifyPassPass(PassRegistry &)
void initializeFloat2IntPass(PassRegistry &)
void initializeMemCpyOptPass(PassRegistry &)
void initializeSpeculativeExecutionPass(PassRegistry &)
void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM)
See llvm::createLoopUnswitchPass function.
Definition: Scalar.cpp:158
void initializeADCEPass(PassRegistry &)
FunctionPass * createScalarizerPass()
Definition: Scalarizer.cpp:674
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
Definition: PassRegistry.h:41
void initializePartiallyInlineLibCallsPass(PassRegistry &)
void LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM)
See llvm::createCFGSimplificationPass function.
Definition: Scalar.cpp:102
void LLVMAddMemCpyOptPass(LLVMPassManagerRef PM)
See llvm::createMemCpyOptPass function.
Definition: Scalar.cpp:162
void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM)
See llvm::createAggressiveDCEPass function.
Definition: Scalar.cpp:90
Pass * createIndVarSimplifyPass()
FunctionPass * createLowerExpectIntrinsicPass()
void initializeDeadInstEliminationPass(PassRegistry &)
void initializeSampleProfileLoaderPass(PassRegistry &)
void initializeFlattenCFGPassPass(PassRegistry &)
void initializeLoopInstSimplifyPass(PassRegistry &)
void initializeGVNPass(PassRegistry &)