[committed] Disable ABS instruction on bfin port

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.
This commit is contained in:
Jeff Law 2025-02-05 14:22:33 -07:00
parent 198f4df07d
commit 3e08a4ecea

View file

@ -1440,12 +1440,15 @@
"%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")