diff options
author | Richard Biener <rguenther@suse.de> | 2020-06-03 15:51:29 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-06-03 18:59:13 +0200 |
commit | 887c45fb5b047171e82710baa51108d5c210eb42 (patch) | |
tree | 9ef19f65170468c005667141ace5ef182a89e6c4 /gcc | |
parent | 6d36cc21b69d952967a4df6653954f572a101796 (diff) | |
download | gcc-887c45fb5b047171e82710baa51108d5c210eb42.zip gcc-887c45fb5b047171e82710baa51108d5c210eb42.tar.gz gcc-887c45fb5b047171e82710baa51108d5c210eb42.tar.bz2 |
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 <rguenther@suse.de>
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/vect/pr95487.cc | 20 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 8 |
2 files changed, 26 insertions, 2 deletions
diff --git a/gcc/testsuite/g++.dg/vect/pr95487.cc b/gcc/testsuite/g++.dg/vect/pr95487.cc new file mode 100644 index 0000000..34023d2 --- /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 a6c7f33..5548f0d 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)) { |