On Tue, 2011-07-12 at 09:43 +0100, Paulo J. Matos wrote: > On 12/07/11 08:22, Paolo Bonzini wrote: > > On 07/11/2011 07:56 PM, David Malcolm wrote: > >> Hope this is fun/helpful (and that I'm correctly interpreting the data!) > > > > You are, and it shows some bugs even. gimple_lcx is obviously destroyed > > by expand, and I find it unlikely that no pass ever introduces a > > critical edge... > > > > But the diagram shows gimple_lcx stopping at expand but continuing its > lifetime through RTL passes (so gimple_lcx according to the diagram is > _not_ destroyed by expand). So, I am left wondering if the bug is in the > diagram or GCC.
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?) Note that the diagram doesn't take the RTL_* enum into account. FWIW, I added some more notes on passes here: http://readthedocs.org/docs/gcc-python-plugin/en/latest/passes.html which tries to summarize what the PROP_* flags mean (as I understand them). and there's a higher-level summary of GCC's insides (from the perspective of a Python coder new to GCC) here: http://readthedocs.org/docs/gcc-python-plugin/en/latest/gcc-overview.html As before, caveat lector: I may have misunderstood things; I'm relatively new to GCC. Hope this is helpful Dave [1] http://readthedocs.org/docs/gcc-python-plugin/en/latest/tables-of-passes.html#the-all-other-passes-catch-all