public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: Marc Glisse <marc.glisse@inria.fr>
To: Mathieu Malaterre <mathieu.malaterre@gmail.com>
Cc: gcc-help <gcc-help@gcc.gnu.org>
Subject: Re: missed: not vectorized: relevant phi not supported: found_14 = PHI <found_5(7), -1(15)>
Date: Thu, 19 Oct 2023 09:17:02 +0200 (CEST)	[thread overview]
Message-ID: <19a5df20-af1e-37b2-3a7d-e35bf4f1bcb1@inria.fr> (raw)
In-Reply-To: <CA+7wUszuVf12j2NLM_AYXDqiNS6R8WU6VZTVPs8P1cZw+GQknQ@mail.gmail.com>

On Thu, 19 Oct 2023, Mathieu Malaterre via Gcc-help wrote:

> After reading this SO post (*), I became curious as to what my gcc
> would do with the following code. It turns out that I cannot make any
> sense of the output:
>
> % gcc -fopt-info-missed -std=c11  -O3 -c generic.c
> generic.c:4:21: missed: couldn't vectorize loop
> generic.c:2:5: missed: not vectorized: relevant phi not supported:
> found_14 = PHI <found_5(7), 0(15)>

If you try again with a snapshot of gcc-14, it does vectorize, although 
the result doesn't seem as nice as what clang produces.
(in general I would also suggest adding -march=native or some recent arch)

> Doing a quick search did not reveal anything meaningful. If my
> understanding is correct this is a basic information level (not meant
> for GCC developers):
>
> * https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html#index-fopt-info
>
> So my question is: what should the following sentence indicates
>
> ...
> missed: not vectorized: relevant phi not supported: found_14 = PHI
> <found_5(7), -1(15)>
> ...

Some information is hard to translate to a user-understandable language 
that refers to source code, this deep in the optimization, although in 
this case the message is not very informative even for a gcc dev. 
-fdump-tree-vect-details generates a file with more information, but that 
can be hard to understand if you are not used to it.

In this loop, some variables are 16 bits (haystack, needle), while the 
reduction variable is 32 bits, and gcc has a hard time vectorizing mixed 
sizes (and it doesn't realize that 'found' could be narrowed). If you 
declare 'found' as 'short' instead, something different happens.

> % cat generic.c
> #include <stdint.h>
> int hasmatch(uint16_t needle, const uint16_t haystack[4]) {
>  int found = 0;
>  for (int i = 0; i < 4; ++i) {
>    if (needle == haystack[i]) {
>      found = 1;
>    }
>  }
>  return found;
> }
>
> (*) https://stackoverflow.com/questions/74803190/fastest-way-to-find-16bit-match-in-a-4-element-short-array
>
> Thanks !

-- 
Marc Glisse

  reply	other threads:[~2023-10-19  7:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-19  6:43 Mathieu Malaterre
2023-10-19  7:17 ` Marc Glisse [this message]
2023-10-19  8:12   ` Mathieu Malaterre
2023-10-19  8:42     ` Andrew Haley

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=19a5df20-af1e-37b2-3a7d-e35bf4f1bcb1@inria.fr \
    --to=marc.glisse@inria.fr \
    --cc=gcc-help@gcc.gnu.org \
    --cc=mathieu.malaterre@gmail.com \
    /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).