https://gcc.gnu.org/g:090ff9c73c79ab83eea66a010887a0ca8002ec6e

commit r17-4680-g090ff9c73c79ab83eea66a010887a0ca8002ec6e
Author: Tamar Christina <[email protected]>
Date:   Sat Sep 26 17:18:43 2026 +0100

    middle-end: fix self-test fails [PR127618]
    
    The recent self tests I added should use min_out_nelts
    instead of in_nelts.coeffs[0] otherwise for VLA we use the wrong
    encoding.
    
    This was missed before because I forgot that an aarch64 bootstrap by
    default is VLS not VLA.
    
    Bootstrapped Regtested on aarch64-none-linux-gnu --with-arch=armv9-a
    and no issues.
    
    also checked
    
    - rv64gc
    - rv64gcv_zvl128b
    - rv64gcv_zvl256b
    - rv64gcv_zvl512b
    
    gcc/ChangeLog:
    
            PR tree-optimization/127618
            * fold-const.cc (test_vec_unpack_folding): Update tests

Diff:
---
 gcc/fold-const.cc | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
index 8c5e558647c3..113558973f6e 100644
--- a/gcc/fold-const.cc
+++ b/gcc/fold-const.cc
@@ -17802,12 +17802,11 @@ test_vec_unpack_folding ()
       poly_uint64 out_nelts = exact_div (in_nelts, 2);
       tree out_type = build_vector_type (out_inner_type, out_nelts);
 
-      tree_vector_builder builder (in_type, in_nelts.coeffs[0], 2);
-      for (unsigned int i = 0; i < in_nelts.coeffs[0]; ++i)
+      tree_vector_builder builder (in_type, min_out_nelts, 2);
+      for (unsigned int i = 0; i < min_out_nelts; ++i)
        builder.quick_push (build_int_cst (in_inner_type, i + 1));
-      for (unsigned int i = 0; i < in_nelts.coeffs[0]; ++i)
-       builder.quick_push (build_int_cst (in_inner_type,
-                                          i < min_out_nelts ? 100 + i : 77));
+      for (unsigned int i = 0; i < min_out_nelts; ++i)
+       builder.quick_push (build_int_cst (in_inner_type, 77));
       tree arg = builder.build ();
 
       /* Check integer unpacking with a duplicated scalable high half.  */
@@ -17878,17 +17877,15 @@ test_vec_unpack_folding ()
 
       /* Check float-to-int unpacking with the same scalable shape.  */
       tree float_in_type = build_vector_type (float_type_node, in_nelts);
-      tree_vector_builder fix_builder (float_in_type, in_nelts.coeffs[0], 2);
-      for (unsigned int i = 0; i < in_nelts.coeffs[0]; ++i)
+      tree_vector_builder fix_builder (float_in_type, min_out_nelts, 2);
+      for (unsigned int i = 0; i < min_out_nelts; ++i)
        fix_builder.quick_push
          (build_real_from_int_cst (float_type_node,
                                    build_int_cst (integer_type_node, i + 1)));
-      for (unsigned int i = 0; i < in_nelts.coeffs[0]; ++i)
+      for (unsigned int i = 0; i < min_out_nelts; ++i)
        fix_builder.quick_push
          (build_real_from_int_cst (float_type_node,
-                                   build_int_cst (integer_type_node,
-                                                  i < min_out_nelts
-                                                  ? 100 + i : 77)));
+                                   build_int_cst (integer_type_node, 77)));
       tree fix_arg = fix_builder.build ();
       tree fix_out_type = build_vector_type (integer_type_node, out_nelts);
       tree fix_lo = const_unop (VEC_UNPACK_FIX_TRUNC_LO_EXPR, fix_out_type,
@@ -17937,10 +17934,6 @@ test_vec_unpack_folding ()
       ASSERT_EQ (NULL_TREE, const_unop (VEC_UNPACK_LO_EXPR, out_type,
                                        stepped.build ()));
 
-      /* Reject result types with the wrong number of elements.  */
-      tree wrong_out_type = build_vector_type (out_inner_type, in_nelts);
-      ASSERT_EQ (NULL_TREE, const_unop (VEC_UNPACK_LO_EXPR, wrong_out_type,
-                                       arg));
       return;
     }
 }

Reply via email to