public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Gabriel Ravier <gabravier@gmail.com>
To: Stefan Kanthak <stefan.kanthak@nexgo.de>, gcc@gnu.org
Subject: Re: Will GCC eventually learn to use BSR or even TZCNT on AMD/Intel processors?
Date: Mon, 5 Jun 2023 13:35:22 +0200	[thread overview]
Message-ID: <5fe1271b-18f5-6faa-d48d-669c87bbd893@gmail.com> (raw)
In-Reply-To: <5982A5DF4D694B4EA971B2597E833FC6@H270>

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.


  parent reply	other threads:[~2023-06-05 11:35 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-05 10:17 Stefan Kanthak
2023-06-05 10:33 ` Jonathan Wakely
2023-06-05 11:35 ` Gabriel Ravier [this message]
2023-06-05 22:23   ` Dave Blanchard
2023-06-05 23:59     ` Gabriel Ravier
2023-06-06  0:09       ` Dave Blanchard
2023-06-06  0:28         ` Gabriel Ravier
2023-06-06  0:28         ` Paul Koning
2023-06-06  7:57         ` Jonathan Wakely
2023-06-06  8:31         ` David Brown
2023-06-05 12:55 Julian Waters
2023-06-06  8:36 Julian Waters
2023-06-06 12:53 ` Paul Smith
2023-06-06 15:37   ` David Brown
2023-06-06 17:39     ` David Edelsohn
2023-06-06 18:43       ` Arsen Arsenović
2023-06-08 11:36         ` Mark Wielaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5fe1271b-18f5-6faa-d48d-669c87bbd893@gmail.com \
    --to=gabravier@gmail.com \
    --cc=gcc@gnu.org \
    --cc=stefan.kanthak@nexgo.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).