blob: 84c7bd4a2cfb1f621462bd5ef0e90e3080c00b9f [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===-- 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
18#include <functional>
19
20namespace llvm {
21
22class BasicBlockPass;
23class Function;
24class FunctionPass;
25class ModulePass;
26class Pass;
27class GetElementPtrInst;
28class PassInfo;
29class TerminatorInst;
30class TargetLowering;
31class TargetMachine;
32
33//===----------------------------------------------------------------------===//
34//
35// ConstantPropagation - A worklist driven constant propagation pass
36//
37FunctionPass *createConstantPropagationPass();
38
39//===----------------------------------------------------------------------===//
40//
41// AlignmentFromAssumptions - Use assume intrinsics to set load/store
42// alignments.
43//
44FunctionPass *createAlignmentFromAssumptionsPass();
45
46//===----------------------------------------------------------------------===//
47//
48// SCCP - Sparse conditional constant propagation.
49//
50FunctionPass *createSCCPPass();
51
52//===----------------------------------------------------------------------===//
53//
54// DeadInstElimination - This pass quickly removes trivially dead instructions
55// without modifying the CFG of the function. It is a BasicBlockPass, so it
56// runs efficiently when queued next to other BasicBlockPass's.
57//
58Pass *createDeadInstEliminationPass();
59
60//===----------------------------------------------------------------------===//
61//
62// DeadCodeElimination - This pass is more powerful than DeadInstElimination,
63// because it is worklist driven that can potentially revisit instructions when
64// their other instructions become dead, to eliminate chains of dead
65// computations.
66//
67FunctionPass *createDeadCodeEliminationPass();
68
69//===----------------------------------------------------------------------===//
70//
71// DeadStoreElimination - This pass deletes stores that are post-dominated by
72// must-aliased stores and are not loaded used between the stores.
73//
74FunctionPass *createDeadStoreEliminationPass();
75
76
77//===----------------------------------------------------------------------===//
78//
79// CallSiteSplitting - This pass split call-site based on its known argument
80// values.
81FunctionPass *createCallSiteSplittingPass();
82
83
84//===----------------------------------------------------------------------===//
85//
86// AggressiveDCE - This pass uses the SSA based Aggressive DCE algorithm. This
87// algorithm assumes instructions are dead until proven otherwise, which makes
88// it more successful are removing non-obviously dead instructions.
89//
90FunctionPass *createAggressiveDCEPass();
91
92
93//===----------------------------------------------------------------------===//
94//
95// GuardWidening - An optimization over the @llvm.experimental.guard intrinsic
96// that (optimistically) combines multiple guards into one to have fewer checks
97// at runtime.
98//
99FunctionPass *createGuardWideningPass();
100
101
102//===----------------------------------------------------------------------===//
103//
104// BitTrackingDCE - This pass uses a bit-tracking DCE algorithm in order to
105// remove computations of dead bits.
106//
107FunctionPass *createBitTrackingDCEPass();
108
109//===----------------------------------------------------------------------===//
110//
111// SROA - Replace aggregates or pieces of aggregates with scalar SSA values.
112//
113FunctionPass *createSROAPass();
114
115//===----------------------------------------------------------------------===//
116//
117// InductiveRangeCheckElimination - Transform loops to elide range checks on
118// linear functions of the induction variable.
119//
120Pass *createInductiveRangeCheckEliminationPass();
121
122//===----------------------------------------------------------------------===//
123//
124// InductionVariableSimplify - Transform induction variables in a program to all
125// use a single canonical induction variable per loop.
126//
127Pass *createIndVarSimplifyPass();
128
129//===----------------------------------------------------------------------===//
130//
131// InstructionCombining - Combine instructions to form fewer, simple
132// instructions. This pass does not modify the CFG, and has a tendency to make
133// instructions dead, so a subsequent DCE pass is useful.
134//
135// This pass combines things like:
136// %Y = add int 1, %X
137// %Z = add int 1, %Y
138// into:
139// %Z = add int 2, %X
140//
141FunctionPass *createInstructionCombiningPass(bool ExpensiveCombines = true);
142
143//===----------------------------------------------------------------------===//
144//
145// AggressiveInstCombiner - Combine expression patterns to form expressions with
146// fewer, simple instructions. This pass does not modify the CFG.
147//
148FunctionPass *createAggressiveInstCombinerPass();
149
150//===----------------------------------------------------------------------===//
151//
152// LICM - This pass is a loop invariant code motion and memory promotion pass.
153//
154Pass *createLICMPass();
155
156//===----------------------------------------------------------------------===//
157//
158// LoopSink - This pass sinks invariants from preheader to loop body where
159// frequency is lower than loop preheader.
160//
161Pass *createLoopSinkPass();
162
163//===----------------------------------------------------------------------===//
164//
165// LoopPredication - This pass does loop predication on guards.
166//
167Pass *createLoopPredicationPass();
168
169//===----------------------------------------------------------------------===//
170//
171// LoopInterchange - This pass interchanges loops to provide a more
172// cache-friendly memory access patterns.
173//
174Pass *createLoopInterchangePass();
175
176//===----------------------------------------------------------------------===//
177//
178// LoopStrengthReduce - This pass is strength reduces GEP instructions that use
179// a loop's canonical induction variable as one of their indices.
180//
181Pass *createLoopStrengthReducePass();
182
183//===----------------------------------------------------------------------===//
184//
185// LoopUnswitch - This pass is a simple loop unswitching pass.
186//
187Pass *createLoopUnswitchPass(bool OptimizeForSize = false,
188 bool hasBranchDivergence = false);
189
190//===----------------------------------------------------------------------===//
191//
192// LoopUnroll - This pass is a simple loop unrolling pass.
193//
194Pass *createLoopUnrollPass(int OptLevel = 2, int Threshold = -1, int Count = -1,
195 int AllowPartial = -1, int Runtime = -1,
196 int UpperBound = -1, int AllowPeeling = -1);
197// Create an unrolling pass for full unrolling that uses exact trip count only.
198Pass *createSimpleLoopUnrollPass(int OptLevel = 2);
199
200//===----------------------------------------------------------------------===//
201//
202// LoopReroll - This pass is a simple loop rerolling pass.
203//
204Pass *createLoopRerollPass();
205
206//===----------------------------------------------------------------------===//
207//
208// LoopRotate - This pass is a simple loop rotating pass.
209//
210Pass *createLoopRotatePass(int MaxHeaderSize = -1);
211
212//===----------------------------------------------------------------------===//
213//
214// LoopIdiom - This pass recognizes and replaces idioms in loops.
215//
216Pass *createLoopIdiomPass();
217
218//===----------------------------------------------------------------------===//
219//
220// LoopVersioningLICM - This pass is a loop versioning pass for LICM.
221//
222Pass *createLoopVersioningLICMPass();
223
224//===----------------------------------------------------------------------===//
225//
226// DemoteRegisterToMemoryPass - This pass is used to demote registers to memory
227// references. In basically undoes the PromoteMemoryToRegister pass to make cfg
228// hacking easier.
229//
230FunctionPass *createDemoteRegisterToMemoryPass();
231extern char &DemoteRegisterToMemoryID;
232
233//===----------------------------------------------------------------------===//
234//
235// Reassociate - This pass reassociates commutative expressions in an order that
236// is designed to promote better constant propagation, GCSE, LICM, PRE...
237//
238// For example: 4 + (x + 5) -> x + (4 + 5)
239//
240FunctionPass *createReassociatePass();
241
242//===----------------------------------------------------------------------===//
243//
244// JumpThreading - Thread control through mult-pred/multi-succ blocks where some
245// preds always go to some succ. Thresholds other than minus one override the
246// internal BB duplication default threshold.
247//
248FunctionPass *createJumpThreadingPass(int Threshold = -1);
249
250//===----------------------------------------------------------------------===//
251//
252// CFGSimplification - Merge basic blocks, eliminate unreachable blocks,
253// simplify terminator instructions, convert switches to lookup tables, etc.
254//
255FunctionPass *createCFGSimplificationPass(
256 unsigned Threshold = 1, bool ForwardSwitchCond = false,
257 bool ConvertSwitch = false, bool KeepLoops = true, bool SinkCommon = false,
258 std::function<bool(const Function &)> Ftor = nullptr);
259
260//===----------------------------------------------------------------------===//
261//
262// FlattenCFG - flatten CFG, reduce number of conditional branches by using
263// parallel-and and parallel-or mode, etc...
264//
265FunctionPass *createFlattenCFGPass();
266
267//===----------------------------------------------------------------------===//
268//
269// CFG Structurization - Remove irreducible control flow
270//
271///
272/// When \p SkipUniformRegions is true the structizer will not structurize
273/// regions that only contain uniform branches.
274Pass *createStructurizeCFGPass(bool SkipUniformRegions = false);
275
276//===----------------------------------------------------------------------===//
277//
278// TailCallElimination - This pass eliminates call instructions to the current
279// function which occur immediately before return instructions.
280//
281FunctionPass *createTailCallEliminationPass();
282
283//===----------------------------------------------------------------------===//
284//
285// EarlyCSE - This pass performs a simple and fast CSE pass over the dominator
286// tree.
287//
288FunctionPass *createEarlyCSEPass(bool UseMemorySSA = false);
289
290//===----------------------------------------------------------------------===//
291//
292// GVNHoist - This pass performs a simple and fast GVN pass over the dominator
293// tree to hoist common expressions from sibling branches.
294//
295FunctionPass *createGVNHoistPass();
296
297//===----------------------------------------------------------------------===//
298//
299// GVNSink - This pass uses an "inverted" value numbering to decide the
300// similarity of expressions and sinks similar expressions into successors.
301//
302FunctionPass *createGVNSinkPass();
303
304//===----------------------------------------------------------------------===//
305//
306// MergedLoadStoreMotion - This pass merges loads and stores in diamonds. Loads
307// are hoisted into the header, while stores sink into the footer.
308//
309FunctionPass *createMergedLoadStoreMotionPass();
310
311//===----------------------------------------------------------------------===//
312//
313// GVN - This pass performs global value numbering and redundant load
314// elimination cotemporaneously.
315//
316FunctionPass *createNewGVNPass();
317
318//===----------------------------------------------------------------------===//
319//
320// DivRemPairs - Hoist/decompose integer division and remainder instructions.
321//
322FunctionPass *createDivRemPairsPass();
323
324//===----------------------------------------------------------------------===//
325//
326// MemCpyOpt - This pass performs optimizations related to eliminating memcpy
327// calls and/or combining multiple stores into memset's.
328//
329FunctionPass *createMemCpyOptPass();
330
331//===----------------------------------------------------------------------===//
332//
333// LoopDeletion - This pass performs DCE of non-infinite loops that it
334// can prove are dead.
335//
336Pass *createLoopDeletionPass();
337
338//===----------------------------------------------------------------------===//
339//
340// ConstantHoisting - This pass prepares a function for expensive constants.
341//
342FunctionPass *createConstantHoistingPass();
343
344//===----------------------------------------------------------------------===//
345//
346// Sink - Code Sinking
347//
348FunctionPass *createSinkingPass();
349
350//===----------------------------------------------------------------------===//
351//
352// LowerAtomic - Lower atomic intrinsics to non-atomic form
353//
354Pass *createLowerAtomicPass();
355
356//===----------------------------------------------------------------------===//
357//
358// LowerGuardIntrinsic - Lower guard intrinsics to normal control flow.
359//
360Pass *createLowerGuardIntrinsicPass();
361
362//===----------------------------------------------------------------------===//
363//
364// MergeICmps - Merge integer comparison chains into a memcmp
365//
366Pass *createMergeICmpsPass();
367
368//===----------------------------------------------------------------------===//
369//
370// ValuePropagation - Propagate CFG-derived value information
371//
372Pass *createCorrelatedValuePropagationPass();
373
374//===----------------------------------------------------------------------===//
375//
376// InferAddressSpaces - Modify users of addrspacecast instructions with values
377// in the source address space if using the destination address space is slower
378// on the target.
379//
380FunctionPass *createInferAddressSpacesPass();
381extern char &InferAddressSpacesID;
382
383//===----------------------------------------------------------------------===//
384//
385// LowerExpectIntrinsics - Removes llvm.expect intrinsics and creates
386// "block_weights" metadata.
387FunctionPass *createLowerExpectIntrinsicPass();
388
389//===----------------------------------------------------------------------===//
390//
391// PartiallyInlineLibCalls - Tries to inline the fast path of library
392// calls such as sqrt.
393//
394FunctionPass *createPartiallyInlineLibCallsPass();
395
396//===----------------------------------------------------------------------===//
397//
398// ScalarizerPass - Converts vector operations into scalar operations
399//
400FunctionPass *createScalarizerPass();
401
402//===----------------------------------------------------------------------===//
403//
404// SeparateConstOffsetFromGEP - Split GEPs for better CSE
405//
406FunctionPass *createSeparateConstOffsetFromGEPPass(bool LowerGEP = false);
407
408//===----------------------------------------------------------------------===//
409//
410// SpeculativeExecution - Aggressively hoist instructions to enable
411// speculative execution on targets where branches are expensive.
412//
413FunctionPass *createSpeculativeExecutionPass();
414
415// Same as createSpeculativeExecutionPass, but does nothing unless
416// TargetTransformInfo::hasBranchDivergence() is true.
417FunctionPass *createSpeculativeExecutionIfHasBranchDivergencePass();
418
419//===----------------------------------------------------------------------===//
420//
421// StraightLineStrengthReduce - This pass strength-reduces some certain
422// instruction patterns in straight-line code.
423//
424FunctionPass *createStraightLineStrengthReducePass();
425
426//===----------------------------------------------------------------------===//
427//
428// PlaceSafepoints - Rewrite any IR calls to gc.statepoints and insert any
429// safepoint polls (method entry, backedge) that might be required. This pass
430// does not generate explicit relocation sequences - that's handled by
431// RewriteStatepointsForGC which can be run at an arbitrary point in the pass
432// order following this pass.
433//
434FunctionPass *createPlaceSafepointsPass();
435
436//===----------------------------------------------------------------------===//
437//
438// RewriteStatepointsForGC - Rewrite any gc.statepoints which do not yet have
439// explicit relocations to include explicit relocations.
440//
441ModulePass *createRewriteStatepointsForGCLegacyPass();
442
443//===----------------------------------------------------------------------===//
444//
445// Float2Int - Demote floats to ints where possible.
446//
447FunctionPass *createFloat2IntPass();
448
449//===----------------------------------------------------------------------===//
450//
451// NaryReassociate - Simplify n-ary operations by reassociation.
452//
453FunctionPass *createNaryReassociatePass();
454
455//===----------------------------------------------------------------------===//
456//
457// LoopDistribute - Distribute loops.
458//
459FunctionPass *createLoopDistributePass();
460
461//===----------------------------------------------------------------------===//
462//
463// LoopLoadElimination - Perform loop-aware load elimination.
464//
465FunctionPass *createLoopLoadEliminationPass();
466
467//===----------------------------------------------------------------------===//
468//
469// LoopVersioning - Perform loop multi-versioning.
470//
471FunctionPass *createLoopVersioningPass();
472
473//===----------------------------------------------------------------------===//
474//
475// LoopDataPrefetch - Perform data prefetching in loops.
476//
477FunctionPass *createLoopDataPrefetchPass();
478
479///===---------------------------------------------------------------------===//
480ModulePass *createNameAnonGlobalPass();
481
482//===----------------------------------------------------------------------===//
483//
484// LibCallsShrinkWrap - Shrink-wraps a call to function if the result is not
485// used.
486//
487FunctionPass *createLibCallsShrinkWrapPass();
488
489//===----------------------------------------------------------------------===//
490//
491// LoopSimplifyCFG - This pass performs basic CFG simplification on loops,
492// primarily to help other loop passes.
493//
494Pass *createLoopSimplifyCFGPass();
495} // End llvm namespace
496
497#endif