aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-10-18 09:13:23 +0200
committerRichard Biener <rguenther@suse.de>2023-10-18 10:15:21 +0200
commitb0372ef12f6f7f863606b0d2858d049b18a4cfda (patch)
tree254987a186701e76406e23f38bc08f1088964993
parent60c231cb65807fb963624acc4f82d2935e305f93 (diff)
downloadgcc-b0372ef12f6f7f863606b0d2858d049b18a4cfda.zip
gcc-b0372ef12f6f7f863606b0d2858d049b18a4cfda.tar.gz
gcc-b0372ef12f6f7f863606b0d2858d049b18a4cfda.tar.bz2
Re-instantiate integer mask to traditional vector mask support
The following allows to pass integer mask data as traditional vector mask for OMP SIMD clone calls which is required due to the limited set of OMP SIMD clones in the x86 ABI when using AVX512 but a prefered vector size of 256 bits. * tree-vect-stmts.cc (vectorizable_simd_clone_call): Relax check to again allow passing integer mode masks as traditional vectors.
-rw-r--r--gcc/tree-vect-stmts.cc9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 2974eb6..e5ff44c 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -4384,9 +4384,16 @@ vectorizable_simd_clone_call (vec_info *vinfo, stmt_vec_info stmt_info,
i = -1;
break;
case SIMD_CLONE_ARG_TYPE_MASK:
+ /* While we can create a traditional data vector from
+ an incoming integer mode mask we have no good way to
+ force generate an integer mode mask from a traditional
+ boolean vector input. */
if (SCALAR_INT_MODE_P (n->simdclone->mask_mode)
- != SCALAR_INT_MODE_P (TYPE_MODE (arginfo[i].vectype)))
+ && !SCALAR_INT_MODE_P (TYPE_MODE (arginfo[i].vectype)))
i = -1;
+ else if (!SCALAR_INT_MODE_P (n->simdclone->mask_mode)
+ && SCALAR_INT_MODE_P (TYPE_MODE (arginfo[i].vectype)))
+ this_badness += 2048;
break;
}
if (i == (size_t) -1)