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

--- Comment #21 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Jakub Jelinek from comment #19)
> Created attachment 59273 [details]
> gcc15-pr116896-inc2.patch
> 
> I've tried to improve the signed int <=> case (the only one which doesn't
> use sbb and so needs two xors first), but unfortunately that doesn't seem to
> work at all, the IL is how I'd like to see it at the end, but then combine
> happily turns those *setcc_qi_slp back into *setcc_si_1_movzbl and removes
> the clear instructions.
> So, I think all we can do is some extra peephole2 to deal with it (though in
> the jp case it will have to use to movl $0, %reg).

:( The case of overoptimization...

> Thus, the important question is, do we want to perform the subtraction
> generally in SImode (i.e. the original patch without incremental ones plus
> some peephole2s) or QImode?  While auto x = y <=> z; return x; will return
> QImode, one can always also turn it into int/long through int ret; if (x <
> 0) ret = -1; else if (x > 0) ret = 1; else ret = 0; or similar and then
> there would be sbbb or subb followed by movsbl.

Let's do subtraction in QImode then.

Reply via email to