Line data Source code
1 : /* This file is auto-generated by gen-pass-instances.awk
2 : from passes.def. */
3 : /* Description of pass structure
4 : Copyright (C) 1987-2026 Free Software Foundation, Inc.
5 :
6 : This file is part of GCC.
7 :
8 : GCC is free software; you can redistribute it and/or modify it under
9 : the terms of the GNU General Public License as published by the Free
10 : Software Foundation; either version 3, or (at your option) any later
11 : version.
12 :
13 : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 : for more details.
17 :
18 : You should have received a copy of the GNU General Public License
19 : along with GCC; see the file COPYING3. If not see
20 : <http://www.gnu.org/licenses/>. */
21 :
22 : /* Note that this file is processed by a simple parser:
23 : 'gen-pass-instances.awk', so carefully verify the generated
24 : 'pass-instances.def' if you deviate from the syntax otherwise used in
25 : here. */
26 :
27 :
28 : /* All passes needed to lower the function into shape optimizers can
29 : operate on. These passes are always run first on the function, but
30 : backend might produce already lowered functions that are not processed
31 : by these passes. */
32 288775 : INSERT_PASSES_AFTER (all_lowering_passes)
33 288775 : NEXT_PASS (pass_warn_unused_result, 1);
34 288775 : NEXT_PASS (pass_diagnose_omp_blocks, 1);
35 288775 : NEXT_PASS (pass_diagnose_tm_blocks, 1);
36 288775 : NEXT_PASS (pass_omp_oacc_kernels_decompose, 1);
37 288775 : NEXT_PASS (pass_lower_omp, 1);
38 288775 : NEXT_PASS (pass_lower_cf, 1);
39 288775 : NEXT_PASS (pass_lower_tm, 1);
40 288775 : NEXT_PASS (pass_refactor_eh, 1);
41 288775 : NEXT_PASS (pass_lower_eh, 1);
42 288775 : NEXT_PASS (pass_coroutine_lower_builtins, 1);
43 288775 : NEXT_PASS (pass_build_cfg, 1);
44 288775 : NEXT_PASS (pass_warn_function_return, 1);
45 288775 : NEXT_PASS (pass_coroutine_early_expand_ifns, 1);
46 288775 : NEXT_PASS (pass_expand_omp, 1);
47 288775 : NEXT_PASS (pass_build_cgraph_edges, 1);
48 288775 : TERMINATE_PASS_LIST (all_lowering_passes)
49 :
50 : /* Interprocedural optimization passes. */
51 288775 : INSERT_PASSES_AFTER (all_small_ipa_passes)
52 : /* auto_profile_offline uses dwarf_name hook that only
53 : works before free_lang_data. */
54 288775 : NEXT_PASS (pass_ipa_auto_profile_offline, 1);
55 288775 : NEXT_PASS (pass_ipa_free_lang_data, 1);
56 288775 : NEXT_PASS (pass_ipa_function_and_variable_visibility, 1);
57 288775 : NEXT_PASS (pass_ipa_strub_mode, 1);
58 288775 : NEXT_PASS (pass_build_ssa_passes, 1);
59 288775 : PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes, 1)
60 288775 : NEXT_PASS (pass_fixup_cfg, 1);
61 288775 : NEXT_PASS (pass_build_ssa, 1);
62 288775 : NEXT_PASS_WITH_ARG (pass_walloca, 1, /*strict_mode_p=*/true);
63 288775 : NEXT_PASS (pass_warn_printf, 1);
64 288775 : NEXT_PASS (pass_warn_nonnull_compare, 1);
65 288775 : NEXT_PASS (pass_early_warn_uninitialized, 1);
66 866325 : NEXT_PASS_WITH_ARGS (pass_warn_access, 1, /*early=*/true, /*check_dangling=*/true);
67 288775 : NEXT_PASS (pass_ubsan, 1);
68 288775 : NEXT_PASS (pass_nothrow, 1);
69 288775 : NEXT_PASS (pass_rebuild_cgraph_edges, 1);
70 : POP_INSERT_PASSES ()
71 288775 : NEXT_PASS_WITH_ARG (pass_target_clone, 1, true);
72 :
73 288775 : NEXT_PASS (pass_local_optimization_passes, 1);
74 288775 : PUSH_INSERT_PASSES_WITHIN (pass_local_optimization_passes, 1)
75 288775 : NEXT_PASS (pass_fixup_cfg, 2);
76 288775 : NEXT_PASS (pass_rebuild_cgraph_edges, 2);
77 288775 : NEXT_PASS (pass_local_fn_summary, 1);
78 288775 : NEXT_PASS (pass_early_inline, 1);
79 288775 : NEXT_PASS (pass_warn_recursion, 1);
80 288775 : NEXT_PASS (pass_all_early_optimizations, 1);
81 288775 : PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations, 1)
82 288775 : NEXT_PASS (pass_remove_cgraph_callee_edges, 1);
83 288775 : NEXT_PASS (pass_early_object_sizes, 1);
84 : /* Don't record nonzero bits before IPA to avoid
85 : using too much memory. */
86 288775 : NEXT_PASS_WITH_ARG (pass_ccp, 1, false /* nonzero_p */);
87 : /* After CCP we rewrite no longer addressed locals into SSA
88 : form if possible. */
89 288775 : NEXT_PASS_WITH_ARG (pass_forwprop, 1, /*full_walk=*/true);
90 288775 : NEXT_PASS_WITH_ARG (pass_early_thread_jumps, 1, /*first=*/true);
91 288775 : NEXT_PASS (pass_sra_early, 1);
92 : /* pass_build_ealias is a dummy pass that ensures that we
93 : execute TODO_rebuild_alias at this point. */
94 288775 : NEXT_PASS (pass_build_ealias, 1);
95 : /* Do phiprop before FRE so we optimize std::min and std::max well. */
96 288775 : NEXT_PASS (pass_phiprop, 1);
97 288775 : NEXT_PASS_WITH_ARG (pass_fre, 1, true /* may_iterate */);
98 288775 : NEXT_PASS (pass_early_vrp, 1);
99 288775 : NEXT_PASS (pass_merge_phi, 1);
100 288775 : NEXT_PASS (pass_dse, 1);
101 866325 : NEXT_PASS_WITH_ARGS (pass_cd_dce, 1, false /* update_address_taken_p */, true /* remove_unused_locals */);
102 288775 : NEXT_PASS_WITH_ARG (pass_phiopt, 1, true /* early_p */);
103 : /* Cleanup eh is done before tail recusision to remove empty (only clobbers)
104 : finally blocks which would block tail recursion. */
105 288775 : NEXT_PASS (pass_cleanup_eh, 1);
106 288775 : NEXT_PASS (pass_tail_recursion, 1);
107 288775 : NEXT_PASS (pass_if_to_switch, 1);
108 288775 : NEXT_PASS (pass_convert_switch, 1);
109 288775 : NEXT_PASS (pass_sccopy, 1);
110 288775 : NEXT_PASS (pass_profile, 1);
111 288775 : NEXT_PASS (pass_local_pure_const, 1);
112 288775 : NEXT_PASS (pass_modref, 1);
113 : /* Split functions creates parts that are not run through
114 : early optimizations again. It is thus good idea to do this
115 : late. */
116 288775 : NEXT_PASS (pass_split_functions, 1);
117 288775 : NEXT_PASS_WITH_ARG (pass_strip_predict_hints, 1, true /* early_p */);
118 : POP_INSERT_PASSES ()
119 288775 : NEXT_PASS (pass_release_ssa_names, 1);
120 288775 : NEXT_PASS (pass_rebuild_cgraph_edges, 3);
121 288775 : NEXT_PASS (pass_local_fn_summary, 2);
122 : POP_INSERT_PASSES ()
123 :
124 288775 : NEXT_PASS (pass_ipa_remove_symbols, 1);
125 288775 : NEXT_PASS (pass_ipa_strub, 1);
126 288775 : NEXT_PASS (pass_ipa_oacc, 1);
127 288775 : PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc, 1)
128 288775 : NEXT_PASS (pass_ipa_pta, 1);
129 : /* Pass group that runs when the function is an offloaded function
130 : containing oacc kernels loops. */
131 288775 : NEXT_PASS (pass_ipa_oacc_kernels, 1);
132 288775 : PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc_kernels, 1)
133 288775 : NEXT_PASS (pass_oacc_kernels, 1);
134 288775 : PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels, 1)
135 288775 : NEXT_PASS (pass_ch, 1);
136 288775 : NEXT_PASS_WITH_ARG (pass_fre, 2, true /* may_iterate */);
137 : /* We use pass_lim to rewrite in-memory iteration and reduction
138 : variable accesses in loops into local variables accesses. */
139 288775 : NEXT_PASS (pass_lim, 1);
140 288775 : NEXT_PASS_WITH_ARG (pass_dominator, 1, false /* may_peel_loop_headers_p */);
141 288775 : NEXT_PASS (pass_dce, 1);
142 288775 : NEXT_PASS_WITH_ARG (pass_parallelize_loops, 1, true /* oacc_kernels_p */);
143 288775 : NEXT_PASS (pass_expand_omp_ssa, 1);
144 288775 : NEXT_PASS (pass_rebuild_cgraph_edges, 4);
145 : POP_INSERT_PASSES ()
146 : POP_INSERT_PASSES ()
147 : POP_INSERT_PASSES ()
148 :
149 288775 : NEXT_PASS_WITH_ARG (pass_target_clone, 2, false);
150 288775 : NEXT_PASS (pass_ipa_auto_profile, 1);
151 288775 : PUSH_INSERT_PASSES_WITHIN (pass_ipa_auto_profile, 1)
152 288775 : NEXT_PASS (pass_feedback_split_functions, 1);
153 : POP_INSERT_PASSES ()
154 288775 : NEXT_PASS (pass_ipa_tree_profile, 1);
155 288775 : PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile, 1)
156 288775 : NEXT_PASS (pass_feedback_split_functions, 2);
157 : POP_INSERT_PASSES ()
158 288775 : NEXT_PASS_WITH_ARG (pass_ipa_free_fn_summary, 1, true /* small_p */);
159 288775 : NEXT_PASS (pass_ipa_increase_alignment, 1);
160 288775 : NEXT_PASS (pass_ipa_tm, 1);
161 288775 : NEXT_PASS (pass_ipa_lower_emutls, 1);
162 288775 : NEXT_PASS (pass_ipa_asm_lgen, 1);
163 288775 : TERMINATE_PASS_LIST (all_small_ipa_passes)
164 :
165 288775 : INSERT_PASSES_AFTER (all_regular_ipa_passes)
166 288775 : NEXT_PASS (pass_analyzer, 1);
167 288775 : NEXT_PASS (pass_ipa_asm_wpa, 1);
168 288775 : NEXT_PASS (pass_ipa_odr, 1);
169 288775 : NEXT_PASS (pass_ipa_whole_program_visibility, 1);
170 288775 : NEXT_PASS (pass_ipa_profile, 1);
171 288775 : NEXT_PASS (pass_ipa_icf, 1);
172 288775 : NEXT_PASS (pass_ipa_devirt, 1);
173 288775 : NEXT_PASS (pass_ipa_cdtor_merge, 1);
174 288775 : NEXT_PASS (pass_ipa_cp, 1);
175 288775 : NEXT_PASS (pass_ipa_sra, 1);
176 288775 : NEXT_PASS (pass_ipa_fn_summary, 1);
177 288775 : NEXT_PASS (pass_ipa_inline, 1);
178 288775 : NEXT_PASS (pass_ipa_locality_cloning, 1);
179 288775 : NEXT_PASS (pass_ipa_pure_const, 1);
180 288775 : NEXT_PASS (pass_ipa_modref, 1);
181 288775 : NEXT_PASS_WITH_ARG (pass_ipa_free_fn_summary, 2, false /* small_p */);
182 288775 : NEXT_PASS (pass_ipa_reference, 1);
183 : /* This pass needs to be scheduled after any IP code duplication. */
184 288775 : NEXT_PASS (pass_ipa_single_use, 1);
185 : /* Comdat privatization come last, as direct references to comdat local
186 : symbols are not allowed outside of the comdat group. Privatizing early
187 : would result in missed optimizations due to this restriction. */
188 288775 : NEXT_PASS (pass_ipa_comdats, 1);
189 288775 : TERMINATE_PASS_LIST (all_regular_ipa_passes)
190 :
191 : /* Simple IPA passes executed after the regular passes. In WHOPR mode the
192 : passes are executed after partitioning and thus see just parts of the
193 : compiled unit. */
194 288775 : INSERT_PASSES_AFTER (all_late_ipa_passes)
195 288775 : NEXT_PASS (pass_ipa_pta, 2);
196 288775 : NEXT_PASS (pass_omp_simd_clone, 1);
197 288775 : TERMINATE_PASS_LIST (all_late_ipa_passes)
198 :
199 : /* These passes are run after IPA passes on every function that is being
200 : output to the assembler file. */
201 288775 : INSERT_PASSES_AFTER (all_passes)
202 288775 : NEXT_PASS (pass_fixup_cfg, 3);
203 288775 : NEXT_PASS (pass_lower_eh_dispatch, 1);
204 288775 : NEXT_PASS (pass_oacc_loop_designation, 1);
205 288775 : NEXT_PASS (pass_omp_oacc_neuter_broadcast, 1);
206 288775 : NEXT_PASS (pass_oacc_device_lower, 1);
207 288775 : NEXT_PASS (pass_omp_device_lower, 1);
208 288775 : NEXT_PASS (pass_omp_target_link, 1);
209 288775 : NEXT_PASS (pass_adjust_alignment, 1);
210 288775 : NEXT_PASS (pass_harden_control_flow_redundancy, 1);
211 288775 : NEXT_PASS (pass_all_optimizations, 1);
212 288775 : PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations, 1)
213 288775 : NEXT_PASS (pass_remove_cgraph_callee_edges, 2);
214 : /* Initial scalar cleanups before alias computation.
215 : They ensure memory accesses are not indirect wherever possible. */
216 288775 : NEXT_PASS_WITH_ARG (pass_strip_predict_hints, 2, false /* early_p */);
217 288775 : NEXT_PASS_WITH_ARG (pass_ccp, 2, true /* nonzero_p */);
218 : /* After CCP we rewrite no longer addressed locals into SSA
219 : form if possible. */
220 288775 : NEXT_PASS (pass_object_sizes, 1);
221 288775 : NEXT_PASS (pass_post_ipa_warn, 1);
222 : /* Must run before loop unrolling. */
223 866325 : NEXT_PASS_WITH_ARGS (pass_warn_access, 2, /*early=*/false, /*check_dangling=*/true);
224 : /* Profile count may overflow as a result of inlinining very large
225 : loop nests. This pass should run before any late pass that makes
226 : use of profile. */
227 288775 : NEXT_PASS (pass_rebuild_frequencies, 1);
228 288775 : NEXT_PASS (pass_complete_unrolli, 1);
229 288775 : NEXT_PASS (pass_backprop, 1);
230 288775 : NEXT_PASS (pass_phiprop, 2);
231 288775 : NEXT_PASS_WITH_ARG (pass_forwprop, 2, /*full_walk=*/true);
232 : /* pass_build_alias is a dummy pass that ensures that we
233 : execute TODO_rebuild_alias at this point. */
234 288775 : NEXT_PASS (pass_build_alias, 1);
235 288775 : NEXT_PASS (pass_return_slot, 1);
236 288775 : NEXT_PASS_WITH_ARG (pass_fre, 3, true /* may_iterate */);
237 288775 : NEXT_PASS (pass_merge_phi, 2);
238 288775 : NEXT_PASS_WITH_ARG (pass_thread_jumps_full, 1, /*first=*/true);
239 288775 : NEXT_PASS_WITH_ARG (pass_vrp, 1, false /* final_p*/);
240 288775 : NEXT_PASS (pass_array_bounds, 1);
241 288775 : NEXT_PASS (pass_dse, 2);
242 866325 : NEXT_PASS_WITH_ARGS (pass_dce, 2, false /* update_address_taken_p */, true /* remove_unused_locals */);
243 288775 : NEXT_PASS (pass_stdarg, 1);
244 288775 : NEXT_PASS (pass_call_cdce, 1);
245 288775 : NEXT_PASS (pass_cselim, 1);
246 288775 : NEXT_PASS (pass_copy_prop, 1);
247 288775 : NEXT_PASS (pass_tree_ifcombine, 1);
248 288775 : NEXT_PASS (pass_merge_phi, 3);
249 288775 : NEXT_PASS_WITH_ARG (pass_phiopt, 2, false /* early_p */);
250 288775 : NEXT_PASS (pass_tail_recursion, 2);
251 288775 : NEXT_PASS (pass_ch, 2);
252 288775 : NEXT_PASS (pass_lower_complex, 1);
253 288775 : NEXT_PASS (pass_lower_bitint, 1);
254 288775 : NEXT_PASS (pass_sra, 1);
255 : /* The dom pass will also resolve all __builtin_constant_p calls
256 : that are still there to 0. This has to be done after some
257 : propagations have already run, but before some more dead code
258 : is removed, and this place fits nicely. Remember this when
259 : trying to move or duplicate pass_dominator somewhere earlier. */
260 288775 : NEXT_PASS_WITH_ARG (pass_thread_jumps, 1, /*first=*/true);
261 288775 : NEXT_PASS_WITH_ARG (pass_dominator, 2, true /* may_peel_loop_headers_p */);
262 : /* Threading can leave many const/copy propagations in the IL.
263 : Clean them up. Failure to do so well can lead to false
264 : positives from warnings for erroneous code. */
265 288775 : NEXT_PASS (pass_copy_prop, 2);
266 : /* Identify paths that should never be executed in a conforming
267 : program and isolate those paths. */
268 288775 : NEXT_PASS (pass_isolate_erroneous_paths, 1);
269 288775 : NEXT_PASS_WITH_ARG (pass_reassoc, 1, true /* early_p */);
270 288775 : NEXT_PASS (pass_dce, 3);
271 288775 : NEXT_PASS (pass_forwprop, 3);
272 288775 : NEXT_PASS_WITH_ARG (pass_phiopt, 3, false /* early_p */);
273 288775 : NEXT_PASS_WITH_ARG (pass_ccp, 3, true /* nonzero_p */);
274 : /* After CCP we rewrite no longer addressed locals into SSA
275 : form if possible. */
276 288775 : NEXT_PASS (pass_expand_pow, 1);
277 288775 : NEXT_PASS (pass_optimize_bswap, 1);
278 288775 : NEXT_PASS (pass_laddress, 1);
279 288775 : NEXT_PASS (pass_lim, 2);
280 288775 : NEXT_PASS_WITH_ARG (pass_walloca, 2, false);
281 288775 : NEXT_PASS (pass_pre, 1);
282 288775 : NEXT_PASS_WITH_ARG (pass_sink_code, 1, false /* unsplit edges */);
283 288775 : NEXT_PASS (pass_sancov, 1);
284 288775 : NEXT_PASS (pass_asan, 1);
285 288775 : NEXT_PASS (pass_tsan, 1);
286 288775 : NEXT_PASS_WITH_ARG (pass_dse, 3, true /* use DR analysis */);
287 866325 : NEXT_PASS_WITH_ARGS (pass_dce, 4, false /* update_address_taken_p */, false /* remove_unused_locals */);
288 : /* Pass group that runs when 1) enabled, 2) there are loops
289 : in the function. Make sure to run pass_fix_loops before
290 : to discover/remove loops before running the gate function
291 : of pass_tree_loop. */
292 288775 : NEXT_PASS (pass_fix_loops, 1);
293 288775 : NEXT_PASS (pass_tree_loop, 1);
294 288775 : PUSH_INSERT_PASSES_WITHIN (pass_tree_loop, 1)
295 : /* Before loop_init we rewrite no longer addressed locals into SSA
296 : form if possible. */
297 288775 : NEXT_PASS (pass_tree_loop_init, 1);
298 288775 : NEXT_PASS (pass_tree_unswitch, 1);
299 288775 : NEXT_PASS (pass_loop_split, 1);
300 288775 : NEXT_PASS (pass_scev_cprop, 1);
301 288775 : NEXT_PASS (pass_loop_versioning, 1);
302 288775 : NEXT_PASS (pass_loop_jam, 1);
303 : /* All unswitching, final value replacement and splitting can expose
304 : empty loops. Remove them now. */
305 288775 : NEXT_PASS_WITH_ARG (pass_cd_dce, 2, false /* update_address_taken_p */);
306 288775 : NEXT_PASS (pass_iv_canon, 1);
307 288775 : NEXT_PASS (pass_loop_distribution, 1);
308 288775 : NEXT_PASS (pass_crc_optimization, 1);
309 288775 : NEXT_PASS (pass_linterchange, 1);
310 288775 : NEXT_PASS (pass_copy_prop, 3);
311 288775 : NEXT_PASS (pass_graphite, 1);
312 288775 : PUSH_INSERT_PASSES_WITHIN (pass_graphite, 1)
313 288775 : NEXT_PASS (pass_graphite_transforms, 1);
314 288775 : NEXT_PASS (pass_lim, 3);
315 288775 : NEXT_PASS (pass_copy_prop, 4);
316 288775 : NEXT_PASS (pass_dce, 5);
317 : POP_INSERT_PASSES ()
318 288775 : NEXT_PASS_WITH_ARG (pass_parallelize_loops, 2, false /* oacc_kernels_p */);
319 288775 : NEXT_PASS (pass_expand_omp_ssa, 2);
320 288775 : NEXT_PASS (pass_ch_vect, 1);
321 288775 : NEXT_PASS (pass_if_conversion, 1);
322 : /* pass_vectorize must immediately follow pass_if_conversion.
323 : Please do not add any other passes in between. */
324 288775 : NEXT_PASS (pass_vectorize, 1);
325 288775 : PUSH_INSERT_PASSES_WITHIN (pass_vectorize, 1)
326 288775 : NEXT_PASS (pass_dce, 6);
327 : POP_INSERT_PASSES ()
328 288775 : NEXT_PASS (pass_predcom, 1);
329 288775 : NEXT_PASS (pass_complete_unroll, 1);
330 288775 : NEXT_PASS (pass_pre_slp_scalar_cleanup, 1);
331 288775 : PUSH_INSERT_PASSES_WITHIN (pass_pre_slp_scalar_cleanup, 1)
332 288775 : NEXT_PASS_WITH_ARG (pass_fre, 4, false /* may_iterate */);
333 288775 : NEXT_PASS (pass_dse, 4);
334 : POP_INSERT_PASSES ()
335 288775 : NEXT_PASS (pass_slp_vectorize, 1);
336 288775 : NEXT_PASS (pass_loop_prefetch, 1);
337 : /* Run IVOPTs after the last pass that uses data-reference analysis
338 : as that doesn't handle TARGET_MEM_REFs. */
339 288775 : NEXT_PASS (pass_iv_optimize, 1);
340 288775 : NEXT_PASS (pass_lim, 4);
341 288775 : NEXT_PASS (pass_tree_loop_done, 1);
342 : POP_INSERT_PASSES ()
343 : /* Pass group that runs when pass_tree_loop is disabled or there
344 : are no loops in the function. */
345 288775 : NEXT_PASS (pass_tree_no_loop, 1);
346 288775 : PUSH_INSERT_PASSES_WITHIN (pass_tree_no_loop, 1)
347 288775 : NEXT_PASS (pass_slp_vectorize, 2);
348 : POP_INSERT_PASSES ()
349 288775 : NEXT_PASS (pass_simduid_cleanup, 1);
350 288775 : NEXT_PASS (pass_lower_vector_ssa, 1);
351 288775 : NEXT_PASS (pass_lower_switch, 1);
352 288775 : NEXT_PASS (pass_cse_sincos, 1);
353 288775 : NEXT_PASS (pass_cse_reciprocals, 1);
354 288775 : NEXT_PASS_WITH_ARG (pass_reassoc, 2, false /* early_p */);
355 288775 : NEXT_PASS (pass_strength_reduction, 1);
356 288775 : NEXT_PASS (pass_split_paths, 1);
357 288775 : NEXT_PASS (pass_tracer, 1);
358 288775 : NEXT_PASS_WITH_ARG (pass_fre, 5, false /* may_iterate */);
359 : /* After late FRE we rewrite no longer addressed locals into SSA
360 : form if possible. */
361 288775 : NEXT_PASS_WITH_ARG (pass_thread_jumps, 2, /*first=*/false);
362 288775 : NEXT_PASS_WITH_ARG (pass_dominator, 3, false /* may_peel_loop_headers_p */);
363 288775 : NEXT_PASS (pass_strlen, 1);
364 288775 : NEXT_PASS_WITH_ARG (pass_thread_jumps_full, 2, /*first=*/false);
365 288775 : NEXT_PASS_WITH_ARG (pass_vrp, 2, true /* final_p */);
366 : /* Run CCP to compute alignment and nonzero bits. */
367 288775 : NEXT_PASS_WITH_ARG (pass_ccp, 4, true /* nonzero_p */);
368 288775 : NEXT_PASS (pass_warn_restrict, 1);
369 288775 : NEXT_PASS (pass_dse, 5);
370 866325 : NEXT_PASS_WITH_ARGS (pass_dce, 7, true /* update_address_taken_p */, true /* remove_unused_locals */);
371 : /* After late DCE we rewrite no longer addressed locals into SSA
372 : form if possible. */
373 866325 : NEXT_PASS_WITH_ARGS (pass_forwprop, 4, /*full_walk=*/false, /*last=*/true);
374 288775 : NEXT_PASS_WITH_ARG (pass_sink_code, 2, true /* unsplit edges */);
375 288775 : NEXT_PASS_WITH_ARG (pass_phiopt, 4, false /* early_p */);
376 288775 : NEXT_PASS (pass_optimize_widening_mul, 1);
377 288775 : NEXT_PASS (pass_store_merging, 1);
378 : /* If DCE is not run before checking for uninitialized uses,
379 : we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
380 : However, this also causes us to misdiagnose cases that should be
381 : real warnings (e.g., testsuite/gcc.dg/pr18501.c). */
382 288775 : NEXT_PASS_WITH_ARG (pass_cd_dce, 3, false /* update_address_taken_p */);
383 288775 : NEXT_PASS (pass_sccopy, 2);
384 288775 : NEXT_PASS (pass_tail_calls, 1);
385 : /* Split critical edges before late uninit warning to reduce the
386 : number of false positives from it. */
387 288775 : NEXT_PASS (pass_split_crit_edges, 1);
388 288775 : NEXT_PASS (pass_late_warn_uninitialized, 1);
389 288775 : NEXT_PASS (pass_local_pure_const, 2);
390 288775 : NEXT_PASS (pass_modref, 2);
391 : /* uncprop replaces constants by SSA names. This makes analysis harder
392 : and thus it should be run last. */
393 288775 : NEXT_PASS (pass_uncprop, 1);
394 : POP_INSERT_PASSES ()
395 288775 : NEXT_PASS (pass_all_optimizations_g, 1);
396 288775 : PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations_g, 1)
397 : /* The idea is that with -Og we do not perform any IPA optimization
398 : so post-IPA work should be restricted to semantically required
399 : passes and all optimization work is done early. */
400 288775 : NEXT_PASS (pass_remove_cgraph_callee_edges, 3);
401 288775 : NEXT_PASS_WITH_ARG (pass_strip_predict_hints, 3, false /* early_p */);
402 : /* Lower remaining pieces of GIMPLE. */
403 288775 : NEXT_PASS (pass_lower_complex, 2);
404 288775 : NEXT_PASS (pass_lower_bitint, 2);
405 288775 : NEXT_PASS (pass_lower_vector_ssa, 2);
406 288775 : NEXT_PASS (pass_lower_switch, 2);
407 : /* Perform simple scalar cleanup which is constant/copy propagation. */
408 288775 : NEXT_PASS_WITH_ARG (pass_ccp, 5, true /* nonzero_p */);
409 288775 : NEXT_PASS (pass_post_ipa_warn, 2);
410 288775 : NEXT_PASS (pass_object_sizes, 2);
411 288775 : NEXT_PASS (pass_strlen, 2);
412 : /* Fold remaining builtins. */
413 866325 : NEXT_PASS_WITH_ARGS (pass_forwprop, 5, /*full_walk=*/false, /*last=*/true);
414 288775 : NEXT_PASS (pass_dce, 8);
415 : /* Profile count may overflow as a result of inlinining very large
416 : loop nests. This pass should run before any late pass that makes
417 : use of profile. */
418 288775 : NEXT_PASS (pass_rebuild_frequencies, 2);
419 288775 : NEXT_PASS (pass_sancov, 2);
420 288775 : NEXT_PASS (pass_asan, 2);
421 288775 : NEXT_PASS (pass_tsan, 2);
422 : /* ??? We do want some kind of loop invariant motion, but we possibly
423 : need to adjust LIM to be more friendly towards preserving accurate
424 : debug information here. */
425 : /* Split critical edges before late uninit warning to reduce the
426 : number of false positives from it. */
427 288775 : NEXT_PASS (pass_split_crit_edges, 2);
428 288775 : NEXT_PASS (pass_late_warn_uninitialized, 2);
429 : /* uncprop replaces constants by SSA names. This makes analysis harder
430 : and thus it should be run last. */
431 288775 : NEXT_PASS (pass_uncprop, 2);
432 : POP_INSERT_PASSES ()
433 288775 : NEXT_PASS (pass_assumptions, 1);
434 288775 : NEXT_PASS (pass_tm_init, 1);
435 288775 : PUSH_INSERT_PASSES_WITHIN (pass_tm_init, 1)
436 288775 : NEXT_PASS (pass_tm_mark, 1);
437 288775 : NEXT_PASS (pass_tm_memopt, 1);
438 288775 : NEXT_PASS (pass_tm_edges, 1);
439 : POP_INSERT_PASSES ()
440 288775 : NEXT_PASS (pass_simduid_cleanup, 2);
441 288775 : NEXT_PASS (pass_vtable_verify, 1);
442 288775 : NEXT_PASS (pass_lower_vaarg, 1);
443 288775 : NEXT_PASS (pass_lower_vector, 1);
444 288775 : NEXT_PASS (pass_lower_complex_O0, 1);
445 288775 : NEXT_PASS (pass_lower_bitint_O0, 1);
446 288775 : NEXT_PASS (pass_sancov_O0, 1);
447 288775 : NEXT_PASS (pass_lower_switch_O0, 1);
448 288775 : NEXT_PASS (pass_asan_O0, 1);
449 288775 : NEXT_PASS (pass_tsan_O0, 1);
450 288775 : NEXT_PASS (pass_musttail, 1);
451 288775 : NEXT_PASS (pass_sanopt, 1);
452 288775 : NEXT_PASS (pass_cleanup_eh, 2);
453 288775 : NEXT_PASS (pass_lower_resx, 1);
454 288775 : NEXT_PASS (pass_nrv, 1);
455 288775 : NEXT_PASS (pass_gimple_isel, 1);
456 288775 : NEXT_PASS (pass_harden_conditional_branches, 1);
457 288775 : NEXT_PASS (pass_harden_compares, 1);
458 866325 : NEXT_PASS_WITH_ARGS (pass_warn_access, 3, /*early=*/false, /*check_dangling=*/false);
459 288775 : NEXT_PASS (pass_cleanup_cfg_post_optimizing, 1);
460 288775 : NEXT_PASS (pass_warn_function_noreturn, 1);
461 :
462 288775 : NEXT_PASS (pass_expand, 1);
463 :
464 288775 : NEXT_PASS (pass_rest_of_compilation, 1);
465 288775 : PUSH_INSERT_PASSES_WITHIN (pass_rest_of_compilation, 1)
466 288775 : NEXT_PASS (pass_instantiate_virtual_regs, 1);
467 288775 : NEXT_PASS (pass_into_cfg_layout_mode, 1);
468 288775 : NEXT_PASS (pass_jump, 1);
469 288775 : NEXT_PASS (pass_lower_subreg, 1);
470 288775 : NEXT_PASS (pass_df_initialize_opt, 1);
471 288775 : NEXT_PASS (pass_cse, 1);
472 288775 : NEXT_PASS (pass_rtl_fwprop, 1);
473 288775 : NEXT_PASS (pass_rtl_cprop, 1);
474 288775 : NEXT_PASS (pass_rtl_pre, 1);
475 288775 : NEXT_PASS (pass_rtl_hoist, 1);
476 288775 : NEXT_PASS (pass_hardreg_pre, 1);
477 288775 : NEXT_PASS (pass_rtl_cprop, 2);
478 288775 : NEXT_PASS (pass_rtl_store_motion, 1);
479 288775 : NEXT_PASS (pass_cse_after_global_opts, 1);
480 288775 : NEXT_PASS (pass_rtl_ifcvt, 1);
481 288775 : NEXT_PASS (pass_apx_nf_convert, 1);
482 288775 : NEXT_PASS (pass_reginfo_init, 1);
483 : /* Perform loop optimizations. It might be better to do them a bit
484 : sooner, but we want the profile feedback to work more
485 : efficiently. */
486 288775 : NEXT_PASS (pass_loop2, 1);
487 288775 : PUSH_INSERT_PASSES_WITHIN (pass_loop2, 1)
488 288775 : NEXT_PASS (pass_rtl_loop_init, 1);
489 288775 : NEXT_PASS (pass_rtl_move_loop_invariants, 1);
490 288775 : NEXT_PASS (pass_rtl_unroll_loops, 1);
491 288775 : NEXT_PASS (pass_rtl_doloop, 1);
492 288775 : NEXT_PASS (pass_rtl_loop_done, 1);
493 : POP_INSERT_PASSES ()
494 288775 : NEXT_PASS (pass_lower_subreg2, 1);
495 288775 : NEXT_PASS (pass_web, 1);
496 288775 : NEXT_PASS (pass_rtl_cprop, 3);
497 288775 : NEXT_PASS_WITH_ARG (pass_stv, 1, true /* timode_p */);
498 288775 : NEXT_PASS (pass_cse2, 1);
499 288775 : NEXT_PASS (pass_rtl_dse1, 1);
500 288775 : NEXT_PASS (pass_rtl_fwprop_addr, 1);
501 288775 : NEXT_PASS (pass_inc_dec, 1);
502 288775 : NEXT_PASS (pass_initialize_regs, 1);
503 288775 : NEXT_PASS (pass_ud_rtl_dce, 1);
504 288775 : NEXT_PASS (pass_ext_dce, 1);
505 288775 : NEXT_PASS (pass_combine, 1);
506 288775 : NEXT_PASS (pass_late_combine, 1);
507 288775 : NEXT_PASS (pass_remove_partial_avx_dependency, 1);
508 288775 : NEXT_PASS (pass_x86_cse, 1);
509 288775 : NEXT_PASS_WITH_ARG (pass_stv, 2, false /* timode_p */);
510 288775 : NEXT_PASS (pass_if_after_combine, 1);
511 288775 : NEXT_PASS (pass_jump_after_combine, 1);
512 288775 : NEXT_PASS (pass_partition_blocks, 1);
513 288775 : NEXT_PASS (pass_outof_cfg_layout_mode, 1);
514 288775 : NEXT_PASS (pass_split_all_insns, 1);
515 288775 : NEXT_PASS (pass_lower_subreg3, 1);
516 288775 : NEXT_PASS (pass_df_initialize_no_opt, 1);
517 288775 : NEXT_PASS (pass_stack_ptr_mod, 1);
518 288775 : NEXT_PASS (pass_mode_switching, 1);
519 288775 : NEXT_PASS (pass_match_asm_constraints, 1);
520 288775 : NEXT_PASS (pass_sms, 1);
521 288775 : NEXT_PASS (pass_live_range_shrinkage, 1);
522 288775 : NEXT_PASS (pass_sched, 1);
523 288775 : NEXT_PASS (pass_rtl_avoid_store_forwarding, 1);
524 288775 : NEXT_PASS (pass_early_remat, 1);
525 288775 : NEXT_PASS (pass_dep_fusion, 1);
526 288775 : NEXT_PASS (pass_ira, 1);
527 288775 : NEXT_PASS (pass_reload, 1);
528 : /* In the following, some passes are tied to 'pass_postreload' and others
529 : to 'pass_late_compilation'. The difference is that the latter also
530 : run for 'targetm.no_register_allocation' targets. */
531 288775 : NEXT_PASS (pass_postreload, 1);
532 288775 : PUSH_INSERT_PASSES_WITHIN (pass_postreload, 1)
533 288775 : NEXT_PASS (pass_postreload_cse, 1);
534 288775 : NEXT_PASS (pass_insert_vzeroupper, 1);
535 288775 : NEXT_PASS (pass_late_combine, 2);
536 288775 : NEXT_PASS (pass_gcse2, 1);
537 288775 : NEXT_PASS (pass_split_after_reload, 1);
538 288775 : NEXT_PASS (pass_ree, 1);
539 288775 : NEXT_PASS (pass_compare_elim_after_reload, 1);
540 288775 : NEXT_PASS (pass_thread_prologue_and_epilogue, 1);
541 288775 : NEXT_PASS (pass_rtl_dse2, 1);
542 288775 : NEXT_PASS (pass_stack_adjustments, 1);
543 288775 : NEXT_PASS (pass_jump2, 1);
544 288775 : NEXT_PASS (pass_duplicate_computed_gotos, 1);
545 288775 : NEXT_PASS (pass_sched_fusion, 1);
546 288775 : NEXT_PASS (pass_peephole2, 1);
547 288775 : NEXT_PASS (pass_if_after_reload, 1);
548 288775 : NEXT_PASS (pass_dep_fusion, 2);
549 288775 : NEXT_PASS (pass_regrename, 1);
550 288775 : NEXT_PASS (pass_fold_mem_offsets, 1);
551 288775 : NEXT_PASS (pass_cprop_hardreg, 1);
552 288775 : NEXT_PASS (pass_fast_rtl_dce, 1);
553 288775 : NEXT_PASS (pass_reorder_blocks, 1);
554 288775 : NEXT_PASS (pass_leaf_regs, 1);
555 288775 : NEXT_PASS (pass_split_before_sched2, 1);
556 288775 : NEXT_PASS (pass_sched2, 1);
557 288775 : NEXT_PASS (pass_stack_regs, 1);
558 288775 : PUSH_INSERT_PASSES_WITHIN (pass_stack_regs, 1)
559 288775 : NEXT_PASS (pass_split_before_regstack, 1);
560 288775 : NEXT_PASS (pass_stack_regs_run, 1);
561 : POP_INSERT_PASSES ()
562 : POP_INSERT_PASSES ()
563 288775 : NEXT_PASS (pass_late_thread_prologue_and_epilogue, 1);
564 : /* No target-independent code motion is allowed beyond this point,
565 : excepting the legacy delayed-branch pass. */
566 288775 : NEXT_PASS (pass_late_compilation, 1);
567 288775 : PUSH_INSERT_PASSES_WITHIN (pass_late_compilation, 1)
568 288775 : NEXT_PASS (pass_zero_call_used_regs, 1);
569 288775 : NEXT_PASS (pass_compute_alignments, 1);
570 288775 : NEXT_PASS (pass_variable_tracking, 1);
571 288775 : NEXT_PASS (pass_free_cfg, 1);
572 288775 : NEXT_PASS (pass_machine_reorg, 1);
573 288775 : NEXT_PASS (pass_cleanup_barriers, 1);
574 288775 : NEXT_PASS (pass_delay_slots, 1);
575 288775 : NEXT_PASS (pass_split_for_shorten_branches, 1);
576 288775 : NEXT_PASS (pass_convert_to_eh_region_ranges, 1);
577 288775 : NEXT_PASS (pass_insert_endbr_and_patchable_area, 1);
578 288775 : NEXT_PASS (pass_align_tight_loops, 1);
579 288775 : NEXT_PASS (pass_shorten_branches, 1);
580 288775 : NEXT_PASS (pass_set_nothrow_function_flags, 1);
581 288775 : NEXT_PASS (pass_dwarf2_frame, 1);
582 288775 : NEXT_PASS (pass_final, 1);
583 : POP_INSERT_PASSES ()
584 288775 : NEXT_PASS (pass_df_finish, 1);
585 : POP_INSERT_PASSES ()
586 577550 : NEXT_PASS (pass_clean_state, 1);
587 288775 : TERMINATE_PASS_LIST (all_passes)
588 : /* Description of target passes for IA-32
589 : Copyright (C) 2016-2026 Free Software Foundation, Inc.
590 :
591 : This file is part of GCC.
592 :
593 : GCC is free software; you can redistribute it and/or modify it under
594 : the terms of the GNU General Public License as published by the Free
595 : Software Foundation; either version 3, or (at your option) any later
596 : version.
597 :
598 : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
599 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
600 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
601 : for more details.
602 :
603 : You should have received a copy of the GNU General Public License
604 : along with GCC; see the file COPYING3. If not see
605 : <http://www.gnu.org/licenses/>. */
606 :
607 : /*
608 : Macros that can be used in this file:
609 : */
610 :
611 : /* Run the 64-bit STV pass before the CSE pass so that CONST0_RTX and
612 : CONSTM1_RTX generated by the STV pass can be CSEed. */
613 :
614 : /* pass_align_tight_loops must be after pass_insert_endbr_and_patchable_area.
615 : PR116174. */
616 :
617 : #undef INSERT_PASSES_AFTER
618 : #undef PUSH_INSERT_PASSES_WITHIN
619 : #undef POP_INSERT_PASSES
620 : #undef NEXT_PASS
621 : #undef NEXT_PASS_WITH_ARG
622 : #undef NEXT_PASS_WITH_ARGS
623 : #undef TERMINATE_PASS_LIST
|