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