From dd784916f5a7bd522e8b27f274a3e9a6d14d892f Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra Date: Wed, 16 Nov 2016 18:10:34 +0000 Subject: [PATCH] Looking at PR77308, one of the issues is that the bswap optimization phase doesn't work on ARM. Looking at PR77308, one of the issues is that the bswap optimization phase doesn't work on ARM. This is due to an odd check that uses SLOW_UNALIGNED_ACCESS (which is always true on ARM). Since the testcase in PR77308 generates much better code with this patch (~13% fewer instructions), it seems best to remove this check. gcc/ * tree-ssa-math-opts.c (bswap_replace): Remove test of SLOW_UNALIGNED_ACCESS. testsuite/ * gcc.dg/optimize-bswapdi-3.c: Remove xfail. * gcc.dg/optimize-bswaphi-1.c: Likewise. * gcc.dg/optimize-bswapsi-2.c: Likewise. From-SVN: r242506 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/optimize-bswapdi-3.c | 2 +- gcc/testsuite/gcc.dg/optimize-bswaphi-1.c | 3 +-- gcc/testsuite/gcc.dg/optimize-bswapsi-2.c | 2 +- gcc/tree-ssa-math-opts.c | 5 ----- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be573a3124b..a5290bafc4a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-11-16 Wilco Dijkstra + + * tree-ssa-math-opts.c (bswap_replace): Remove test + of SLOW_UNALIGNED_ACCESS. + 2016-11-16 Alexander Monakov * config/nvptx/mkoffload.c (main): Check that either OpenACC or OpenMP diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d750f25d328..3f8831e066a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-11-16 Wilco Dijkstra + + * gcc.dg/optimize-bswapdi-3.c: Remove xfail. + * gcc.dg/optimize-bswaphi-1.c: Likewise. + * gcc.dg/optimize-bswapsi-2.c: Likewise. + 2016-11-16 Szabolcs Nagy PR libgfortran/78314 diff --git a/gcc/testsuite/gcc.dg/optimize-bswapdi-3.c b/gcc/testsuite/gcc.dg/optimize-bswapdi-3.c index 273b4bc622c..6f682014622 100644 --- a/gcc/testsuite/gcc.dg/optimize-bswapdi-3.c +++ b/gcc/testsuite/gcc.dg/optimize-bswapdi-3.c @@ -61,4 +61,4 @@ uint64_t read_be64_3 (unsigned char *data) } /* { dg-final { scan-tree-dump-times "64 bit load in target endianness found at" 3 "bswap" } } */ -/* { dg-final { scan-tree-dump-times "64 bit bswap implementation found at" 3 "bswap" { xfail alpha*-*-* arm*-*-* } } } */ +/* { dg-final { scan-tree-dump-times "64 bit bswap implementation found at" 3 "bswap" } } */ diff --git a/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c b/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c index c18ca6174d1..852ccfe5c1a 100644 --- a/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c +++ b/gcc/testsuite/gcc.dg/optimize-bswaphi-1.c @@ -55,5 +55,4 @@ swap16 (HItype in) } /* { dg-final { scan-tree-dump-times "16 bit load in target endianness found at" 3 "bswap" } } */ -/* { dg-final { scan-tree-dump-times "16 bit bswap implementation found at" 1 "bswap" { target alpha*-*-* arm*-*-* } } } */ -/* { dg-final { scan-tree-dump-times "16 bit bswap implementation found at" 4 "bswap" { xfail alpha*-*-* arm*-*-* } } } */ +/* { dg-final { scan-tree-dump-times "16 bit bswap implementation found at" 4 "bswap" } } */ diff --git a/gcc/testsuite/gcc.dg/optimize-bswapsi-2.c b/gcc/testsuite/gcc.dg/optimize-bswapsi-2.c index a1558af2cc7..01ae3776ed3 100644 --- a/gcc/testsuite/gcc.dg/optimize-bswapsi-2.c +++ b/gcc/testsuite/gcc.dg/optimize-bswapsi-2.c @@ -45,4 +45,4 @@ uint32_t read_be32_3 (unsigned char *data) } /* { dg-final { scan-tree-dump-times "32 bit load in target endianness found at" 3 "bswap" } } */ -/* { dg-final { scan-tree-dump-times "32 bit bswap implementation found at" 3 "bswap" { xfail alpha*-*-* arm*-*-* } } } */ +/* { dg-final { scan-tree-dump-times "32 bit bswap implementation found at" 3 "bswap" } } */ diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index b28c808c554..a389dfcae14 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -2649,11 +2649,6 @@ bswap_replace (gimple *cur_stmt, gimple *src_stmt, tree fndecl, align = get_object_alignment (src); - if (bswap - && align < GET_MODE_ALIGNMENT (TYPE_MODE (load_type)) - && SLOW_UNALIGNED_ACCESS (TYPE_MODE (load_type), align)) - return false; - /* Move cur_stmt just before one of the load of the original to ensure it has the same VUSE. See PR61517 for what could go wrong. */ -- 2.30.2