Hi! These 2 PRs were fixed with r255506, I've tested these testcases on x86_64-linux {-m32,-m64} with current trunk as well as trunk before that change (where it FAILed) and committed to trunk as obvious.
2017-12-12 Jakub Jelinek <ja...@redhat.com> PR rtl-optimization/83363 PR rtl-optimization/83364 * gcc.dg/pr83363.c: New test. * gcc.dg/pr83364.c: New test. --- gcc/testsuite/gcc.dg/pr83363.c.jj 2017-12-12 10:46:08.639485075 +0100 +++ gcc/testsuite/gcc.dg/pr83363.c 2017-12-12 10:43:03.253793460 +0100 @@ -0,0 +1,26 @@ +/* PR rtl-optimization/83363 */ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-forward-propagate" } */ + +unsigned char a; +unsigned int b; + +static unsigned short __attribute__ ((noinline, noclone)) +foo (unsigned short x) +{ + x -= b; + x <<= x == 0; + a = ~0; + a >>= (unsigned char) x == 0; + x *= a -= ~a; + return x; +} + +int +main () +{ + asm volatile ("" : : : "memory"); + if (foo (3) != (unsigned short) (3 * (unsigned char) ~0)) + __builtin_abort (); + return 0; +} --- gcc/testsuite/gcc.dg/pr83364.c.jj 2017-12-12 10:46:11.422450423 +0100 +++ gcc/testsuite/gcc.dg/pr83364.c 2017-12-12 10:46:02.486561690 +0100 @@ -0,0 +1,22 @@ +/* PR rtl-optimization/83364 */ +/* { dg-do run } */ +/* { dg-options "-O -fno-forward-propagate -fno-tree-coalesce-vars -fno-tree-ter" } */ + +int a; + +static int __attribute__ ((noinline, noclone)) +foo (unsigned char c) +{ + c <<= (long long) c != a; + c = c << 7 | c >> 1; + return c; +} + +int +main () +{ + asm volatile ("" : : : "memory"); + if (foo (0) != 0) + __builtin_abort (); + return 0; +} Jakub