From: Richard Biener Date: Wed, 3 Jun 2020 13:51:29 +0000 (+0200) Subject: tree-optimization/95487 - use a truth type for scatter masks X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=887c45fb5b047171e82710baa51108d5c210eb42;p=gcc.git tree-optimization/95487 - use a truth type for scatter masks This makes sure to get a truth type for scatter masks even when they are invariant. 2020-06-03 Richard Biener PR tree-optimization/95487 * tree-vect-stmts.c (vectorizable_store): Use a truth type for the scatter mask. * g++.dg/vect/pr95487.cc: New testcase. --- diff --git a/gcc/testsuite/g++.dg/vect/pr95487.cc b/gcc/testsuite/g++.dg/vect/pr95487.cc new file mode 100644 index 00000000000..34023d25572 --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr95487.cc @@ -0,0 +1,20 @@ +// { dg-do compile } +// { dg-additional-options "-O3" } +// { dg-additional-options "-march=skylake-avx512" { target x86_64-*-* i?86-*-* } } + +int a; +bool d; +char e; +extern short f[]; +extern int g[]; +short j; +void h() { + for (short b = j; b < 0; b += 2) { + f[b] = 0; + if (d) { + for (char c = 0; c < a; c += 3) + e = 0; + g[b] = 0; + } + } +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index a6c7f333fc7..5548f0d987f 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -7676,8 +7676,12 @@ vectorizable_store (vec_info *vinfo, gs_info.offset, stmt_info); if (mask) - mask_op = vec_mask = vect_get_vec_def_for_operand (vinfo, mask, - stmt_info); + { + tree mask_vectype = truth_type_for (vectype); + mask_op = vec_mask + = vect_get_vec_def_for_operand (vinfo, mask, + stmt_info, mask_vectype); + } } else if (modifier != NONE && (j & 1)) {