On Mon, 19 Mar 2012, Jan Hubicka wrote: > > > > We have the unfortunate situation that expand may leave us with > > unreachable blocks that are required by proper rtl_eh functioning > > (unreachable landing-pads, that is). This is bad for any verification > > pass the pass manager may want to call that requires dominators to > > be computed (I'm thinking of verifying loop structures, which I really > > want to do after expand as I am trying to preserve loop structures > > from tree loop optimization until after RTL loop optimization). > > > > This limitation has been introduced with the introduction of > > rtl_eh - and is, IMHO, bad as it exposed a partly broken IL state > > to the passmanager. > > > > Thus the following patch makes sure we can leave cfgexpand with > > no unreachable blocks around and simply merges the rtl_eh pass > > and expand. > > > > Yes, we do have several tests in the testsuite where EH landing > > pads get unreachable during expansion, by a disconnect of what > > GIMPLE thinks can throw and what the expanded code sequence says > > (bogus SSE builtin definitions in the x86_64 backend for example, > > see g++.dg/other/i386-1.C for two cases). > > Those cases are in fact mostly broken. When gimple thinks somehting throws > and it does not, it is a missed optimization. > Especially the SSE intrincisc not having NOTHROW. We should have at least > tracking PR for them. > > > > Bootstrap and regtest on x86_64-unknown-linux-gnu running. > > > > Comments? > > This seems OK to me... > > NEXT_PASS (pass_init_function); > > NEXT_PASS (pass_jump); > > - NEXT_PASS (pass_rtl_eh); > > NEXT_PASS (pass_initial_value_sets); > > NEXT_PASS (pass_unshare_all_rtl); > > IL is deeply irregular until this step, since RTL sharing is nothing any of > other passes are designed to handle and it does not match what rtl.texi says. > I would suggest merging all those into cfgexpand, not just rtl_eh.
Ok. If the posted patch passes bootstrap & regtest I'll see what I can do. Richard.