vect: Skip epilogue loops for dbgcnt check [PR96451]
authorKewen Lin <linkw@linux.ibm.com>
Wed, 5 Aug 2020 07:50:49 +0000 (02:50 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Thu, 6 Aug 2020 05:56:51 +0000 (00:56 -0500)
As the PR shows, commit r11-2453 exposed one issue that vectorizer
wants to vectorize the epilogue loop and leaves the if-cvt body there,
but later dbgcnt check disables it, the left scalar mask_store
statement causes ICE.

As Richard pointed out in that PR, the dbgcnt is to count original
scalar loops, so this fix is to make it skip the epilogue loops.

gcc/ChangeLog:

* tree-vectorizer.c (try_vectorize_loop_1): Skip the epilogue loops
for dbgcnt check.

gcc/tree-vectorizer.c

index 2a60d37bb8773f2f035bbcb7b0d478e0a0a1cccf..3c60f30ed8fe6425b77e1e40deb51ec66c247e5f 100644 (file)
@@ -1066,7 +1066,8 @@ try_vectorize_loop_1 (hash_table<simduid_to_vf> *&simduid_to_vf_htab,
       return ret;
     }
 
-  if (!dbg_cnt (vect_loop))
+  /* Only count the original scalar loops.  */
+  if (!LOOP_VINFO_EPILOGUE_P (loop_vinfo) && !dbg_cnt (vect_loop))
     {
       /* Free existing information if loop is analyzed with some
         assumptions.  */