On Wed, Jul 13, 2011 at 11:49 AM, Paolo Bonzini <bonz...@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 >