commit:     3f4aa6c706b52c74e689588667597255dd1007e0
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 14 15:05:17 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Jan 14 15:05:58 2025 +0000
URL:        https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=3f4aa6c7

15.0.0: add patch to fix m68k cross

This is already in trunk but I want to backport it (no revbump though
given it stops the build w/ checking).

Bug: https://gcc.gnu.org/PR118418
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...-Fix-build-for-STORE_FLAG_VALUE-0-targets.patch | 87 ++++++++++++++++++++++
 15.0.0/gentoo/README.history                       |  4 +
 2 files changed, 91 insertions(+)

diff --git 
a/15.0.0/gentoo/86_all_PR118418-Fix-build-for-STORE_FLAG_VALUE-0-targets.patch 
b/15.0.0/gentoo/86_all_PR118418-Fix-build-for-STORE_FLAG_VALUE-0-targets.patch
new file mode 100644
index 0000000..ce0b338
--- /dev/null
+++ 
b/15.0.0/gentoo/86_all_PR118418-Fix-build-for-STORE_FLAG_VALUE-0-targets.patch
@@ -0,0 +1,87 @@
+From a1a14ce3c39c25fecf052ffde063fc0ecfc2ffa3 Mon Sep 17 00:00:00 2001
+Message-ID: 
<a1a14ce3c39c25fecf052ffde063fc0ecfc2ffa3.1736867096.git....@gentoo.org>
+From: Richard Sandiford <richard.sandif...@arm.com>
+Date: Mon, 13 Jan 2025 19:37:12 +0000
+Subject: [PATCH] Fix build for STORE_FLAG_VALUE<0 targets [PR118418]
+
+In g:06c4cf398947b53b4bfc65752f9f879bb2d07924 I mishandled signed
+comparisons of comparison results on STORE_FLAG_VALUE < 0 targets
+(despite specifically referencing STORE_FLAG_VALUE in the commit
+message).  There, (lt TRUE FALSE) is true, although (ltu FALSE TRUE)
+still holds.
+
+Things get messy with vector modes, and since those weren't the focus
+of the original commit, it seemed better to punt on them for now.
+However, punting means that this optimisation no longer feels like
+a natural tail-call operation.  The patch therefore converts
+"return simplify..." to the usual call-and-conditional-return pattern.
+
+gcc/
+       PR target/118418
+       * simplify-rtx.cc (simplify_context::simplify_relational_operation_1):
+       Take STORE_FLAG_VALUE into account when handling signed comparisons
+       of comparison results.
+---
+ gcc/simplify-rtx.cc | 39 ++++++++++++++++++++++++---------------
+ 1 file changed, 24 insertions(+), 15 deletions(-)
+
+diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
+index 71c5d3c1b1b8..dda8fc689e79 100644
+--- a/gcc/simplify-rtx.cc
++++ b/gcc/simplify-rtx.cc
+@@ -6434,7 +6434,7 @@ simplify_context::simplify_relational_operation_1 
(rtx_code code,
+       return simplify_gen_binary (AND, mode, XEXP (tmp, 0), const1_rtx);
+     }
+ 
+-  /* For two booleans A and B:
++  /* For two unsigned booleans A and B:
+ 
+      A >  B == ~B & A
+      A >= B == ~B | A
+@@ -6443,20 +6443,29 @@ simplify_context::simplify_relational_operation_1 
(rtx_code code,
+      A == B == ~A ^ B (== ~B ^ A)
+      A != B ==  A ^ B
+ 
+-     simplify_logical_relational_operation checks whether A and B
+-     are booleans.  */
+-  if (code == GTU || code == GT)
+-    return simplify_logical_relational_operation (AND, mode, op1, op0, true);
+-  if (code == GEU || code == GE)
+-    return simplify_logical_relational_operation (IOR, mode, op1, op0, true);
+-  if (code == LTU || code == LT)
+-    return simplify_logical_relational_operation (AND, mode, op0, op1, true);
+-  if (code == LEU || code == LE)
+-    return simplify_logical_relational_operation (IOR, mode, op0, op1, true);
+-  if (code == EQ)
+-    return simplify_logical_relational_operation (XOR, mode, op0, op1, true);
+-  if (code == NE)
+-    return simplify_logical_relational_operation (XOR, mode, op0, op1);
++     For signed comparisons, we have to take STORE_FLAG_VALUE into account,
++     with the rules above applying for positive STORE_FLAG_VALUE and with
++     the relations reversed for negative STORE_FLAG_VALUE.  */
++  if (is_a<scalar_int_mode> (cmp_mode)
++      && COMPARISON_P (op0)
++      && COMPARISON_P (op1))
++    {
++      rtx t = NULL_RTX;
++      if (code == GTU || code == (STORE_FLAG_VALUE > 0 ? GT : LT))
++      t = simplify_logical_relational_operation (AND, mode, op1, op0, true);
++      else if (code == GEU || code == (STORE_FLAG_VALUE > 0 ? GE : LE))
++      t = simplify_logical_relational_operation (IOR, mode, op1, op0, true);
++      else if (code == LTU || code == (STORE_FLAG_VALUE > 0 ? LT : GT))
++      t = simplify_logical_relational_operation (AND, mode, op0, op1, true);
++      else if (code == LEU || code == (STORE_FLAG_VALUE > 0 ? LE : GE))
++      t = simplify_logical_relational_operation (IOR, mode, op0, op1, true);
++      else if (code == EQ)
++      t = simplify_logical_relational_operation (XOR, mode, op0, op1, true);
++      else if (code == NE)
++      t = simplify_logical_relational_operation (XOR, mode, op0, op1);
++      if (t)
++      return t;
++    }
+ 
+   return NULL_RTX;
+ }
+-- 
+2.48.0
+

diff --git a/15.0.0/gentoo/README.history b/15.0.0/gentoo/README.history
index e33ee2c..1d5c985 100644
--- a/15.0.0/gentoo/README.history
+++ b/15.0.0/gentoo/README.history
@@ -1,3 +1,7 @@
+40     14 January 2025
+
+       + 86_all_PR118418-Fix-build-for-STORE_FLAG_VALUE-0-targets.patch
+
 39     14 January 2025
 
        U 80_all_PR81358-Enable-automatic-linking-of-libatomic.patch

Reply via email to