From 140ee00a961fda084c1b4b3f0e7e489a917858f7 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 20 Nov 2019 11:12:48 +0000 Subject: [PATCH] tree-vect-slp.c (vect_analyze_slp_instance): Dump constructors we are actually analyzing. 2019-11-20 Richard Biener * tree-vect-slp.c (vect_analyze_slp_instance): Dump constructors we are actually analyzing. (vect_slp_check_for_constructors): Do not vectorize uniform constuctors, do not dump here. * gcc.dg/vect/bb-slp-42.c: Adjust. * gcc.dg/vect/bb-slp-40.c: Likewise. From-SVN: r278495 --- gcc/ChangeLog | 7 +++++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.dg/vect/bb-slp-40.c | 2 +- gcc/testsuite/gcc.dg/vect/bb-slp-42.c | 5 ++-- gcc/tree-vect-slp.c | 39 ++++++++++++--------------- 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 796056ed945..eacaee3638c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-11-20 Richard Biener + + * tree-vect-slp.c (vect_analyze_slp_instance): Dump + constructors we are actually analyzing. + (vect_slp_check_for_constructors): Do not vectorize uniform + constuctors, do not dump here. + 2019-11-20 Richard Biener PR tree-optimization/92537 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a4de5d1e0b7..057b5d609ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-11-20 Richard Biener + + * gcc.dg/vect/bb-slp-42.c: Adjust. + * gcc.dg/vect/bb-slp-40.c: Likewise. + 2019-11-20 Richard Biener PR tree-optimization/92537 diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-40.c b/gcc/testsuite/gcc.dg/vect/bb-slp-40.c index ecdaf830c12..ce5a75c979c 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-40.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-40.c @@ -30,5 +30,5 @@ void foo(void) } /* See that we vectorize an SLP instance. */ -/* { dg-final { scan-tree-dump "Found vectorizable constructor" "slp1" } } */ +/* { dg-final { scan-tree-dump "Analyzing vectorizable constructor" "slp1" } } */ /* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "slp1" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-42.c b/gcc/testsuite/gcc.dg/vect/bb-slp-42.c index 091a273d2af..1dfa301184a 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-42.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-42.c @@ -44,6 +44,5 @@ main () } -/* See that we vectorize an SLP instance. */ -/* { dg-final { scan-tree-dump "Found vectorizable constructor" "slp1" { target { ! vect_fully_masked } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "slp1" { target { ! vect_fully_masked } } } } */ +/* See that we do not try to vectorize the uniform CTORs. */ +/* { dg-final { scan-tree-dump-not "Analyzing vectorizable constructor" "slp1" } } */ diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 75d788051c1..36ea0b1dffb 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2183,6 +2183,10 @@ vect_analyze_slp_instance (vec_info *vinfo, else return false; } + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "Analyzing vectorizable constructor: %G\n", + stmt_info->stmt); } else { @@ -3116,31 +3120,22 @@ vect_slp_check_for_constructors (bb_vec_info bb_vinfo) gimple_stmt_iterator gsi; for (gsi = bb_vinfo->region_begin; - gsi_stmt (gsi) != gsi_stmt (bb_vinfo->region_end); gsi_next (&gsi)) + gsi_stmt (gsi) != gsi_stmt (bb_vinfo->region_end); gsi_next (&gsi)) { - gimple *stmt = gsi_stmt (gsi); - - if (is_gimple_assign (stmt) - && gimple_assign_rhs_code (stmt) == CONSTRUCTOR - && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME - && TREE_CODE (TREE_TYPE (gimple_assign_lhs (stmt))) == VECTOR_TYPE) - { - tree rhs = gimple_assign_rhs1 (stmt); - - if (CONSTRUCTOR_NELTS (rhs) == 0) - continue; - - poly_uint64 subparts = TYPE_VECTOR_SUBPARTS (TREE_TYPE (rhs)); + gassign *stmt = dyn_cast (gsi_stmt (gsi)); + if (!stmt || gimple_assign_rhs_code (stmt) != CONSTRUCTOR) + continue; - if (maybe_ne (subparts, CONSTRUCTOR_NELTS (rhs))) - continue; + tree rhs = gimple_assign_rhs1 (stmt); + if (!VECTOR_TYPE_P (TREE_TYPE (rhs)) + || maybe_ne (TYPE_VECTOR_SUBPARTS (TREE_TYPE (rhs)), + CONSTRUCTOR_NELTS (rhs)) + || VECTOR_TYPE_P (TREE_TYPE (CONSTRUCTOR_ELT (rhs, 0)->value)) + || uniform_vector_p (rhs)) + continue; - if (dump_enabled_p ()) - dump_printf_loc (MSG_NOTE, vect_location, - "Found vectorizable constructor: %G\n", stmt); - stmt_vec_info stmt_info = bb_vinfo->lookup_stmt (stmt); - BB_VINFO_GROUPED_STORES (bb_vinfo).safe_push (stmt_info); - } + stmt_vec_info stmt_info = bb_vinfo->lookup_stmt (stmt); + BB_VINFO_GROUPED_STORES (bb_vinfo).safe_push (stmt_info); } } -- 2.30.2