Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- llvm/Transforms/Utils.h - Utility Transformations --------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This header file defines prototypes for accessor functions that expose passes
10
// in the Utils transformations library.
11
//
12
//===----------------------------------------------------------------------===//
13
 
14
#ifndef LLVM_TRANSFORMS_UTILS_H
15
#define LLVM_TRANSFORMS_UTILS_H
16
 
17
namespace llvm {
18
 
19
class ModulePass;
20
class FunctionPass;
21
class Pass;
22
 
23
//===----------------------------------------------------------------------===//
24
// createMetaRenamerPass - Rename everything with metasyntatic names.
25
//
26
ModulePass *createMetaRenamerPass();
27
 
28
//===----------------------------------------------------------------------===//
29
//
30
// LowerInvoke - This pass removes invoke instructions, converting them to call
31
// instructions.
32
//
33
FunctionPass *createLowerInvokePass();
34
extern char &LowerInvokePassID;
35
 
36
//===----------------------------------------------------------------------===//
37
//
38
// InstructionNamer - Give any unnamed non-void instructions "tmp" names.
39
//
40
FunctionPass *createInstructionNamerPass();
41
extern char &InstructionNamerID;
42
 
43
//===----------------------------------------------------------------------===//
44
//
45
// LowerSwitch - This pass converts SwitchInst instructions into a sequence of
46
// chained binary branch instructions.
47
//
48
FunctionPass *createLowerSwitchPass();
49
extern char &LowerSwitchID;
50
 
51
//===----------------------------------------------------------------------===//
52
//
53
// BreakCriticalEdges - Break all of the critical edges in the CFG by inserting
54
// a dummy basic block. This pass may be "required" by passes that cannot deal
55
// with critical edges. For this usage, a pass must call:
56
//
57
//   AU.addRequiredID(BreakCriticalEdgesID);
58
//
59
// This pass obviously invalidates the CFG, but can update forward dominator
60
// (set, immediate dominators, tree, and frontier) information.
61
//
62
FunctionPass *createBreakCriticalEdgesPass();
63
extern char &BreakCriticalEdgesID;
64
 
65
//===----------------------------------------------------------------------===//
66
//
67
// LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop
68
// optimizations.
69
//
70
Pass *createLCSSAPass();
71
extern char &LCSSAID;
72
 
73
//===----------------------------------------------------------------------===//
74
//
75
// AddDiscriminators - Add DWARF path discriminators to the IR.
76
FunctionPass *createAddDiscriminatorsPass();
77
 
78
//===----------------------------------------------------------------------===//
79
//
80
// PromoteMemoryToRegister - This pass is used to promote memory references to
81
// be register references. A simple example of the transformation performed by
82
// this pass is:
83
//
84
//        FROM CODE                           TO CODE
85
//   %X = alloca i32, i32 1                 ret i32 42
86
//   store i32 42, i32 *%X
87
//   %Y = load i32* %X
88
//   ret i32 %Y
89
//
90
FunctionPass *createPromoteMemoryToRegisterPass();
91
 
92
//===----------------------------------------------------------------------===//
93
//
94
// LoopSimplify - Insert Pre-header blocks into the CFG for every function in
95
// the module.  This pass updates dominator information, loop information, and
96
// does not add critical edges to the CFG.
97
//
98
//   AU.addRequiredID(LoopSimplifyID);
99
//
100
Pass *createLoopSimplifyPass();
101
extern char &LoopSimplifyID;
102
 
103
/// This function returns a new pass that downgrades the debug info in the
104
/// module to line tables only.
105
ModulePass *createStripNonLineTableDebugLegacyPass();
106
 
107
//===----------------------------------------------------------------------===//
108
//
109
// InjectTLIMappingsLegacy - populates the VFABI attribute with the
110
// scalar-to-vector mappings from the TargetLibraryInfo.
111
//
112
FunctionPass *createInjectTLIMappingsLegacyPass();
113
 
114
//===----------------------------------------------------------------------===//
115
//
116
// UnifyLoopExits - For each loop, creates a new block N such that all exiting
117
// blocks branch to N, and then N distributes control flow to all the original
118
// exit blocks.
119
//
120
FunctionPass *createUnifyLoopExitsPass();
121
 
122
//===----------------------------------------------------------------------===//
123
//
124
// FixIrreducible - Convert each SCC with irreducible control-flow
125
// into a natural loop.
126
//
127
FunctionPass *createFixIrreduciblePass();
128
 
129
//===----------------------------------------------------------------------===//
130
//
131
// AssumeSimplify - remove redundant assumes and merge assumes in the same
132
// BasicBlock when possible.
133
//
134
FunctionPass *createAssumeSimplifyPass();
135
 
136
//===----------------------------------------------------------------------===//
137
//
138
// CanonicalizeFreezeInLoops - Canonicalize freeze instructions in loops so they
139
// don't block SCEV.
140
//
141
Pass *createCanonicalizeFreezeInLoopsPass();
142
 
143
//===----------------------------------------------------------------------===//
144
// LowerGlobalDtorsLegacy - Lower @llvm.global_dtors by creating wrapper
145
// functions that are registered in @llvm.global_ctors and which contain a call
146
// to `__cxa_atexit` to register their destructor functions.
147
ModulePass *createLowerGlobalDtorsLegacyPass();
148
} // namespace llvm
149
 
150
#endif