diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C b/gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C new file mode 100644 index 0000000000000000000000000000000000000000..978919363f40c42518da89ad60df7269812f593a --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=128" } */ + +int a, b; +short c; +void d(long e) { + for (int f = 0; f < b; f += 1) + for (short g = 0; g < c; g += 5) + a = (short)e; +} diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C b/gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C new file mode 100644 index 0000000000000000000000000000000000000000..c7244ef7390646cd4d13c7c87f9444217fd954d8 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=128" } */ + +int a, b, c; + +void foo(long e) { + for (int f = 0; f < b; f ++) + for (int g = 0; g < c; g ++) + a = (short)e; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr98177-1.c b/gcc/testsuite/gcc.target/aarch64/sve/pr98177-1.c new file mode 100644 index 0000000000000000000000000000000000000000..978919363f40c42518da89ad60df7269812f593a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr98177-1.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=128" } */ + +int a, b; +short c; +void d(long e) { + for (int f = 0; f < b; f += 1) + for (short g = 0; g < c; g += 5) + a = (short)e; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr98177-2.c b/gcc/testsuite/gcc.target/aarch64/sve/pr98177-2.c new file mode 100644 index 0000000000000000000000000000000000000000..c7244ef7390646cd4d13c7c87f9444217fd954d8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr98177-2.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -msve-vector-bits=128" } */ + +int a, b, c; + +void foo(long e) { + for (int f = 0; f < b; f ++) + for (int g = 0; g < c; g ++) + a = (short)e; +} diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 688538a4521c740d6982c23a4d3ea0e02c16f901..d6f1ffcd386c1e0b63cac21fabf8e5bad9be99ca 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -5278,8 +5278,8 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, int scalar_precision = GET_MODE_PRECISION (SCALAR_TYPE_MODE (scalar_type)); tree scalar_type_unsigned = make_unsigned_type (scalar_precision); - tree vectype_unsigned = build_vector_type - (scalar_type_unsigned, TYPE_VECTOR_SUBPARTS (vectype)); + tree vectype_unsigned = get_same_sized_vectype (scalar_type_unsigned, + vectype); /* First we need to create a vector (ZERO_VEC) of zeros and another vector (MAX_INDEX_VEC) filled with the last matching index, which we @@ -6942,8 +6942,8 @@ vectorizable_reduction (loop_vec_info loop_vinfo, int scalar_precision = GET_MODE_PRECISION (SCALAR_TYPE_MODE (scalar_type)); cr_index_scalar_type = make_unsigned_type (scalar_precision); - cr_index_vector_type = build_vector_type (cr_index_scalar_type, - nunits_out); + cr_index_vector_type = get_same_sized_vectype (cr_index_scalar_type, + vectype_out); if (direct_internal_fn_supported_p (IFN_REDUC_MAX, cr_index_vector_type, OPTIMIZE_FOR_SPEED))