]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[committed] Fix subdi3 synthesis on rx port
authorJeff Law <jlaw@ventanamicro.com>
Fri, 11 Aug 2023 21:52:57 +0000 (15:52 -0600)
committerJeff Law <jlaw@ventanamicro.com>
Fri, 11 Aug 2023 21:54:12 +0000 (15:54 -0600)
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

index 6959c6095c664be8e6bfd3c03c33f3ecea215bef..f6b13b92aa5633b801e44e38d196b2dac61dc5cc 100644 (file)
          (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))]
   ""
   "#"