On Fri, Mar 24, 2017 at 06:37:10AM -0600, Jeff Law wrote:
> > 2017-03-21  Jakub Jelinek  <ja...@redhat.com>
> > 
> >     PR target/80102
> >     * cfgcleanup.c (old_insns_match_p): Don't cross-jump in between /f
> >     and non-/f instructions.  If both i1 and i2 are frame related,
> >     verify all CFA notes, their order and content.
> > 
> >     * g++.dg/opt/pr80102.C: New test.
> Presumably this didn't ICE at some point in the past, so it's a regression?
> (it's not marked as such in the BZ).

It doesn't ICE for me with r238210 and ICEs with current trunk, I don't have
too many ppc64le compilers around though.

> > +  /* If both i1 and i2 are frame related, verify all the CFA notes
> > +     in the same order and with the same content.  */
> > +  if (RTX_FRAME_RELATED_P (i1))
> > +    {
> > +      static enum reg_note cfa_note_kinds[] = {
> > +   REG_FRAME_RELATED_EXPR, REG_CFA_DEF_CFA, REG_CFA_ADJUST_CFA,
> > +   REG_CFA_OFFSET, REG_CFA_REGISTER, REG_CFA_EXPRESSION,
> > +   REG_CFA_VAL_EXPRESSION, REG_CFA_RESTORE, REG_CFA_SET_VDRAP,
> > +   REG_CFA_TOGGLE_RA_MANGLE, REG_CFA_WINDOW_SAVE, REG_CFA_FLUSH_QUEUE
> > +      };
> ISTM this could get out of date very easily.  Is there a clean way to
> generate the array of cfa notes as we build up the notes from reg-notes.def?

We could e.g.
#ifndef REG_CFA_NOTE
# define REG_CFA_NOTE(NAME) REG_NOTE(NAME)
#endif
and then
REG_CFA_NOTE (FRAME_RELATED_EXPR)
etc. in reg-notes.def (and document that REG_CFA_NOTE should be used for
notes related to CFA).
Then in cfgcleanups.c we could just
#undef REG_CFA_NOTE
#define DEF_REG_NOTE(NAME)
#define REG_CFA_NOTE(NAME) REG_##NAME,
#include "reg-notes.def"
#undef DEF_REG_NOTE
#undef REG_CFA_NOTE
to populate the cfa_note_kinds array.

        Jakub

Reply via email to