A visualization of GCC's passes, as a subway map

Paolo Bonzini bonzini@gnu.org
Wed Jul 13 09:53:00 GMT 2011


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.

Also, several passes are likely lacking PROP_crited in their 
properties_destroyed.  At least all those that can be followed by 
TODO_cleanup_cfg:

* 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