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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |ASSIGNED

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
The SLP reorgs made making this testcase target agnostic really really hard. 
It was supposed to test multiplication vectorization but now tests nothing.  I
don't see how to reliably test this unless we scan for details in the
vectorizer
dumps that are prone to change.  Currently we have for example
on x86_64:

/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
SLPing BB part
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
------>vectorizing SLP node starting from: _5 = x_48(D) + 1;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand x_48(D), type of def: external
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand 1, type of def: constant
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
transform binary/unary operation.
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
created new init_stmt: vect_cst__63 = _42;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
created new init_stmt: vect_cst__12 = { 1, 1, 1, 1 };
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
add new stmt: vect__5.19_13 = vect_cst__63 + vect_cst__12;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
------>vectorizing SLP node starting from: _6 = _5 * a0_44;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand x_48(D) + 1, type of def: internal
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: vectype vector(4) unsigned int
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand _1 + 23, type of def: external
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
transform binary/unary operation.
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
created new init_stmt: vect_cst__71 = _70;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
add new stmt: vect__6.20_72 = vect__5.19_13 * vect_cst__71;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
------>vectorizing SLP node starting from: out[0] = _6;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand _5 * a0_44, type of def: internal
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: vectype vector(4) unsigned int
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand _7 * a1_45, type of def: internal
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand _5 * a2_46, type of def: internal
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vect_is_simple_use: operand _7 * a3_47, type of def: internal
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
transform store. ncopies = 1
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
create vector_type-pointer variable to type: vector(4) unsigned int 
vectorizing a pointer ref: out[0]
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
created &out[0]
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
add new stmt: MEM <vector(4) unsigned int> [(unsigned int *)&out] =
vect__6.20_72;
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14: note:
vectorizing stmts using SLP.
/home/rguenther/src/trunk/gcc/testsuite/gcc.dg/vect/bb-slp-22.c:35:14:
optimized: basic block part vectorized using 16 byte vectors

we could match 'vectorizing SLP node starting from: _6 = _5 * a0_44;

which means we are actually vectorizing a multiplication.  Like with
the following.  Rainer - can you test this?

diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-22.c
b/gcc/testsuite/gcc.dg/vect/bb-slp-22.c
index 6dc2375f5d1..f25a225666e 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-22.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-22.c
@@ -63,6 +63,6 @@ int main (void)
   return 0;
 }

-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2"  {
target { ! {vect_int_mult } } } } } */
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp2"  {
target vect_int_mult  } } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp2" } } */
+/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: _\[0-9\]+
= _\[0-9\]+ \\\* a0" "slp2"  { target vect_int_mult } } } */

Reply via email to