From 6c939c2e9c6c3437fd5664a163890d3006dba45c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 12 Dec 2017 10:51:05 +0100 Subject: [PATCH] re PR rtl-optimization/83363 (wrong code at -O2 -fno-forward-propagate) PR rtl-optimization/83363 PR rtl-optimization/83364 * gcc.dg/pr83363.c: New test. * gcc.dg/pr83364.c: New test. From-SVN: r255576 --- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr83363.c | 26 ++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/pr83364.c | 22 ++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr83363.c create mode 100644 gcc/testsuite/gcc.dg/pr83364.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 811ec8d381a..079fd96fee5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2017-12-12 Jakub Jelinek + PR rtl-optimization/83363 + PR rtl-optimization/83364 + * gcc.dg/pr83363.c: New test. + * gcc.dg/pr83364.c: New test. + PR tree-optimization/83359 * gcc.dg/graphite/pr83359.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr83363.c b/gcc/testsuite/gcc.dg/pr83363.c new file mode 100644 index 00000000000..e69826890f5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83363.c @@ -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; +} diff --git a/gcc/testsuite/gcc.dg/pr83364.c b/gcc/testsuite/gcc.dg/pr83364.c new file mode 100644 index 00000000000..6d38e40ca51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83364.c @@ -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; +} -- 2.30.2