commit:     2d962d0ca362f375f13b52ed638a2b183b4cb062
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Nov 18 10:39:22 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Nov 18 10:39:22 2024 +0000
URL:        https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=2d962d0c

15.0.0: add 73_all_PR117646-match-Fix-the-max-a-b-0-pattern-for-pointers.patch

Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...ch-Fix-the-max-a-b-0-pattern-for-pointers.patch | 83 ++++++++++++++++++++++
 15.0.0/gentoo/README.history                       |  4 ++
 2 files changed, 87 insertions(+)

diff --git 
a/15.0.0/gentoo/73_all_PR117646-match-Fix-the-max-a-b-0-pattern-for-pointers.patch
 
b/15.0.0/gentoo/73_all_PR117646-match-Fix-the-max-a-b-0-pattern-for-pointers.patch
new file mode 100644
index 0000000..c0ab935
--- /dev/null
+++ 
b/15.0.0/gentoo/73_all_PR117646-match-Fix-the-max-a-b-0-pattern-for-pointers.patch
@@ -0,0 +1,83 @@
+From 45a3277149d95a51cf9109cab87ee39a7dce73e2 Mon Sep 17 00:00:00 2001
+Message-ID: 
<45a3277149d95a51cf9109cab87ee39a7dce73e2.1731926298.git....@gentoo.org>
+From: Andrew Pinski <[email protected]>
+Date: Sun, 17 Nov 2024 20:21:58 -0800
+Subject: [PATCH] match: Fix the `max<a,b>==0` pattern for pointers [PR117646]
+
+For pointers I forgot that BIT_IOR_EXPR is not valid so when
+I added the pattern to convert `max<a,b> != 0` (r15-5356), GCC
+would start to ICEing saying pointer types were not valid for
+BIT_IOR_EXPR.
+This fixes the problem by casting to the unsigned type of the
+inner type. There was another way of fixing this to handling it
+as `a == 0 & b == 0` but both match and reassoication (for pointers)
+will then convert it back into the form I am creating here so
+let's just use that form instead.
+
+Bootstrapped and tested on x86_64-linux-gnu.
+
+       PR tree-optimization/117646
+
+gcc/ChangeLog:
+
+       * match.pd (`max<a,b>==0`): Add casts to `unsigned type`.
+
+gcc/testsuite/ChangeLog:
+
+       * gcc.dg/torture/minmaxneeqptr-1.c: New test.
+
+Signed-off-by: Andrew Pinski <[email protected]>
+---
+ gcc/match.pd                                  |  6 ++++--
+ .../gcc.dg/torture/minmaxneeqptr-1.c          | 21 +++++++++++++++++++
+ 2 files changed, 25 insertions(+), 2 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.dg/torture/minmaxneeqptr-1.c
+
+diff --git a/gcc/match.pd b/gcc/match.pd
+index 4bec24a21b29..f5181325f3b9 100644
+--- a/gcc/match.pd
++++ b/gcc/match.pd
+@@ -4799,9 +4799,11 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
+    MAX (A, B) != 0 -> (A|B) != 0 iff unsigned.  */
+ (for cmp (eq ne)
+  (simplify
+-  (cmp (max @0 @1) integer_zerop@2)
++  (cmp (max @0 @1) integer_zerop)
+   (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
+-   (cmp (bit_ior @0 @1) @2))))
++   (with { tree utype = unsigned_type_for (TREE_TYPE (@0)); }
++    (cmp (bit_ior (convert:utype @0) (convert:utype @1))
++         { build_zero_cst (utype); } )))))
+ 
+ /* Undo fancy ways of writing max/min or other ?: expressions, like
+    a - ((a - b) & -(a < b))  and  a - (a - b) * (a < b) into (a < b) ? b : a.
+diff --git a/gcc/testsuite/gcc.dg/torture/minmaxneeqptr-1.c 
b/gcc/testsuite/gcc.dg/torture/minmaxneeqptr-1.c
+new file mode 100644
+index 000000000000..aa45722330f4
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/torture/minmaxneeqptr-1.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++
++/* PR tree-optimization/117646 */
++
++int maxeq(char *a, char *b) {
++  char *p = a < b ? b : a;
++  return p == (void*)0;
++}
++int maxne(char *a, char *b) {
++  char *p = a < b ? b : a;
++  return p == (void*)0;
++}
++
++int mineq(char *a, char *b) {
++  char *p = a > b ? b : a;
++  return p == (void*)0;
++}
++int minne(char *a, char *b) {
++  char *p = a > b ? b : a;
++  return p == (void*)0;
++}
+-- 
+2.47.0
+

diff --git a/15.0.0/gentoo/README.history b/15.0.0/gentoo/README.history
index af598af..df484a6 100644
--- a/15.0.0/gentoo/README.history
+++ b/15.0.0/gentoo/README.history
@@ -1,3 +1,7 @@
+26     18 November 2024
+
+       + 73_all_PR117646-match-Fix-the-max-a-b-0-pattern-for-pointers.patch
+
 25     18 November 2024
 
        + 72_all_PR117628-libgcc-c23.patch

Reply via email to