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;
}