On Wed, 2018-02-14 at 21:34 +0900, Oleg Endo wrote:
> > Approved - please apply - and thanks very much for doing this!
> Thanks! Committed as r257655.
>
Testing another patch
https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00903.html
revealed a bug.
I've committed the attached somewhat obvious patch as r257735.
Cheers,
Oleg
gcc/ChangeLog:
PR target/83831
* config/rx/rx.c (rx_fuse_in_memory_bitop): Convert shift operand
to QImode.
gcc/testsuite/ChangeLog:
PR target/83831
* gcc.target/rx/pr83831.c (test_3, test_6): Adjust test cases.
Index: gcc/config/rx/rx.c
===================================================================
--- gcc/config/rx/rx.c (revision 257733)
+++ gcc/config/rx/rx.c (working copy)
@@ -3515,7 +3515,7 @@
if (volatile_insn_p (PATTERN (i)) || CALL_P (i))
return false;
- emit_insn (gen_insn (mem, operands[1]));
+ emit_insn (gen_insn (mem, gen_lowpart (QImode, operands[1])));
set_insn_deleted (op2_def.insn);
set_insn_deleted (op0_use);
return true;
Index: gcc/testsuite/gcc.target/rx/pr83831.c
===================================================================
--- gcc/testsuite/gcc.target/rx/pr83831.c (revision 257733)
+++ gcc/testsuite/gcc.target/rx/pr83831.c (working copy)
@@ -1,8 +1,8 @@
/* { dg-do compile } */
/* { dg-options "-O1" } */
/* { dg-final { scan-assembler-times "bclr" 6 } } */
-/* { dg-final { scan-assembler-times "bset" 6 } } */
-/* { dg-final { scan-assembler-times "bnot" 6 } } */
+/* { dg-final { scan-assembler-times "bset" 7 } } */
+/* { dg-final { scan-assembler-times "bnot" 7 } } */
void
test_0 (char* x, unsigned int y)
@@ -29,13 +29,14 @@
}
void
-test_3 (char* x, unsigned int y)
+test_3 (char* x, unsigned int y, unsigned int z)
{
- /* Expect 4x bset here. */
+ /* Expect 5x bset here. */
x[0] |= 0x10;
x[1] = y | (1 << 1);
x[2] |= 0x10;
x[65000] |= 0x10;
+ x[5] |= 1 << z;
}
unsigned int
@@ -53,13 +54,14 @@
}
void
-test_6 (char* x, unsigned int y)
+test_6 (char* x, unsigned int y, unsigned int z)
{
- /* Expect 4x bnot here. */
+ /* Expect 5x bnot here. */
x[0] ^= 0x10;
x[1] = y ^ (1 << 1);
x[2] ^= 0x10;
x[65000] ^= 0x10;
+ x[5] ^= 1 << z;
}
unsigned int