From db08a096e4b19b91a7ec64f31a45549bb1f077ff Mon Sep 17 00:00:00 2001
From: Jeff Law <jlaw@ventanamicro.com>
Date: Fri, 11 Aug 2023 15:52:57 -0600
Subject: [PATCH] [committed] Fix subdi3 synthesis on rx port

Some of Andrew's recent match.pd changes triggered a regression in my tester
for the rx processor for c-torture/execute/pr66940.c which would be exposed
only during an LTO compilation.

Specifically the subdi3_internal pattern had the wrong idiom to detect a carry
from the high word into the low word.  It had the wrong opcode and the operands
were reversed.

This resulted in combine doing a simplification that was valid according to the
presented RTL, but which ultimately got the wrong result.

I would often say this was a latent bug.  But the testsuite shows
builtin-arith-overflow-14 and builtin-arith-overflow-p18 failures are fixed as
well.  So it's been visible indefinitely, but nobody's ever looked into those
failures.

Committed to the trunk.

gcc/
	* config/rx/rx.md (subdi3): Fix test for borrow.
---
 gcc/config/rx/rx.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md
index 6959c6095c66..f6b13b92aa56 100644
--- a/gcc/config/rx/rx.md
+++ b/gcc/config/rx/rx.md
@@ -1722,7 +1722,7 @@
 	  (minus:SI
 	    (match_operand:SI      4 "register_operand"   "  1, 1")
 	    (match_operand:SI      5 "rx_compare_operand" " rQ,rQ"))
-	  (geu:SI (match_dup 2) (match_dup 3))))
+	  (gtu:SI (match_dup 3) (match_dup 2))))
    (clobber (reg:CC CC_REG))]
   ""
   "#"
-- 
GitLab