On Fri, Sep 18, 2020 at 10:37:47AM +0800, Kewen.Lin wrote: > The commit r11-3230 brings a nice improvement to use full > vectors instead of partial vectors when available. But > it caused some vector with length test cases to fail on > Power. > > The failure on gcc.target/powerpc/p9-vec-length-epil-7.c > exposed one issue that: we call function > vect_need_peeling_or_partial_vectors_p in function > vect_analyze_loop_2, since it's in analysis phase, for > the epilogue loop, we could get the wrong information like > LOOP_VINFO_INT_NITERS (loop_vinfo), further get the wrong > answer for vect_need_peeling_or_partial_vectors_p. > For the epilogue loop in this failure specific, the niter > that we get is 58 (should be 1), vf is 2. > > For epilogue loop with partial vectors, it would use the > same VF as the main loop, so it won't be able to use full > vector, this patch is to exclude epilogue loop for the > check vect_need_peeling_or_partial_vectors_p in > vect_analyze_loop_2. > > The failure on gcc.target/powerpc/p9-vec-length-full-6.c > is just a test issue, the 64bit/32bit pairs are able to > use full vector, fixed in the patch accordingly.
> gcc/ChangeLog: > > * tree-vect-loop.c (vect_analyze_loop_2): Don't check > vect_need_peeling_or_partial_vectors_p for the epilogue loop. > > gcc/testsuite/ChangeLog: > > * gcc.target/powerpc/p9-vec-length-full-6.c: Adjust. The testcase part of course is okay for trunk, if this is the expected (and good :-) ) code.Thanks, Segher