1
//===-- Scalar.h - Scalar Transformations -----------------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This header file defines prototypes for accessor functions that expose passes
11
// in the Scalar transformations library.
13
//===----------------------------------------------------------------------===//
15
#ifndef LLVM_TRANSFORMS_SCALAR_H
16
#define LLVM_TRANSFORMS_SCALAR_H
22
class GetElementPtrInst;
27
//===----------------------------------------------------------------------===//
29
// ConstantPropagation - A worklist driven constant propagation pass
31
FunctionPass *createConstantPropagationPass();
33
//===----------------------------------------------------------------------===//
35
// SCCP - Sparse conditional constant propagation.
37
FunctionPass *createSCCPPass();
39
//===----------------------------------------------------------------------===//
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.
45
Pass *createDeadInstEliminationPass();
47
//===----------------------------------------------------------------------===//
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
54
FunctionPass *createDeadCodeEliminationPass();
56
//===----------------------------------------------------------------------===//
58
// DeadStoreElimination - This pass deletes stores that are post-dominated by
59
// must-aliased stores and are not loaded used between the stores.
61
FunctionPass *createDeadStoreEliminationPass();
63
//===----------------------------------------------------------------------===//
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.
69
FunctionPass *createAggressiveDCEPass();
71
//===----------------------------------------------------------------------===//
73
// ScalarReplAggregates - Break up alloca's of aggregates into multiple allocas
76
FunctionPass *createScalarReplAggregatesPass(signed Threshold = -1);
78
//===----------------------------------------------------------------------===//
80
// InductionVariableSimplify - Transform induction variables in a program to all
81
// use a single canonical induction variable per loop.
83
Pass *createIndVarSimplifyPass();
85
//===----------------------------------------------------------------------===//
87
// InstructionCombining - Combine instructions to form fewer, simple
88
// instructions. This pass does not modify the CFG, and has a tendency to make
89
// instructions dead, so a subsequent DCE pass is useful.
91
// This pass combines things like:
97
FunctionPass *createInstructionCombiningPass();
99
//===----------------------------------------------------------------------===//
101
// LICM - This pass is a loop invariant code motion and memory promotion pass.
103
Pass *createLICMPass();
105
//===----------------------------------------------------------------------===//
107
// LoopStrengthReduce - This pass is strength reduces GEP instructions that use
108
// a loop's canonical induction variable as one of their indices. It takes an
109
// optional parameter used to consult the target machine whether certain
110
// transformations are profitable.
112
Pass *createLoopStrengthReducePass(const TargetLowering *TLI = 0);
114
//===----------------------------------------------------------------------===//
116
// LoopUnswitch - This pass is a simple loop unswitching pass.
118
Pass *createLoopUnswitchPass(bool OptimizeForSize = false);
120
//===----------------------------------------------------------------------===//
122
// LoopUnroll - This pass is a simple loop unrolling pass.
124
Pass *createLoopUnrollPass();
126
//===----------------------------------------------------------------------===//
128
// LoopRotate - This pass is a simple loop rotating pass.
130
Pass *createLoopRotatePass();
132
//===----------------------------------------------------------------------===//
134
// LoopIndexSplit - This pass divides loop's iteration range by spliting loop
135
// such that each individual loop is executed efficiently.
137
Pass *createLoopIndexSplitPass();
139
//===----------------------------------------------------------------------===//
141
// PromoteMemoryToRegister - This pass is used to promote memory references to
142
// be register references. A simple example of the transformation performed by
146
// %X = alloca i32, i32 1 ret i32 42
147
// store i32 42, i32 *%X
151
FunctionPass *createPromoteMemoryToRegisterPass();
152
extern const PassInfo *const PromoteMemoryToRegisterID;
154
//===----------------------------------------------------------------------===//
156
// DemoteRegisterToMemoryPass - This pass is used to demote registers to memory
157
// references. In basically undoes the PromoteMemoryToRegister pass to make cfg
160
FunctionPass *createDemoteRegisterToMemoryPass();
161
extern const PassInfo *const DemoteRegisterToMemoryID;
163
//===----------------------------------------------------------------------===//
165
// Reassociate - This pass reassociates commutative expressions in an order that
166
// is designed to promote better constant propagation, GCSE, LICM, PRE...
168
// For example: 4 + (x + 5) -> x + (4 + 5)
170
FunctionPass *createReassociatePass();
172
//===----------------------------------------------------------------------===//
174
// TailDuplication - Eliminate unconditional branches through controlled code
175
// duplication, creating simpler CFG structures.
177
FunctionPass *createTailDuplicationPass();
179
//===----------------------------------------------------------------------===//
181
// JumpThreading - Thread control through mult-pred/multi-succ blocks where some
182
// preds always go to some succ.
184
FunctionPass *createJumpThreadingPass();
186
//===----------------------------------------------------------------------===//
188
// CFGSimplification - Merge basic blocks, eliminate unreachable blocks,
189
// simplify terminator instructions, etc...
191
FunctionPass *createCFGSimplificationPass();
193
//===----------------------------------------------------------------------===//
195
// BreakCriticalEdges - Break all of the critical edges in the CFG by inserting
196
// a dummy basic block. This pass may be "required" by passes that cannot deal
197
// with critical edges. For this usage, a pass must call:
199
// AU.addRequiredID(BreakCriticalEdgesID);
201
// This pass obviously invalidates the CFG, but can update forward dominator
202
// (set, immediate dominators, tree, and frontier) information.
204
FunctionPass *createBreakCriticalEdgesPass();
205
extern const PassInfo *const BreakCriticalEdgesID;
207
//===----------------------------------------------------------------------===//
209
// LoopSimplify - Insert Pre-header blocks into the CFG for every function in
210
// the module. This pass updates dominator information, loop information, and
211
// does not add critical edges to the CFG.
213
// AU.addRequiredID(LoopSimplifyID);
215
Pass *createLoopSimplifyPass();
216
extern const PassInfo *const LoopSimplifyID;
218
//===----------------------------------------------------------------------===//
220
// TailCallElimination - This pass eliminates call instructions to the current
221
// function which occur immediately before return instructions.
223
FunctionPass *createTailCallEliminationPass();
225
//===----------------------------------------------------------------------===//
227
// LowerSwitch - This pass converts SwitchInst instructions into a sequence of
228
// chained binary branch instructions.
230
FunctionPass *createLowerSwitchPass();
231
extern const PassInfo *const LowerSwitchID;
233
//===----------------------------------------------------------------------===//
235
// LowerInvoke - This pass converts invoke and unwind instructions to use sjlj
236
// exception handling mechanisms. Note that after this pass runs the CFG is not
237
// entirely accurate (exceptional control flow edges are not correct anymore) so
238
// only very simple things should be done after the lowerinvoke pass has run
239
// (like generation of native code). This should *NOT* be used as a general
240
// purpose "my LLVM-to-LLVM pass doesn't support the invoke instruction yet"
243
FunctionPass *createLowerInvokePass(const TargetLowering *TLI = 0);
244
extern const PassInfo *const LowerInvokePassID;
246
//===----------------------------------------------------------------------===//
248
// BlockPlacement - This pass reorders basic blocks in order to increase the
249
// number of fall-through conditional branches.
251
FunctionPass *createBlockPlacementPass();
253
//===----------------------------------------------------------------------===//
255
// LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop
258
Pass *createLCSSAPass();
259
extern const PassInfo *const LCSSAID;
261
//===----------------------------------------------------------------------===//
263
// GVN - This pass performs global value numbering and redundant load
264
// elimination cotemporaneously.
266
FunctionPass *createGVNPass(bool NoLoads = false);
268
//===----------------------------------------------------------------------===//
270
// MemCpyOpt - This pass performs optimizations related to eliminating memcpy
271
// calls and/or combining multiple stores into memset's.
273
FunctionPass *createMemCpyOptPass();
275
//===----------------------------------------------------------------------===//
277
// LoopDeletion - This pass performs DCE of non-infinite loops that it
278
// can prove are dead.
280
Pass *createLoopDeletionPass();
282
//===----------------------------------------------------------------------===//
284
/// createSimplifyLibCallsPass - This pass optimizes specific calls to
285
/// specific well-known (library) functions.
286
FunctionPass *createSimplifyLibCallsPass();
288
//===----------------------------------------------------------------------===//
290
/// createSimplifyHalfPowrLibCallsPass - This is an experimental pass that
291
/// optimizes specific half_pow functions.
292
FunctionPass *createSimplifyHalfPowrLibCallsPass();
294
//===----------------------------------------------------------------------===//
296
// CodeGenPrepare - This pass prepares a function for instruction selection.
298
FunctionPass *createCodeGenPreparePass(const TargetLowering *TLI = 0);
300
//===----------------------------------------------------------------------===//
302
// InstructionNamer - Give any unnamed non-void instructions "tmp" names.
304
FunctionPass *createInstructionNamerPass();
305
extern const PassInfo *const InstructionNamerID;
307
//===----------------------------------------------------------------------===//
309
// SSI - This pass converts instructions to Static Single Information form
312
FunctionPass *createSSIPass();
314
//===----------------------------------------------------------------------===//
316
// SSI - This pass converts every non-void instuction to Static Single
319
FunctionPass *createSSIEverythingPass();
321
//===----------------------------------------------------------------------===//
323
// GEPSplitter - Split complex GEPs into simple ones
325
FunctionPass *createGEPSplitterPass();
327
//===----------------------------------------------------------------------===//
329
// SCCVN - Aggressively eliminate redundant scalar values
331
FunctionPass *createSCCVNPass();
333
//===----------------------------------------------------------------------===//
335
// ABCD - Elimination of Array Bounds Checks on Demand
337
FunctionPass *createABCDPass();
339
} // End llvm namespace