public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/110485] New: vectorizing simd clone calls without loop masking applied
@ 2023-06-29 12:21 rguenth at gcc dot gnu.org
  2023-07-02 21:10 ` [Bug tree-optimization/110485] " rsandifo at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-06-29 12:21 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 110485
           Summary: vectorizing simd clone calls without loop masking
                    applied
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rguenth at gcc dot gnu.org
  Target Milestone: ---

#include <math.h>

double a[1024];
double b[1024];

void foo (int n)
{
  for (int i = 0; i < n; ++i)
    a[i] = pow (b[i], 71.2);
}

with -Ofast -march=znver4 --param vect-partial-vector-usage=1 gets us
the following OK main loop

.L4:
        vmovapd b(%rbx), %zmm0
        vmovapd -112(%rbp), %zmm1
        addq    $64, %rbx
        call    _ZGVeN8vv_pow
        vmovapd %zmm0, a-64(%rbx)
        cmpq    %r13, %rbx
        jne     .L4

but the following vectorized masked epilogue:

        movl    %r12d, %eax
        andl    $-8, %eax
        testb   $7, %r12b
        je      .L13
.L3:
        subl    %eax, %r12d
        movl    %eax, %edx
        vmovapd -112(%rbp), %zmm1
        vpbroadcastw    %r12d, %xmm0
        leaq    0(,%rdx,8), %rbx
        vpcmpuw $6, .LC2(%rip), %xmm0, %k1
        vmovapd b(,%rdx,8), %zmm0{%k1}{z}
        kmovb   %k1, -113(%rbp)
        call    _ZGVeN8vv_pow
        kmovb   -113(%rbp), %k1
        vmovapd %zmm0, a(%rbx){%k1}

so we simply call _ZGVeN8vv_pow without any masking applied.  That's
possibly OK since we use zero-masking and thus actual masked argument
lanes are zero but it seems this isn't the expected behavior for
vectorizable_simd_clone_call.  Instead it should probably unconditionally
set LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) to false?

Is there a way to query which SIMD clone is "happy" with zero arguments
and thus for example with -ffast-math would be OK to run unmasked?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/110485] vectorizing simd clone calls without loop masking applied
  2023-06-29 12:21 [Bug tree-optimization/110485] New: vectorizing simd clone calls without loop masking applied rguenth at gcc dot gnu.org
@ 2023-07-02 21:10 ` rsandifo at gcc dot gnu.org
  2023-07-03  8:52 ` rguenth at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: rsandifo at gcc dot gnu.org @ 2023-07-02 21:10 UTC (permalink / raw)
  To: gcc-bugs

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

rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |avieira at gcc dot gnu.org

--- Comment #1 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> ---
I think Andre was looking at this area.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/110485] vectorizing simd clone calls without loop masking applied
  2023-06-29 12:21 [Bug tree-optimization/110485] New: vectorizing simd clone calls without loop masking applied rguenth at gcc dot gnu.org
  2023-07-02 21:10 ` [Bug tree-optimization/110485] " rsandifo at gcc dot gnu.org
@ 2023-07-03  8:52 ` rguenth at gcc dot gnu.org
  2023-10-19 17:31 ` cvs-commit at gcc dot gnu.org
  2023-12-05 14:25 ` rguenth at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-07-03  8:52 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Btw, the math.h header declares

__attribute__ ((__simd__ ("notinbranch"))) extern double pow (double __x,
double __y) __attribute__ ((__nothrow__ , __leaf__));

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/110485] vectorizing simd clone calls without loop masking applied
  2023-06-29 12:21 [Bug tree-optimization/110485] New: vectorizing simd clone calls without loop masking applied rguenth at gcc dot gnu.org
  2023-07-02 21:10 ` [Bug tree-optimization/110485] " rsandifo at gcc dot gnu.org
  2023-07-03  8:52 ` rguenth at gcc dot gnu.org
@ 2023-10-19 17:31 ` cvs-commit at gcc dot gnu.org
  2023-12-05 14:25 ` rguenth at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-10-19 17:31 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Andre Simoes Dias Vieira
<avieira@gcc.gnu.org>:

https://gcc.gnu.org/g:8b704ed0b8f35ec1a57e70bd8e6913ba0e9d1f24

commit r14-4765-g8b704ed0b8f35ec1a57e70bd8e6913ba0e9d1f24
Author: Andre Vieira <andre.simoesdiasvieira@arm.com>
Date:   Thu Oct 19 18:28:12 2023 +0100

    vect: don't allow fully masked loops with non-masked simd clones [PR
110485]

    When analyzing a loop and choosing a simdclone to use it is possible to
choose
    a simdclone that cannot be used 'inbranch' for a loop that can use partial
    vectors.  This may lead to the vectorizer deciding to use partial vectors
which
    are not supported for notinbranch simd clones.  This patch fixes that by
    disabling the use of partial vectors once a notinbranch simd clone has been
    selected.

    gcc/ChangeLog:

            PR tree-optimization/110485
            * tree-vect-stmts.cc (vectorizable_simd_clone_call): Disable
partial
            vectors usage if a notinbranch simdclone has been selected.

    gcc/testsuite/ChangeLog:

            * gcc.dg/gomp/pr110485.c: New test.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug tree-optimization/110485] vectorizing simd clone calls without loop masking applied
  2023-06-29 12:21 [Bug tree-optimization/110485] New: vectorizing simd clone calls without loop masking applied rguenth at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2023-10-19 17:31 ` cvs-commit at gcc dot gnu.org
@ 2023-12-05 14:25 ` rguenth at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-12-05 14:25 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
         Resolution|---                         |FIXED
             Status|UNCONFIRMED                 |RESOLVED
   Target Milestone|---                         |14.0

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
This has been fixed.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-12-05 14:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-29 12:21 [Bug tree-optimization/110485] New: vectorizing simd clone calls without loop masking applied rguenth at gcc dot gnu.org
2023-07-02 21:10 ` [Bug tree-optimization/110485] " rsandifo at gcc dot gnu.org
2023-07-03  8:52 ` rguenth at gcc dot gnu.org
2023-10-19 17:31 ` cvs-commit at gcc dot gnu.org
2023-12-05 14:25 ` rguenth at gcc dot gnu.org

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).