On 6/5/23 12:17, Stefan Kanthak wrote:
--- failure.c ---
int _clz(unsigned long long argument) {
     return __builtin_clzll(argument);
}

int _ctz(unsigned long long argument) {
     return __builtin_ctzll(argument);
}
--- EOF ---

GCC 13.1    -m32 -mabm -mbmi -mlzcnt -O3 failure.c

<https://godbolt.org/z/MMf11hKch>
_clz(unsigned long long):
         mov     edx, DWORD PTR [esp+8]
         xor     ecx, ecx
         xor     eax, eax
         lzcnt   eax, DWORD PTR [esp+4]
         add     eax, 32
         lzcnt   ecx, edx
         test    edx, edx
         cmovne  eax, ecx
         ret
_ctz(unsigned long long):
         sub     esp, 20
         push    DWORD PTR [esp+28]
         push    DWORD PTR [esp+28]
         call    __ctzdi2
         add     esp, 28
         ret

OUCH: although EXPLICITLY enabled via -mabm (for AMD processors) and -mbmi
       (for Intel processors), GCC generates slowmotion code calling __ctzdi2()
       instead of TZCNT instructions available since 10 (in words: TEN) years.


GCC 13.1    -m32 -march=i386 -O3 failure.c

<https://godbolt.org/z/16ezfaexb>
_clz(unsigned long long):
         mov     edx, DWORD PTR [esp+4]
         mov     eax, DWORD PTR [esp+8]
         test    eax, eax
         je      .L2
         bsr     eax, eax
         xor     eax, 31
         ret
.L2:
         bsr     eax, edx
         xor     eax, 31
         lea     eax, [eax+32]
         ret
_ctz(unsigned long long):
         sub     esp, 20
         push    DWORD PTR [esp+28]
         push    DWORD PTR [esp+28]
         call    __ctzdi2
         add     esp, 28
         ret

OUCH²: the BSF/BSR instructions were introduced 38 (in words: THIRTY-EIGHT)
        years ago with the i386 processor, but GCC fails to know/use BSF --
        a real shame!

OUCH³: an optimising compiler would of course generate "JMP __ctzdi2" instead
        of code fiddling with the stack!

Stefan Kanthak


Hi,

While the optimization concerns your email raises appear to be genuine to some degree, I must admit to being quite clueless as to why, exactly, after at least 2 years of intermittently sending various seemingly quite incensed emails to this list, you appears not to have, at any point, questioned whether this method of action is in any way effective.

I myself have, too, made a hobby of investigating the capabilities of GCC's optimizer on various pieces of code, and trying to get it improved, by filing various appropriately formulated bugs in GCC's bugzilla whenever it seemed appropriate to do so (see e.g. https://gcc.gnu.org/PR94795, https://gcc.gnu.org/PR98957, https://gcc.gnu.org/PR102224 or https://gcc.gnu.org/PR104371 for what I believe to be pretty good examples of how to file such a bug).

I have not spent all this time sending various inflammatory emails to mailing lists not made for that purpose, and I am quite puzzled by the fact you appear to have concluded that doing so is appropriate. Should the page on GCC's website about the mailing lists perhaps contain a mention that the main mailing list is not made for spamming complaints about minor bugs ? I'd have figured it'd be self-evident, but evidently it seems this might perhaps be necessary...

Anyway, this leaves me with two more things I'd like to ask you about:

1. Why exactly are you so mad at GCC's optimizer and constantly belittle its capacities ? Did a GCC developer working on the optimizer destroy your hometown and salt the earth or something ? I also don't get why you put "optimizer" between quotes like that - is this supposed to imply calling GCC's optimizer as such is some insult to some hypothetical better optimizer ? (note: I say hypothetical because I haven't seen any optimizer that would be so much better than GCC's as to make it seem insultingly bad compared to it - Clang is comparable to GCC in its capacities but you also appear to hate it, given what I've seen elsewhere, and I'd expect other compilers like ICC and MSVC to be the ones that would be the butt of the joke here, given how poor they are compared to GCC and Clang...)

2. Are you aware that these emails are not only pretty useless, but potentially actively counterproductive ? I'd personally expect GCC developers, who are rightfully not particularly happy at the thought of having to constantly suffer your belittling emails, to at best actively ignore them - but even worse from what I presume would be your POV (that of someone who wants GCC's optimizer to improve), this constant spam might give rise to what would be a pretty reasonable response: to be biased against any proposed improvement that comes from or derives from your emails. Arguably, to not be biased against them would encourage you to keep sending more emails, which people do not want as of now.


PS: I hope you understand that I'm being somewhat generous when assuming you genuinely want to get GCC's optimizer to improve, and are simply failing to work effectively towards this goal. Someone else might instead think you're just a troll that uses this as a pretext to send inflammatory emails everywhere and waste the time of people like me.

Reply via email to