On Wed, 2013-04-24 at 07:45 +0100, Richard Sandiford wrote:
> "Steve Ellcey " <sell...@imgtec.com> writes:
> > 2013-04-19  Andrew Bennett <andrew.benn...@imgtec.com>
> >         Steve Ellcey  <sell...@imgtec.com>
> >
> >     PR target/56942
> >     * config/mips/mips.md (casesi_internal_mips16_<mode>): Use
> >     next_active_insn instead of next_real_insn.
> 
> Hmm, I don't really like this.  Steven said from ARM in
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56809:
> 
> -----------------------------------------------------------------------
> Target bug, this is wrong:
> 
>   rtx diff_vec = PATTERN (next_real_insn (operands[2]));
> 
> A jump_table_data is not a real insn.  Before my patch this worked
> by accident because the jump table would hide in a JUMP_INSN and 
> next_real_insn returned any JUMP_P insn.
> 
> Use next_active_insn instead.
> -----------------------------------------------------------------------
> 
> But using next_real_insn was at least as correct (IMO, more correct)
> as next_active_insn before r197266.  It seems counterintuitive that
> something can be "active" but not "real".
> 
> Richard

So should we put the active_insn_p hack/FIXME into real_next_insn?  That
doesn't seem like much of a win but it would probably fix the problem.

Steve Ellcey
sell...@imgtec.com



>From emit-rtl.c:

/* Find the next insn after INSN that really does something.  This routine
   does not look inside SEQUENCEs.  After reload this also skips over
   standalone USE and CLOBBER insn.  */

int
active_insn_p (const_rtx insn)
{
  return (CALL_P (insn) || JUMP_P (insn)
          || JUMP_TABLE_DATA_P (insn) /* FIXME */
          || (NONJUMP_INSN_P (insn)
              && (! reload_completed
                  || (GET_CODE (PATTERN (insn)) != USE
                      && GET_CODE (PATTERN (insn)) != CLOBBER))));
}




Reply via email to