Scalar.h revision 224145
1//===-- Scalar.h - Scalar Transformations -----------------------*- C++ -*-===//
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 header file defines prototypes for accessor functions that expose passes
11// in the Scalar transformations library.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_TRANSFORMS_SCALAR_H
16#define LLVM_TRANSFORMS_SCALAR_H
17
18namespace llvm {
19
20class FunctionPass;
21class Pass;
22class GetElementPtrInst;
23class PassInfo;
24class TerminatorInst;
25class TargetLowering;
26
27//===----------------------------------------------------------------------===//
28//
29// ConstantPropagation - A worklist driven constant propagation pass
30//
31FunctionPass *createConstantPropagationPass();
32
33//===----------------------------------------------------------------------===//
34//
35// SCCP - Sparse conditional constant propagation.
36//
37FunctionPass *createSCCPPass();
38
39//===----------------------------------------------------------------------===//
40//
41// DeadInstElimination - This pass quickly removes trivially dead instructions
42// without modifying the CFG of the function.  It is a BasicBlockPass, so it
43// runs efficiently when queued next to other BasicBlockPass's.
44//
45Pass *createDeadInstEliminationPass();
46
47//===----------------------------------------------------------------------===//
48//
49// DeadCodeElimination - This pass is more powerful than DeadInstElimination,
50// because it is worklist driven that can potentially revisit instructions when
51// their other instructions become dead, to eliminate chains of dead
52// computations.
53//
54FunctionPass *createDeadCodeEliminationPass();
55
56//===----------------------------------------------------------------------===//
57//
58// DeadStoreElimination - This pass deletes stores that are post-dominated by
59// must-aliased stores and are not loaded used between the stores.
60//
61FunctionPass *createDeadStoreEliminationPass();
62
63//===----------------------------------------------------------------------===//
64//
65// AggressiveDCE - This pass uses the SSA based Aggressive DCE algorithm.  This
66// algorithm assumes instructions are dead until proven otherwise, which makes
67// it more successful are removing non-obviously dead instructions.
68//
69FunctionPass *createAggressiveDCEPass();
70
71//===----------------------------------------------------------------------===//
72//
73// ScalarReplAggregates - Break up alloca's of aggregates into multiple allocas
74// if possible.
75//
76FunctionPass *createScalarReplAggregatesPass(signed Threshold = -1,
77                                             bool UseDomTree = true);
78
79//===----------------------------------------------------------------------===//
80//
81// InductionVariableSimplify - Transform induction variables in a program to all
82// use a single canonical induction variable per loop.
83//
84Pass *createIndVarSimplifyPass();
85
86//===----------------------------------------------------------------------===//
87//
88// InstructionCombining - Combine instructions to form fewer, simple
89// instructions. This pass does not modify the CFG, and has a tendency to make
90// instructions dead, so a subsequent DCE pass is useful.
91//
92// This pass combines things like:
93//    %Y = add int 1, %X
94//    %Z = add int 1, %Y
95// into:
96//    %Z = add int 2, %X
97//
98FunctionPass *createInstructionCombiningPass();
99
100//===----------------------------------------------------------------------===//
101//
102// LICM - This pass is a loop invariant code motion and memory promotion pass.
103//
104Pass *createLICMPass();
105
106//===----------------------------------------------------------------------===//
107//
108// LoopStrengthReduce - This pass is strength reduces GEP instructions that use
109// a loop's canonical induction variable as one of their indices.  It takes an
110// optional parameter used to consult the target machine whether certain
111// transformations are profitable.
112//
113Pass *createLoopStrengthReducePass(const TargetLowering *TLI = 0);
114
115//===----------------------------------------------------------------------===//
116//
117// LoopUnswitch - This pass is a simple loop unswitching pass.
118//
119Pass *createLoopUnswitchPass(bool OptimizeForSize = false);
120
121//===----------------------------------------------------------------------===//
122//
123// LoopInstSimplify - This pass simplifies instructions in a loop's body.
124//
125Pass *createLoopInstSimplifyPass();
126
127//===----------------------------------------------------------------------===//
128//
129// LoopUnroll - This pass is a simple loop unrolling pass.
130//
131Pass *createLoopUnrollPass(int Threshold = -1, int Count = -1, int AllowPartial = -1);
132
133//===----------------------------------------------------------------------===//
134//
135// LoopRotate - This pass is a simple loop rotating pass.
136//
137Pass *createLoopRotatePass();
138
139//===----------------------------------------------------------------------===//
140//
141// LoopIdiom - This pass recognizes and replaces idioms in loops.
142//
143Pass *createLoopIdiomPass();
144
145//===----------------------------------------------------------------------===//
146//
147// PromoteMemoryToRegister - This pass is used to promote memory references to
148// be register references. A simple example of the transformation performed by
149// this pass is:
150//
151//        FROM CODE                           TO CODE
152//   %X = alloca i32, i32 1                 ret i32 42
153//   store i32 42, i32 *%X
154//   %Y = load i32* %X
155//   ret i32 %Y
156//
157FunctionPass *createPromoteMemoryToRegisterPass();
158
159//===----------------------------------------------------------------------===//
160//
161// DemoteRegisterToMemoryPass - This pass is used to demote registers to memory
162// references. In basically undoes the PromoteMemoryToRegister pass to make cfg
163// hacking easier.
164//
165FunctionPass *createDemoteRegisterToMemoryPass();
166extern char &DemoteRegisterToMemoryID;
167
168//===----------------------------------------------------------------------===//
169//
170// Reassociate - This pass reassociates commutative expressions in an order that
171// is designed to promote better constant propagation, GCSE, LICM, PRE...
172//
173// For example:  4 + (x + 5)  ->  x + (4 + 5)
174//
175FunctionPass *createReassociatePass();
176
177//===----------------------------------------------------------------------===//
178//
179// TailDuplication - Eliminate unconditional branches through controlled code
180// duplication, creating simpler CFG structures.
181//
182FunctionPass *createTailDuplicationPass();
183
184//===----------------------------------------------------------------------===//
185//
186// JumpThreading - Thread control through mult-pred/multi-succ blocks where some
187// preds always go to some succ.
188//
189FunctionPass *createJumpThreadingPass();
190
191//===----------------------------------------------------------------------===//
192//
193// CFGSimplification - Merge basic blocks, eliminate unreachable blocks,
194// simplify terminator instructions, etc...
195//
196FunctionPass *createCFGSimplificationPass();
197
198//===----------------------------------------------------------------------===//
199//
200// BreakCriticalEdges - Break all of the critical edges in the CFG by inserting
201// a dummy basic block. This pass may be "required" by passes that cannot deal
202// with critical edges. For this usage, a pass must call:
203//
204//   AU.addRequiredID(BreakCriticalEdgesID);
205//
206// This pass obviously invalidates the CFG, but can update forward dominator
207// (set, immediate dominators, tree, and frontier) information.
208//
209FunctionPass *createBreakCriticalEdgesPass();
210extern char &BreakCriticalEdgesID;
211
212//===----------------------------------------------------------------------===//
213//
214// LoopSimplify - Insert Pre-header blocks into the CFG for every function in
215// the module.  This pass updates dominator information, loop information, and
216// does not add critical edges to the CFG.
217//
218//   AU.addRequiredID(LoopSimplifyID);
219//
220Pass *createLoopSimplifyPass();
221extern char &LoopSimplifyID;
222
223//===----------------------------------------------------------------------===//
224//
225// TailCallElimination - This pass eliminates call instructions to the current
226// function which occur immediately before return instructions.
227//
228FunctionPass *createTailCallEliminationPass();
229
230//===----------------------------------------------------------------------===//
231//
232// LowerSwitch - This pass converts SwitchInst instructions into a sequence of
233// chained binary branch instructions.
234//
235FunctionPass *createLowerSwitchPass();
236extern char &LowerSwitchID;
237
238//===----------------------------------------------------------------------===//
239//
240// LowerInvoke - This pass converts invoke and unwind instructions to use sjlj
241// exception handling mechanisms.  Note that after this pass runs the CFG is not
242// entirely accurate (exceptional control flow edges are not correct anymore) so
243// only very simple things should be done after the lowerinvoke pass has run
244// (like generation of native code).  This should *NOT* be used as a general
245// purpose "my LLVM-to-LLVM pass doesn't support the invoke instruction yet"
246// lowering pass.
247//
248FunctionPass *createLowerInvokePass(const TargetLowering *TLI = 0);
249FunctionPass *createLowerInvokePass(const TargetLowering *TLI,
250                                    bool useExpensiveEHSupport);
251extern char &LowerInvokePassID;
252
253//===----------------------------------------------------------------------===//
254//
255// BlockPlacement - This pass reorders basic blocks in order to increase the
256// number of fall-through conditional branches.
257//
258FunctionPass *createBlockPlacementPass();
259
260//===----------------------------------------------------------------------===//
261//
262// LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop
263// optimizations.
264//
265Pass *createLCSSAPass();
266extern char &LCSSAID;
267
268//===----------------------------------------------------------------------===//
269//
270// EarlyCSE - This pass performs a simple and fast CSE pass over the dominator
271// tree.
272//
273FunctionPass *createEarlyCSEPass();
274
275//===----------------------------------------------------------------------===//
276//
277// GVN - This pass performs global value numbering and redundant load
278// elimination cotemporaneously.
279//
280FunctionPass *createGVNPass(bool NoLoads = false);
281
282//===----------------------------------------------------------------------===//
283//
284// MemCpyOpt - This pass performs optimizations related to eliminating memcpy
285// calls and/or combining multiple stores into memset's.
286//
287FunctionPass *createMemCpyOptPass();
288
289//===----------------------------------------------------------------------===//
290//
291// LoopDeletion - This pass performs DCE of non-infinite loops that it
292// can prove are dead.
293//
294Pass *createLoopDeletionPass();
295
296//===----------------------------------------------------------------------===//
297//
298/// createSimplifyLibCallsPass - This pass optimizes specific calls to
299/// specific well-known (library) functions.
300FunctionPass *createSimplifyLibCallsPass();
301
302//===----------------------------------------------------------------------===//
303//
304// CodeGenPrepare - This pass prepares a function for instruction selection.
305//
306FunctionPass *createCodeGenPreparePass(const TargetLowering *TLI = 0);
307
308//===----------------------------------------------------------------------===//
309//
310// InstructionNamer - Give any unnamed non-void instructions "tmp" names.
311//
312FunctionPass *createInstructionNamerPass();
313extern char &InstructionNamerID;
314
315//===----------------------------------------------------------------------===//
316//
317// GEPSplitter - Split complex GEPs into simple ones
318//
319FunctionPass *createGEPSplitterPass();
320
321//===----------------------------------------------------------------------===//
322//
323// Sink - Code Sinking
324//
325FunctionPass *createSinkingPass();
326
327//===----------------------------------------------------------------------===//
328//
329// LowerAtomic - Lower atomic intrinsics to non-atomic form
330//
331Pass *createLowerAtomicPass();
332
333//===----------------------------------------------------------------------===//
334//
335// ValuePropagation - Propagate CFG-derived value information
336//
337Pass *createCorrelatedValuePropagationPass();
338
339//===----------------------------------------------------------------------===//
340//
341// ObjCARCExpand - ObjC ARC preliminary simplifications.
342//
343Pass *createObjCARCExpandPass();
344
345//===----------------------------------------------------------------------===//
346//
347// ObjCARCContract - Late ObjC ARC cleanups.
348//
349Pass *createObjCARCContractPass();
350
351//===----------------------------------------------------------------------===//
352//
353// ObjCARCOpt - ObjC ARC optimization.
354//
355Pass *createObjCARCOptPass();
356
357//===----------------------------------------------------------------------===//
358//
359// InstructionSimplifier - Remove redundant instructions.
360//
361FunctionPass *createInstructionSimplifierPass();
362extern char &InstructionSimplifierID;
363
364
365//===----------------------------------------------------------------------===//
366//
367// LowerExpectIntriniscs - Removes llvm.expect intrinsics and creates
368// "block_weights" metadata.
369FunctionPass *createLowerExpectIntrinsicPass();
370
371
372} // End llvm namespace
373
374#endif
375