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
This commit is contained in:
parent
0af3095468
commit
dd784916f5
|
@ -1,3 +1,8 @@
|
|||
2015-11-16 Wilco Dijkstra <wdijkstr@arm.com>
|
||||
|
||||
* tree-ssa-math-opts.c (bswap_replace): Remove test
|
||||
of SLOW_UNALIGNED_ACCESS.
|
||||
|
||||
2016-11-16 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
* config/nvptx/mkoffload.c (main): Check that either OpenACC or OpenMP
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2015-11-16 Wilco Dijkstra <wdijkstr@arm.com>
|
||||
|
||||
* 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 <szabolcs.nagy@arm.com>
|
||||
|
||||
PR libgfortran/78314
|
||||
|
|
|
@ -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" } } */
|
||||
|
|
|
@ -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" } } */
|
||||
|
|
|
@ -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" } } */
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in New Issue