This is a small adjustment to the work done for PR108752 and
better reflects the cost of the generated sequence.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

        PR tree-optimization/108752
        * tree-vect-stmts.cc (vectorizable_operation): For bit
        operations with generic word_mode vectors do not cost
        an extra stmt.  For plus, minus and negate also cost the
        constant materialization.
---
 gcc/tree-vect-stmts.cc | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 0022b878767..127b987cd62 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -6466,8 +6466,8 @@ vectorizable_operation (vec_info *vinfo,
        {
          /* The above vect_model_simple_cost call handles constants
             in the prologue and (mis-)costs one of the stmts as
-            vector stmt.  See tree-vect-generic.cc:do_plus_minus/do_negate
-            for the actual lowering that will be applied.  */
+            vector stmt.  See below for the actual lowering that will
+            be applied.  */
          unsigned n
            = slp_node ? SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) : ncopies;
          switch (code)
@@ -6481,9 +6481,20 @@ vectorizable_operation (vec_info *vinfo,
            case NEGATE_EXPR:
              n *= 4;
              break;
-           default:;
+           default:
+             /* Bit operations do not have extra cost and are accounted
+                as vector stmt by vect_model_simple_cost.  */
+             n = 0;
+             break;
+           }
+         if (n != 0)
+           {
+             /* We also need to materialize two large constants.  */
+             record_stmt_cost (cost_vec, 2, scalar_stmt, stmt_info,
+                               0, vect_prologue);
+             record_stmt_cost (cost_vec, n, scalar_stmt, stmt_info,
+                               0, vect_body);
            }
-         record_stmt_cost (cost_vec, n, scalar_stmt, stmt_info, 0, vect_body);
        }
       return true;
     }
-- 
2.35.3

Reply via email to