]> gcc.gnu.org Git - gcc.git/commitdiff
vect: Simplify first for shifted value generation [PR107240]
authorKewen Lin <linkw@linux.ibm.com>
Thu, 20 Oct 2022 09:07:05 +0000 (04:07 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Thu, 20 Oct 2022 09:07:05 +0000 (04:07 -0500)
As PR107240 shows, when both the value to be shifted and the
count used for shifting are constants, it can be simplified
to one constant value, and doesn't actually require to check
if the current target supports vector shift operations or not.

This patch uses a canonical way proposed by Richi to generate
the shifted value, if it can be simplified, the shift operation
would be gone, otherwise it's the same as before.

It can help to fix the failures of vect-bitfield-write-{2,3}.c
on Power.

PR tree-optimization/107240

2022-10-20  Richard Biener  <rguenther@suse.de>

gcc/ChangeLog:

* tree-vect-patterns.cc (vect_recog_bit_insert_pattern): Attempt to
simplify shifted value first.

gcc/tree-vect-patterns.cc

index 6afd57a50c4bcb5aec7ccca6e5dc069caa4a5a30..d18e1e609969bfc601c41bb17b683660895b3dec 100644 (file)
@@ -2098,11 +2098,12 @@ vect_recog_bit_insert_pattern (vec_info *vinfo, stmt_vec_info stmt_info,
   tree shifted = value;
   if (shift_n)
     {
-      pattern_stmt
-       = gimple_build_assign (vect_recog_temp_ssa_var (container_type),
-                              LSHIFT_EXPR, value, shift);
-      append_pattern_def_seq (vinfo, stmt_info, pattern_stmt);
-      shifted = gimple_get_lhs (pattern_stmt);
+      gimple_seq stmts = NULL;
+      shifted
+       = gimple_build (&stmts, LSHIFT_EXPR, container_type, value, shift);
+      if (!gimple_seq_empty_p (stmts))
+       append_pattern_def_seq (vinfo, stmt_info,
+                               gimple_seq_first_stmt (stmts));
     }
 
   tree mask_t
This page took 0.068628 seconds and 5 git commands to generate.