https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122998
Jeffrey A. Law <law at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2025-12-07
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
--- Comment #1 from Jeffrey A. Law <law at gcc dot gnu.org> ---
I suspect fixing this likely requires work in gimple.
;; basic block 2, loop depth 0
;; pred: ENTRY
_6 = .SUB_OVERFLOW (x_4(D), y_5(D));
_2 = IMAGPART_EXPR <_6>;
if (_2 != 0)
goto <bb 4>; [21.72%]
else
goto <bb 3>; [78.28%]
;; succ: 4
;; 3
;; basic block 3, loop depth 0
;; pred: 2
_1 = REALPART_EXPR <_6>;
;; succ: 4
;; basic block 4, loop depth 0
;; pred: 2
;; 3
# _3 = PHI <291(2), _1(3)>
return _3;
In that form there's really nothing to do. The subtraction is speculative and
it's going to be fairly hard to sink the subtraction later in the RTL pipeline.