public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-8054] tree-optimization/105175 - avoid -Wvector-operation-performance
@ 2022-04-08  6:34 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2022-04-08  6:34 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:b789c44c6463452900f7b1e6d2a0af6567534bfc

commit r12-8054-gb789c44c6463452900f7b1e6d2a0af6567534bfc
Author: Richard Biener <rguenther@suse.de>
Date:   Wed Apr 6 11:18:12 2022 +0200

    tree-optimization/105175 - avoid -Wvector-operation-performance
    
    This avoids -Wvector-operation-performance diagnostics for vectorizer
    produced code.  It's unfortunate the warning_at code in
    tree-vect-generic.cc needs adjustments but the diagnostic suppression
    code doesn't magically suppress those otherwise.
    
    2022-04-06  Richard Biener  <rguenther@suse.de>
    
            PR tree-optimization/105175
            * tree-vect-stmts.cc (vectorizable_operation): Suppress
            -Wvector-operation-performance if using emulated vectors.
            * tree-vect-generic.cc (expand_vector_piecewise): Do not diagnose
            -Wvector-operation-performance when suppressed.
            (expand_vector_parallel): Likewise.
            (expand_vector_comparison): Likewise.
            (expand_vector_condition): Likewise.
            (lower_vec_perm): Likewise.
            (expand_vector_conversion): Likewise.
    
            * gcc.dg/pr105175.c: New testcase.

Diff:
---
 gcc/testsuite/gcc.dg/pr105175.c | 16 ++++++++++++++++
 gcc/tree-vect-generic.cc        | 41 +++++++++++++++++++++++++++--------------
 gcc/tree-vect-stmts.cc          |  2 ++
 3 files changed, 45 insertions(+), 14 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/pr105175.c b/gcc/testsuite/gcc.dg/pr105175.c
new file mode 100644
index 00000000000..d8d7edb942a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr105175.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wvector-operation-performance" } */
+/* { dg-additional-options "-mno-sse" { target x86_64-*-* i?86-*-* } } */
+
+enum { QEMU_MIGRATION_COOKIE_PERSISTENT = 1 };
+struct {
+  unsigned flags;
+  unsigned flagsMandatory;
+} qemuMigrationCookieGetPersistent_mig;
+void qemuMigrationCookieGetPersistent()
+{
+  qemuMigrationCookieGetPersistent_mig.flags &=  /* { dg-bogus "will be expanded" } */
+      QEMU_MIGRATION_COOKIE_PERSISTENT;
+  qemuMigrationCookieGetPersistent_mig.flagsMandatory &=
+      QEMU_MIGRATION_COOKIE_PERSISTENT;
+}
diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc
index 12a553ec8be..8b7227e8b58 100644
--- a/gcc/tree-vect-generic.cc
+++ b/gcc/tree-vect-generic.cc
@@ -317,8 +317,11 @@ expand_vector_piecewise (gimple_stmt_iterator *gsi, elem_op_func f,
   int i;
   location_t loc = gimple_location (gsi_stmt (*gsi));
 
-  if (nunits == 1)
-    /* Do not diagnose decomposing single element vectors.  */
+  if (nunits == 1
+      || warning_suppressed_p (gsi_stmt (*gsi),
+			       OPT_Wvector_operation_performance))
+    /* Do not diagnose decomposing single element vectors or when
+       decomposing vectorizer produced operations.  */
     ;
   else if (ret_type || !parallel_p)
     warning_at (loc, OPT_Wvector_operation_performance,
@@ -379,14 +382,16 @@ expand_vector_parallel (gimple_stmt_iterator *gsi, elem_op_func f, tree type,
   else
     {
       /* Use a single scalar operation with a mode no wider than word_mode.  */
+      if (!warning_suppressed_p (gsi_stmt (*gsi),
+				 OPT_Wvector_operation_performance))
+	warning_at (loc, OPT_Wvector_operation_performance,
+		    "vector operation will be expanded with a "
+		    "single scalar operation");
       scalar_int_mode mode
 	= int_mode_for_size (tree_to_uhwi (TYPE_SIZE (type)), 0).require ();
       compute_type = lang_hooks.types.type_for_mode (mode, 1);
       result = f (gsi, compute_type, a, b, bitsize_zero_node,
 		  TYPE_SIZE (compute_type), code, type);
-      warning_at (loc, OPT_Wvector_operation_performance,
-	          "vector operation will be expanded with a "
-		  "single scalar operation");
     }
 
   return result;
@@ -487,8 +492,10 @@ expand_vector_comparison (gimple_stmt_iterator *gsi, tree type, tree op0,
 
 	  if (TYPE_PRECISION (ret_inner_type) != 1)
 	    ret_inner_type = build_nonstandard_integer_type (1, 1);
-	  warning_at (loc, OPT_Wvector_operation_performance,
-		      "vector operation will be expanded piecewise");
+	  if (!warning_suppressed_p (gsi_stmt (*gsi),
+				     OPT_Wvector_operation_performance))
+	    warning_at (loc, OPT_Wvector_operation_performance,
+			"vector operation will be expanded piecewise");
 	  for (i = 0; i < nunits;
 	       i++, index = int_const_binop (PLUS_EXPR, index, part_width))
 	    {
@@ -1098,8 +1105,9 @@ expand_vector_condition (gimple_stmt_iterator *gsi, bitmap dce_ssa_names)
 
   /* TODO: try and find a smaller vector type.  */
 
-  warning_at (loc, OPT_Wvector_operation_performance,
-	      "vector condition will be expanded piecewise");
+  if (!warning_suppressed_p (stmt, OPT_Wvector_operation_performance))
+    warning_at (loc, OPT_Wvector_operation_performance,
+		"vector condition will be expanded piecewise");
 
   if (!a_is_comparison
       && VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (a))
@@ -1591,9 +1599,10 @@ lower_vec_perm (gimple_stmt_iterator *gsi)
     }
   else if (can_vec_perm_var_p (TYPE_MODE (vect_type)))
     return;
-  
-  warning_at (loc, OPT_Wvector_operation_performance,
-              "vector shuffling operation will be expanded piecewise");
+
+  if (!warning_suppressed_p (stmt, OPT_Wvector_operation_performance))
+    warning_at (loc, OPT_Wvector_operation_performance,
+		"vector shuffling operation will be expanded piecewise");
 
   vec_alloc (v, elements);
   bool constant_p = true;
@@ -2029,8 +2038,12 @@ expand_vector_conversion (gimple_stmt_iterator *gsi)
 	      location_t loc = gimple_location (gsi_stmt (*gsi));
 
 	      if (compute_type != arg_type)
-		warning_at (loc, OPT_Wvector_operation_performance,
-			    "vector operation will be expanded piecewise");
+		{
+		  if (!warning_suppressed_p (gsi_stmt (*gsi),
+					     OPT_Wvector_operation_performance))
+		    warning_at (loc, OPT_Wvector_operation_performance,
+				"vector operation will be expanded piecewise");
+		}
 	      else
 		{
 		  nunits = 1;
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index c0107c8c489..87368e3787b 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -6440,6 +6440,8 @@ vectorizable_operation (vec_info *vinfo,
 	  new_temp = make_ssa_name (vec_dest, new_stmt);
 	  gimple_assign_set_lhs (new_stmt, new_temp);
 	  vect_finish_stmt_generation (vinfo, stmt_info, new_stmt, gsi);
+	  if (using_emulated_vectors_p)
+	    suppress_warning (new_stmt, OPT_Wvector_operation_performance);
 
 	  /* Enter the combined value into the vector cond hash so we don't
 	     AND it with a loop mask again.  */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-08  6:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-08  6:34 [gcc r12-8054] tree-optimization/105175 - avoid -Wvector-operation-performance Richard Biener

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