[PATCH][RFC] Add gimple-cfg.h.
Richard Biener
richard.guenther@gmail.com
Mon Aug 27 10:00:00 GMT 2018
On Mon, Aug 27, 2018 at 10:43 AM Martin Liška <mliska@suse.cz> wrote:
>
> On 08/27/2018 09:56 AM, Richard Biener wrote:
> > On Mon, Aug 27, 2018 at 9:13 AM Martin Liška <mliska@suse.cz> wrote:
> >>
> >> Hi.
> >>
> >> There's updated version with notes that were discussed with Richi
> >> on IRC. As pointed out label_to_block can potentially lead to
> >> quadratic complexity, but it's not ambition of the patch to resolve
> >> that.
> >
> > Please don't
> >
> > @@ -3239,7 +3239,7 @@ expand_asm_stmt (gasm *stmt)
> > may insert further instructions into the same basic block after
> > asm goto and if we don't do this, insertion of instructions on
> > the fallthru edge might misbehave. See PR58670. */
> > - if (fallthru_bb && label_to_block_fn (cfun, label) == fallthru_bb)
> > + if (fallthru_bb && label_to_block (label) == fallthru_bb)
> > {
> > if (fallthru_label == NULL_RTX)
> > fallthru_label = gen_label_rtx ();
> >
> > rather the label_to_block function should go away. OK with removing any
> > such instances in the patch.
> >
> > Richard.
> >
> >> Martin
>
> Ok, I'm sending one more version where I completely removed label_to_block_fn.
> Richi, out of the modified function, which would be subject for introduction
> of a new argument (struct *function)?
Esp. gimple_switch_bb would be ... also, sorry for noticing so late,
gimple_switch_bb
awfully sounds like gimple_bb which means better call it
gimple_switch_label_bb ()?
Note doing both things in one patch (adding your wrappers) and cleaning up
label_to_block isn't necessary (but I have no issue with that).
So - may I ask you for a) change name to gimple_switch_label_bb b) add a
cfun argument to this function?
To your last question, it's most of the time easy to look up the call chain for
static functions and you'll find a function that is called with struct
function *.
When I(?) added label_to_block_fn I did so for the places I "cleaned up", so
it would be nice to not introduce cfun references where it's easy to avoid.
From a quick look important cases seem to be
- set_switch_stmt_execution_predicate
- find_taken_edge_switch_expr (and thus callers)
- gimple_redirect_edge_and_branch
- gimple_switch_label_bb
in most passes using cfun should be "easy" to avoid by passing down
the struct function arg from the pass execute() method but that's a bit
tedious and IMHO not too important.
You'll notice that in GIMPLE / CFG infrastructure one of the ugly facts
is that there's no way to go from a basic-block to the containing
struct function.
Thanks,
Richard.
>
> Martin
More information about the Gcc-patches
mailing list