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).