https://gcc.gnu.org/g:49339d8b7e03a7ba0d4a5e118af993f175485b41

commit r15-2374-g49339d8b7e03a7ba0d4a5e118af993f175485b41
Author: Feng Xue <f...@os.amperecomputing.com>
Date:   Fri Jun 14 15:49:23 2024 +0800

    vect: Fix single_imm_use in tree_vect_patterns
    
    Since pattern statement coexists with normal statements in a way that it is
    not linked into function body, we should not invoke utility procedures that
    depends on def/use graph on pattern statement, such as counting uses of a
    pseudo value defined by a pattern statement. This patch is to fix a bug of
    this type in vect pattern formation.
    
    2024-06-14 Feng Xue <f...@os.amperecomputing.com>
    
    gcc/
            * tree-vect-patterns.cc (vect_recog_bitfield_ref_pattern): Only call
            single_imm_use if statement is not generated from pattern 
recognition.

Diff:
---
 gcc/tree-vect-patterns.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
index 5fbd1a4fa6b4..4674a16d15f4 100644
--- a/gcc/tree-vect-patterns.cc
+++ b/gcc/tree-vect-patterns.cc
@@ -2702,7 +2702,8 @@ vect_recog_bitfield_ref_pattern (vec_info *vinfo, 
stmt_vec_info stmt_info,
   /* If the only use of the result of this BIT_FIELD_REF + CONVERT is a
      PLUS_EXPR then do the shift last as some targets can combine the shift and
      add into a single instruction.  */
-  if (lhs && single_imm_use (lhs, &use_p, &use_stmt))
+  if (lhs && !is_pattern_stmt_p (stmt_info)
+      && single_imm_use (lhs, &use_p, &use_stmt))
     {
       if (gimple_code (use_stmt) == GIMPLE_ASSIGN
          && gimple_assign_rhs_code (use_stmt) == PLUS_EXPR)

Reply via email to