[PATCH] Save and restore EDGE_DFS_BACK in draw_cfg_edges
Richard Biener
rguenther@suse.de
Tue Jul 4 07:03:00 GMT 2017
On Tue, 4 Jul 2017, Tom de Vries wrote:
> [was: Re: [PATCH] Add dotfn ]
>
> On 07/03/2017 12:23 PM, Richard Biener wrote:
> > > Btw, I think this needs fixing:
> > > ...
> > > /* Draw all edges in the CFG. Retreating edges are drawin as not
> > > constraining, this makes the layout of the graph better.
> > > (??? Calling mark_dfs_back may change the compiler's behavior when
> > > dumping, but computing back edges here for ourselves is also not
> > > desirable.) */
> > >
> > > static void
> > > draw_cfg_edges (pretty_printer *pp, struct function *fun)
> > > {
> > > basic_block bb;
> > > mark_dfs_back_edges ();
> > > FOR_ALL_BB_FN (bb, cfun)
> > > draw_cfg_node_succ_edges (pp, fun->funcdef_no, bb);
> > > ...
> > >
> > > We don't want that calling a debug function changes compiler behavior
> > > (something I ran into while debugging PR81192).
> > >
> > > Any suggestion on how to address this? We could allocate a bitmap before
> > > and
> > > save the edge flag for all edges, and restore afterwards.
>
> > Something like that, yes.
> >
>
> This patch implements that approach.
>
> I've tried it with the PR81192 example and calling DOTFN in tail-merge, like
> this:
> 1. Just compiling the example without any patches gives a tail-merge
> sigsegv.
> 2. Compiling with the DOTFN call in tail-merge makes the sigsegv go
> away.
> 3. Adding this patch makes the sigsegv come back.
>
> OK for trunk if bootstrap and reg-test on x86_64 succeeds?
You don't need to iterate over both preds and succs, succs
is enough.
Ok with that change.
Richard.
> Thanks,
> - Tom
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
More information about the Gcc-patches
mailing list