diff mbox series

[committed] Fix subdi3 synthesis on rx port

Message ID ce0a46f7-bc24-2585-dcd9-4b27a749bc16@gmail.com
State New
Headers show
Series [committed] Fix subdi3 synthesis on rx port | expand

Commit Message

Jeff Law Aug. 11, 2023, 9:55 p.m. UTC
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.

Jeff
commit db08a096e4b19b91a7ec64f31a45549bb1f077ff
Author: Jeff Law <jlaw@ventanamicro.com>
Date:   Fri Aug 11 15:52:57 2023 -0600

    [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.
diff mbox series

Patch

diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md
index 6959c6095c6..f6b13b92aa5 100644
--- a/gcc/config/rx/rx.md
+++ b/gcc/config/rx/rx.md
@@ -1722,7 +1722,7 @@  (define_insn_and_split "subdi3_internal"
 	  (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))]
   ""
   "#"