public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r11-7946] bswap: Handle bswapping of pointers [PR96573]
@ 2021-04-01 8:52 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2021-04-01 8:52 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:5b9a65ecbeb22ef6dd3344baae97f85b645522e3
commit r11-7946-g5b9a65ecbeb22ef6dd3344baae97f85b645522e3
Author: Jakub Jelinek <jakub@redhat.com>
Date: Thu Apr 1 10:51:03 2021 +0200
bswap: Handle bswapping of pointers [PR96573]
In GCC8/9 we used to optimize this into a bswap, but we no longer do.
Handling byteswapping of pointers is easy, all we need is to allow them,
for the __builtin_bswap* we already use TYPE_PRECISION to determine
the precision and we cast the operand and result to the correct type
if they aren't uselessly convertible to what the builtin expects.
2021-04-01 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/96573
* gimple-ssa-store-merging.c (init_symbolic_number): Handle
also pointer types.
* gcc.dg/pr96573.c: New test.
Diff:
---
gcc/gimple-ssa-store-merging.c | 2 +-
gcc/testsuite/gcc.dg/pr96573.c | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/gcc/gimple-ssa-store-merging.c b/gcc/gimple-ssa-store-merging.c
index 213c1551d39..30bd66335ba 100644
--- a/gcc/gimple-ssa-store-merging.c
+++ b/gcc/gimple-ssa-store-merging.c
@@ -333,7 +333,7 @@ init_symbolic_number (struct symbolic_number *n, tree src)
{
int size;
- if (! INTEGRAL_TYPE_P (TREE_TYPE (src)))
+ if (!INTEGRAL_TYPE_P (TREE_TYPE (src)) && !POINTER_TYPE_P (TREE_TYPE (src)))
return false;
n->base_addr = n->offset = n->alias_set = n->vuse = NULL_TREE;
diff --git a/gcc/testsuite/gcc.dg/pr96573.c b/gcc/testsuite/gcc.dg/pr96573.c
new file mode 100644
index 00000000000..3acf117f063
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr96573.c
@@ -0,0 +1,20 @@
+/* PR tree-optimization/96573 */
+/* { dg-do compile { target { lp64 || ilp32 } } } */
+/* { dg-require-effective-target bswap } */
+/* { dg-options "-O3 -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump "__builtin_bswap" "optimized" } } */
+
+typedef __SIZE_TYPE__ size_t;
+
+void *
+foo (void * const p)
+{
+ const size_t m = sizeof (p) - 1;
+ const unsigned char * const o = (unsigned char*) &p;
+ void *n;
+ unsigned char * const q = (unsigned char *) &n;
+ unsigned char i;
+ for (i = 0; i <= m; ++i)
+ q[m - i] = o[i];
+ return n;
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-04-01 8:52 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-01 8:52 [gcc r11-7946] bswap: Handle bswapping of pointers [PR96573] Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).