From da6ff45a3b8098c401b718214e4d5c9abdcde401 Mon Sep 17 00:00:00 2001 From: krebbel Date: Tue, 8 Apr 2014 14:18:46 +0000 Subject: [PATCH] 2014-04-08 Andreas Krebbel PR rtl-optimization/60776 * gcc.dg/builtin-bswap-6.c: Use -mbranch-cost=0 for s390. * gcc.dg/builtin-bswap-7.c: Likewise. * gcc.dg/builtin-bswap-6a.c: New testcase. * gcc.dg/builtin-bswap-7a.c: New testcase. Revert 2014-04-04 Andreas Krebbel * gcc.dg/builtin-bswap-6.c: Adjust return value to disable GCC optimization. * gcc.dg/builtin-bswap-7.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209221 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 15 +++++++++++ gcc/testsuite/gcc.dg/builtin-bswap-6.c | 15 ++++++----- gcc/testsuite/gcc.dg/builtin-bswap-6a.c | 44 +++++++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/builtin-bswap-7.c | 14 +++++------ gcc/testsuite/gcc.dg/builtin-bswap-7a.c | 44 +++++++++++++++++++++++++++++++++ 5 files changed, 117 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/builtin-bswap-6a.c create mode 100644 gcc/testsuite/gcc.dg/builtin-bswap-7a.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bfc2722..e314c6c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2014-04-08 Andreas Krebbel + + PR rtl-optimization/60776 + * gcc.dg/builtin-bswap-6.c: Use -mbranch-cost=0 for s390. + * gcc.dg/builtin-bswap-7.c: Likewise. + * gcc.dg/builtin-bswap-6a.c: New testcase. + * gcc.dg/builtin-bswap-7a.c: New testcase. + + Revert + 2014-04-04 Andreas Krebbel + + * gcc.dg/builtin-bswap-6.c: Adjust return value to disable GCC + optimization. + * gcc.dg/builtin-bswap-7.c: Likewise. + 2014-04-08 Richard Biener PR tree-optimization/60785 diff --git a/gcc/testsuite/gcc.dg/builtin-bswap-6.c b/gcc/testsuite/gcc.dg/builtin-bswap-6.c index 6f0c782..efda870 100644 --- a/gcc/testsuite/gcc.dg/builtin-bswap-6.c +++ b/gcc/testsuite/gcc.dg/builtin-bswap-6.c @@ -1,11 +1,10 @@ /* { dg-do compile { target arm*-*-* alpha*-*-* i?86-*-* powerpc*-*-* rs6000-*-* x86_64-*-* s390*-*-* } } */ /* { dg-require-effective-target stdint_types } */ /* { dg-options "-O -fdump-rtl-combine" } */ -/* { dg-options "-O -fdump-rtl-combine -march=z900" { target s390-*-* } } */ -/* The test intentionally returns 1/2 instead of the obvious 0/1 to - prevent GCC from calculating the return value with arithmetic - instead of a comparison. */ +/* The branch cost setting prevents the return value from being + calculated with arithmetic instead of doing a compare. */ +/* { dg-additional-options "-march=z900 -mbranch-cost=0" { target s390*-*-* } } */ #include @@ -15,28 +14,28 @@ int foo1 (uint32_t a) { if (BS (a) == 0xA0000) return 1; - return 2; + return 0; } int foo2 (uint32_t a) { if (BS (a) != 0xA0000) return 1; - return 2; + return 0; } int foo3 (uint32_t a, uint32_t b) { if (BS (a) == BS (b)) return 1; - return 2; + return 0; } int foo4 (uint32_t a, uint32_t b) { if (BS (a) != BS (b)) return 1; - return 2; + return 0; } /* { dg-final { scan-rtl-dump-not "bswapsi" "combine" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-bswap-6a.c b/gcc/testsuite/gcc.dg/builtin-bswap-6a.c new file mode 100644 index 0000000..f93bcde --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-bswap-6a.c @@ -0,0 +1,44 @@ +/* { dg-do compile { target arm*-*-* alpha*-*-* i?86-*-* powerpc*-*-* rs6000-*-* x86_64-*-* s390*-*-* } } */ +/* { dg-require-effective-target stdint_types } */ +/* { dg-options "-O2 -fdump-rtl-combine" } */ +/* { dg-additional-options "-march=z900" { target s390-*-* } } */ + +/* The test is similiar to builtin-bswap-6.c but returns 1/2 instead + of 0/1 to prevent GCC from calculating the return value with + arithmetic instead of a comparison. This requires the optimization + level to be bumped up to -O2 at least for x86_64. */ + +#include + +#define BS(X) __builtin_bswap32(X) + +int foo1 (uint32_t a) +{ + if (BS (a) == 0xA0000) + return 1; + return 2; +} + +int foo2 (uint32_t a) +{ + if (BS (a) != 0xA0000) + return 1; + return 2; +} + +int foo3 (uint32_t a, uint32_t b) +{ + if (BS (a) == BS (b)) + return 1; + return 2; +} + +int foo4 (uint32_t a, uint32_t b) +{ + if (BS (a) != BS (b)) + return 1; + return 2; +} + +/* { dg-final { scan-rtl-dump-not "bswapsi" "combine" } } */ +/* { dg-final { cleanup-rtl-dump "combine" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-bswap-7.c b/gcc/testsuite/gcc.dg/builtin-bswap-7.c index 0eecdd8..035c736 100644 --- a/gcc/testsuite/gcc.dg/builtin-bswap-7.c +++ b/gcc/testsuite/gcc.dg/builtin-bswap-7.c @@ -3,9 +3,9 @@ /* { dg-require-effective-target lp64 } */ /* { dg-options "-O -fdump-rtl-combine" } */ -/* The test intentionally returns 1/2 instead of the obvious 0/1 to - prevent GCC from calculating the return value with arithmetic - instead of a comparison. */ +/* The branch cost setting prevents the return value from being + calculated with arithmetic instead of doing a compare. */ +/* { dg-additional-options "-mbranch-cost=0" { target s390x-*-* } } */ #include @@ -15,28 +15,28 @@ int foo1 (uint64_t a) { if (BS (a) == 0xA00000000) return 1; - return 2; + return 0; } int foo2 (uint64_t a) { if (BS (a) != 0xA00000000) return 1; - return 2; + return 0; } int foo3 (uint64_t a, uint64_t b) { if (BS (a) == BS (b)) return 1; - return 2; + return 0; } int foo4 (uint64_t a, uint64_t b) { if (BS (a) != BS (b)) return 1; - return 2; + return 0; } /* { dg-final { scan-rtl-dump-not "bswapdi" "combine" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-bswap-7a.c b/gcc/testsuite/gcc.dg/builtin-bswap-7a.c new file mode 100644 index 0000000..d77bd47 --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-bswap-7a.c @@ -0,0 +1,44 @@ +/* { dg-do compile { target arm*-*-* alpha*-*-* ia64*-*-* x86_64-*-* s390x-*-* powerpc*-*-* rs6000-*-* } } */ +/* { dg-require-effective-target stdint_types } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O2 -fdump-rtl-combine" } */ + +/* The test is similiar to builtin-bswap-7.c but returns 1/2 instead + of 0/1 to prevent GCC from calculating the return value with + arithmetic instead of a comparison. This requires the optimization + level to be bumped up to -O2 at least for x86_64. */ + +#include + +#define BS(X) __builtin_bswap64(X) + +int foo1 (uint64_t a) +{ + if (BS (a) == 0xA00000000) + return 1; + return 2; +} + +int foo2 (uint64_t a) +{ + if (BS (a) != 0xA00000000) + return 1; + return 2; +} + +int foo3 (uint64_t a, uint64_t b) +{ + if (BS (a) == BS (b)) + return 1; + return 2; +} + +int foo4 (uint64_t a, uint64_t b) +{ + if (BS (a) != BS (b)) + return 1; + return 2; +} + +/* { dg-final { scan-rtl-dump-not "bswapdi" "combine" } } */ +/* { dg-final { cleanup-rtl-dump "combine" } } */ -- 2.7.4