A visualization of GCC's passes, as a subway map
Richard Guenther
richard.guenther@gmail.com
Wed Jul 13 10:58:00 GMT 2011
On Wed, Jul 13, 2011 at 11:49 AM, Paolo Bonzini <bonzini@gnu.org> wrote:
> On 07/12/2011 06:07 PM, David Malcolm wrote:
>>
>> On this build of GCC (standard Fedora 15 gcc package of 4.6.0), the
>> relevant part of cfgexpand.c looks like this:
>>
>> struct rtl_opt_pass pass_expand =
>> {
>> {
>> RTL_PASS,
>> "expand", /* name */
>>
>> [...snip...]
>>
>> PROP_ssa | PROP_gimple_leh | PROP_cfg
>> | PROP_gimple_lcx, /* properties_required */
>> PROP_rtl, /* properties_provided */
>> PROP_ssa | PROP_trees, /* properties_destroyed */
>>
>> [...snip...]
>>
>> }
>>
>> and gcc/tree-pass.h has:
>> #define PROP_trees \
>> (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh |
>> PROP_gimple_lomp)
>>
>> and that matches up with both the diagram, and the entry for "expand" in
>> the table below [1].
>>
>> So it seems that the diagram is correctly accessing the
>> "properties_destroyed" data for the "expand" pass; does PROP_gimple_lcx
>> need to be added somewhere? (or should the diagram we taught to
>> specialcase some things, perhaps?)
>
> Yes, PROP_gimple_lcx needs to be added to PROP_trees. I cannot approve the
> patch, unfortunately.
Hm, why? complex operations are lowered after a complex lowering pass
has executed. they are still lowered on RTL, so I don't see why we need
to destroy them technically.
> Also, several passes are likely lacking PROP_crited in their
> properties_destroyed. At least all those that can be followed by
> TODO_cleanup_cfg:
Yeah, well - most PROPerties are for informational purposes only right
now - things like critical edge splitting should possibly be automatically
managed by the pass manager via properties (likewise dominator info
for which we don't have a property right now). Of course we'd like to
have a verifier for each property.
Richard.
> * pass_split_functions
> * pass_call_cdcen
> * pass_build_cfg
> * pass_cleanup_eh
> * pass_if_conversion
> * pass_ipa_inline
> * pass_early_inline
> * pass_fixup_cfg
> * pass_cse_sincos
> * pass_predcom
> * pass_lim
> * pass_loop_prefetch
> * pass_vectorize
> * pass_iv_canon
> * pass_tree_unswitch
> * pass_vrp
> * pass_sra_early
> * pass_sra
> * pass_early_ipa_sra
> * pass_ccp
> * pass_fold_builtins
> * pass_copy_prop
> * pass_dce
> * pass_dce_loop
> * pass_cd_dce
> * pass_dominator
> * pass_phi_only_cprop
> * pass_forwprop
> * pass_tree_ifcombine
> * pass_scev_cprop
> * pass_parallelize_loops
> * pass_ch
> * pass_cselim
> * pass_pre
> * pass_fre
> * pass_tail_recursion
> * pass_tail_calls
>
> Paolo
>
More information about the Gcc
mailing list