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

            Bug ID: 83831
           Summary: [6/7/8 Regression][RX] Unused bclr,bnot,bset insns
           Product: gcc
           Version: 6.4.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: olegendo at gcc dot gnu.org
  Target Milestone: ---
            Target: rx*-*-*

These cases should be emitting the bclr, bnot, bset instructions.  They are
present in rx.md but I guess the combine pass does not catch them because of
some reasons.  I assume these patterns used to work at some point in time, so
this must be some kind of regression.  It's not working on the latest supported
branch (GCC 6) and trunk (GCC 8).


void expect_blcr (char* x)
{
  x[0] &= 0b1111'1110;
  x[1] &= 0b1111'1110;
  x[2] &= 0b1111'1110;
  x[65000] &= 0b1111'1110;
}


void expect_bnot (char* x)
{
  x[0] ^= 0b0001'0000;
  x[1] ^= 0b0001'0000;
  x[2] ^= 0b0001'0000;
  x[65000] ^= 0b0001'0000;
}


void expect_bset (char* x)
{
  x[0] |= 0b0001'0000;
  x[1] |= 0b0001'0000;
  x[2] |= 0b0001'0000;
  x[65000] |= 0b0001'0000;
}

Reply via email to