> The problem is actually bigger than just the var-tracking notes. The
> general problem is that there are no rules for whether or not notes
> are part of a basic block or not. Some notes never appear inside a
> basic block, some notes always must appear inside a basic block, and
> some can appear virtually anywhere.
Can we reorganize insn-notes.def so that the 3 classes are clearly separated
(and optionally define a NOTE_INSN_CLASS macro so that we don't need to
enumerate the notes each time)?
Reading your patch, it apppears that NOTE_INSN_SWITCH_TEXT_SECTIONS is the
only member of the 1st class and that almost all notes are in the 2nd class
except for the 2 LOCATION and the 2 EH_REGION recently added notes.
> With this patch I've chosen to maintain the invariant that BB_END must
> be an INSN, and never be a NOTE or BARRIER.
Yes, I think that's the historical design.
> The result is that NOTE_INSN_EH_REGION_BEG notes can be inside a basic block
> while the pairing NOTE_INSN_EH_REGION_END is outside the basic block. I
> don't think this is a problem: The same thing already happens with jump
> table data, barriers, etc.
Slightly annoying, but trumped by the previous requirement I think.
> The nice thing is that with this patch, *finally* I have
> verify_flow_info pass after var-tracking. That's important because
> officially the CFG is freed after this pass (pass_free_cfg runs after
> pass_variable_tracking) but because verify_flow_info didn't pass after
> var-tracking the CFG was already invalidated before it was freed
> (BB_HEAD and BB_END would be incorrect). That has the effect that some
> of the machine-reorg passes that use the CFG never really had a
> correct CFG at all!
Thanks for working on this. Some nits in the patch:
- Remove the
This and the next should be the only functions called to insert an insn
once delay slots have been filled since only they know how to update a
SEQUENCE.
from the head comment of functions that are now private to emit-rtl.c.
- Are there still public functions that cannot be invoked in emit-rtl.c to
insert insns where there are SEQUENCEs in the stream? If so, you need to mark
the ones which can be invoked explicitly with a blurb in the head comment.
--
Eric Botcazou