tree-optimization/114485 - neg induction with partial vectors
We can't use vect_update_ivs_after_vectorizer for partial vectors, the following fixes vect_can_peel_nonlinear_iv_p accordingly. PR tree-optimization/114485 * tree-vect-loop-manip.cc (vect_can_peel_nonlinear_iv_p): vect_step_op_neg isn't OK for partial vectors but only for unknown niter. * gcc.dg/vect/pr114485.c: New testcase.
This commit is contained in:
parent
1c89d1b9dc
commit
85621f98d2
2 changed files with 25 additions and 7 deletions
18
gcc/testsuite/gcc.dg/vect/pr114485.c
Normal file
18
gcc/testsuite/gcc.dg/vect/pr114485.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "tree-vect.h"
|
||||
|
||||
int b, c = 8, d;
|
||||
int e[23];
|
||||
int main()
|
||||
{
|
||||
check_vect ();
|
||||
|
||||
int *h = e;
|
||||
for (int i = 1; i < b + 21; i += 2)
|
||||
{
|
||||
c *= -1;
|
||||
d = h[i] ? i : 0;
|
||||
}
|
||||
if (c != 8)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
|
@ -2128,18 +2128,18 @@ vect_can_peel_nonlinear_iv_p (loop_vec_info loop_vinfo,
|
|||
For shift, when shift mount >= precision, there would be UD.
|
||||
For mult, don't known how to generate
|
||||
init_expr * pow (step, niters) for variable niters.
|
||||
For neg, it should be ok, since niters of vectorized main loop
|
||||
For neg unknown niters are ok, since niters of vectorized main loop
|
||||
will always be multiple of 2.
|
||||
See also PR113163 and PR114196. */
|
||||
if ((!LOOP_VINFO_VECT_FACTOR (loop_vinfo).is_constant ()
|
||||
|| LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo)
|
||||
|| !LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo))
|
||||
&& induction_type != vect_step_op_neg)
|
||||
See also PR113163, PR114196 and PR114485. */
|
||||
if (!LOOP_VINFO_VECT_FACTOR (loop_vinfo).is_constant ()
|
||||
|| LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo)
|
||||
|| (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
|
||||
&& induction_type != vect_step_op_neg))
|
||||
{
|
||||
if (dump_enabled_p ())
|
||||
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
|
||||
"Peeling for epilogue is not supported"
|
||||
" for nonlinear induction except neg"
|
||||
" for this nonlinear induction"
|
||||
" when iteration count is unknown or"
|
||||
" when using partial vectorization.\n");
|
||||
return false;
|
||||
|
|
Loading…
Add table
Reference in a new issue