@@ -124,6 +124,46 @@ public enum FunctionPass {
124
124
case basicAliasAnalysis
125
125
/// Runs the LLVM IR Verifier to sanity check the results of passes.
126
126
case verifier
127
+ /// A pass to inline and remove functions marked as "always_inline".
128
+ case alwaysInliner
129
+ /// This pass promotes "by reference" arguments to be passed by value if the
130
+ /// number of elements passed is less than or equal to 3.
131
+ case argumentPromotion
132
+ /// This function returns a new pass that merges duplicate global constants
133
+ /// together into a single constant that is shared. This is useful because
134
+ /// some passes (ie TraceValues) insert a lot of string constants into the
135
+ /// program, regardless of whether or not they duplicate an existing string.
136
+ case constantMerge
137
+ /// This pass removes arguments from functions which are not used by the body
138
+ /// of the function.
139
+ case deadArgElimination
140
+ /// This pass walks SCCs of the call graph in RPO to deduce and propagate
141
+ /// function attributes. Currently it only handles synthesizing `norecurse`
142
+ /// attributes.
143
+ case functionAttrs
144
+ /// Uses a heuristic to inline direct function calls to small functions.
145
+ case functionInlining
146
+ /// This transform is designed to eliminate unreachable internal globals
147
+ /// (functions or global variables)
148
+ case globalDCE
149
+ /// This function returns a new pass that optimizes non-address taken internal
150
+ /// globals.
151
+ case globalOptimizer
152
+ /// This pass propagates constants from call sites into the bodies of
153
+ /// functions.
154
+ case ipConstantPropagation
155
+ /// This pass propagates constants from call sites into the bodies of
156
+ /// functions, and keeps track of whether basic blocks are executable in the
157
+ /// process.
158
+ case ipscc
159
+ /// Return a new pass object which transforms invoke instructions into calls,
160
+ /// if the callee can *not* unwind the stack.
161
+ case pruneEH
162
+ /// This pass removes any function declarations (prototypes) that are not used.
163
+ case stripDeadPrototypes
164
+ /// These functions removes symbols from functions and modules without
165
+ /// touching symbols for debugging information.
166
+ case stripSymbols
127
167
}
128
168
129
169
/// A `FunctionPassManager` is an object that collects a sequence of passes
@@ -170,6 +210,22 @@ public class FunctionPassManager {
170
210
. typeBasedAliasAnalysis: LLVMAddTypeBasedAliasAnalysisPass,
171
211
. scopedNoAliasAA: LLVMAddScopedNoAliasAAPass,
172
212
. basicAliasAnalysis: LLVMAddBasicAliasAnalysisPass,
213
+ . alwaysInliner: LLVMAddAlwaysInlinerPass,
214
+ . argumentPromotion: LLVMAddArgumentPromotionPass,
215
+ . constantMerge: LLVMAddConstantMergePass,
216
+ . deadArgElimination: LLVMAddDeadArgEliminationPass,
217
+ . functionAttrs: LLVMAddFunctionAttrsPass,
218
+ . functionInlining: LLVMAddFunctionInliningPass,
219
+ . globalDCE: LLVMAddGlobalDCEPass,
220
+ . globalOptimizer: LLVMAddGlobalOptimizerPass,
221
+ . ipConstantPropagation: LLVMAddIPConstantPropagationPass,
222
+ . ipscc: LLVMAddIPSCCPPass,
223
+ . pruneEH: LLVMAddPruneEHPass,
224
+ . stripDeadPrototypes: LLVMAddStripDeadPrototypesPass,
225
+ . stripSymbols: LLVMAddStripSymbolsPass,
226
+
227
+ // .internalize: LLVMAddInternalizePass,
228
+ // .sroaWithThreshhold: LLVMAddScalarReplAggregatesPassWithThreshold,
173
229
]
174
230
175
231
/// Creates a `FunctionPassManager` bound to the given module's IR.
0 commit comments