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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |jakub at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org
   Last reconfirmed|                            |2022-07-25
           Keywords|                            |openmp
   Target Milestone|---                         |13.0
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  It looks like bar.simdclone.0 () is not pure but bar () was pure,
so sth is amiss in the simd cloning pass here?  We have

vector(2) int foo.simdclone.0 ()
{
...
  # VUSE <.MEM_7>
  _1 = bar (0);

but at IPA we don't yet know bar() is pure (its IL writes to memory).  Likely
late local pure/cost discovery fixes that up and affects foo.simdclone.0 but
the simdclone decl for bar() is created earlier (but not adjusted?).  Should
local-pure-const also affect aliases/clones (are the simdclone clones even
visible properly to do this?).

I guess simply adjusting the simdclone decl from the vectorizer when detecting
the mismatch in virtual operands is too ugly.

vector(2) int foo.simdclone.0 ()
{
...
  # .MEM = VDEF <.MEM_7>
  vect__1.39_12 = bar.simdclone.0 (vect_cst__11);

Reply via email to