https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67438

--- Comment #15 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Yuri Rumyantsev from comment #11)
> Richard proposed to use the same simplification for min/max operations but
> in original test-case nested min/max operation (min(x,min(y,z)) or multi
> operand min/max (min(x,y,z)) are not recognized by gcc (Note that icc does
> such transformation) and so this won't help since we have the same register
> pressure issue:
>     c = ~r; 
>     m = ~g;
>     y = ~b;
>     k = min(c, m, y);
>     *out++ = c - k;
>     *out++ = m - k;
>     *out++ = y - k;
>     *out++ = k;

This is now recognized since GCC 13 (by r13-1950-g9bb19e143cfe88 and improved
for GCC 14 by r14-337-gc43819a9b4cdaa).

Now there is a missing MIN/MAX detection still:
int f(int a, int b, int c)
{
        int at = ~a;
        int bt = ~b;
        int ct = ~c;
        int t = a < b ? at : bt;
        return t;        
}

Which is not detected until phiopt4. I will file a bug about that.
I think once that is fixed I think we might be able to remove the single_use
again.

Reply via email to