]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[committed] Disable ABS instruction on bfin port
authorJeff Law <jlaw@ventanamicro.com>
Wed, 5 Feb 2025 21:22:33 +0000 (14:22 -0700)
committerJeff Law <jlaw@ventanamicro.com>
Wed, 5 Feb 2025 21:22:53 +0000 (14:22 -0700)
I was looking at a regression on the bfin port with a recent change to the IRA
and stumbled across this just doing a general port healthyness evaluation.

The ABS instruction in the blackfin ISA is defined as saturating on INT_MIN,
which is a bit unexpected.  We certainly can't use it when -fwrapv is enabled.
Given the failures on the C23 uabs tests, I'm inclined to just disable the
pattern completely.

Fixes pr23047, uabs-2 and uabs-3.

While it's not a regression, it's the blackfin port, so I think we've got a
higher degree of freedom here.

Pushing to the trunk.

gcc/
* config/bfin/bfin.md (abssi): Disable pattern.

gcc/config/bfin/bfin.md

index 810bd52cadf00bd370c7e552168533073ade56c8..27c156b6c1e81b05c663c1781f06438df0c52853 100644 (file)
   "%0 = min(%1,%2)%!"
   [(set_attr "type" "dsp32")])
 
-(define_insn "abssi2"
-  [(set (match_operand:SI 0 "register_operand" "=d")
-       (abs:SI (match_operand:SI 1 "register_operand" "d")))]
-  ""
-  "%0 = abs %1%!"
-  [(set_attr "type" "dsp32")])
+;; The ABS instruction is defined as saturating.  So at the least
+;; it is inappropriate for -fwrapv.  This also fixes the C23 uabs
+;; tests.
+;;(define_insn "abssi2"
+;;  [(set (match_operand:SI 0 "register_operand" "=d")
+;;     (abs:SI (match_operand:SI 1 "register_operand" "d")))]
+;;  ""
+;;  "%0 = abs %1%!"
+;;  [(set_attr "type" "dsp32")])
 
 (define_insn "ssabssi2"
   [(set (match_operand:SI 0 "register_operand" "=d")