Fix profile update after peeled epilogues
Epilogue peeling expects the scalar loop to have same number of executions as the vector loop which is true at the beggining of vectorization. However if the epilogues are vectorized, this is no longer the case. In this situation the loop preheader is replaced by new guard code with correct profile, however loop body is left unscaled. This leads to loop that exists more often then it is entered. This patch add slogic to scale the frequencies down and also to fix profile of original preheader where necesary. Bootstrapped/regtested x86_64-linux, comitted. gcc/ChangeLog: * tree-vect-loop-manip.cc (vect_do_peeling): Fix profile update of peeled epilogues. gcc/testsuite/ChangeLog: * gcc.dg/vect/vect-bitfield-read-1.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-2.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-3.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-4.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-5.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-6.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-read-7.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-1.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-2.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-3.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-4.c: Check profile consistency. * gcc.dg/vect/vect-bitfield-write-5.c: Check profile consistency. * gcc.dg/vect/vect-epilogues-2.c: Check profile consistency. * gcc.dg/vect/vect-epilogues.c: Check profile consistency. * gcc.dg/vect/vect-mask-store-move-1.c: Check profile consistency.
Showing
- gcc/testsuite/gcc.dg/vect/vect-bitfield-read-1.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-read-1.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-read-2.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-read-2.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-read-3.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-read-3.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-read-4.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-read-4.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-read-5.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-read-5.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-read-6.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-read-6.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-read-7.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-read-7.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-write-1.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-write-1.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-write-2.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-write-2.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-write-3.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-write-3.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-write-4.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-write-4.c
- gcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c
- gcc/testsuite/gcc.dg/vect/vect-epilogues-2.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-epilogues-2.c
- gcc/testsuite/gcc.dg/vect/vect-epilogues.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-epilogues.c
- gcc/testsuite/gcc.dg/vect/vect-mask-store-move-1.c 2 additions, 0 deletionsgcc/testsuite/gcc.dg/vect/vect-mask-store-move-1.c
- gcc/tree-vect-loop-manip.cc 11 additions, 2 deletionsgcc/tree-vect-loop-manip.cc
Loading
Please register or sign in to comment