https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63186

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
For the case when any of the bbs considered for being split (into
function.part.N) refers to a label which is defined in one of the basic blocks
that are not considered for split we already kind of have code to handle that,
the DECL_UID of the label is put into non_ssa_vars bitmap and then
verify_non_ssa_vars is called which if it sees a GIMPLE_LABEL with a label set
in non_ssa_vars bitmap will give up.  Unfortunately, verify_non_ssa_vars
doesn't walk all basic blocks that aren't being split off, but only those that
can be executed before reaching the split entry_bb.  In the testcase the label
is in a basic block that just returns afterwards.  So perhaps we'd need to
remember if we put any LABEL_DECL uids into non_ssa_vars bitmap and if yes, in
addition to what non_ssa_vars does right now also walk all other basic blocks
that would not be split away (just the labels at the start of each) and just
handle GIMPLE_LABELs for those.  Or do that always.

Not sure what is supposed to handle the case when a label anywhere in the
split_bbs would be referenced from the header basic blocks though.

Reply via email to