diff options
author | Richard Biener <rguenther@suse.de> | 2021-12-02 12:21:19 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2021-12-02 13:32:11 +0100 |
commit | 70ece2d4ca403dfc6a837d876642378a8d4d3dce (patch) | |
tree | 1da21ec8d1b5bc3afdb4d698bfc9b43cf72bf7a4 /gcc | |
parent | 1ea226fad13ab696c6d5d17b7bbfc5b4b693c363 (diff) | |
download | gcc-70ece2d4ca403dfc6a837d876642378a8d4d3dce.zip gcc-70ece2d4ca403dfc6a837d876642378a8d4d3dce.tar.gz gcc-70ece2d4ca403dfc6a837d876642378a8d4d3dce.tar.bz2 |
tree-optimization/103527 - always use thruth type forgather mask
This makes sure to always use a truth type to build the gather
mask argument even when the target builtin prototype in the end
wants a float vector.
2021-12-02 Richard Biener <rguenther@suse.de>
PR tree-optimization/103527
* tree-vect-stmts.c (vect_build_gather_load_calls): Always
use a truth type for building the vector mask.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-stmts.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 9726450..e63bc2a 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -2740,7 +2740,7 @@ vect_build_gather_load_calls (vec_info *vinfo, stmt_vec_info stmt_info, && (!mask || TREE_CODE (masktype) == INTEGER_TYPE || types_compatible_p (srctype, masktype))); - if (mask && TREE_CODE (masktype) == INTEGER_TYPE) + if (mask) masktype = truth_type_for (srctype); tree mask_halftype = masktype; @@ -2893,7 +2893,8 @@ vect_build_gather_load_calls (vec_info *vinfo, stmt_vec_info stmt_info, if (masktype != real_masktype) { tree utype, optype = TREE_TYPE (mask_op); - if (TYPE_MODE (real_masktype) == TYPE_MODE (optype)) + if (VECTOR_TYPE_P (real_masktype) + || TYPE_MODE (real_masktype) == TYPE_MODE (optype)) utype = real_masktype; else utype = lang_hooks.types.type_for_mode (TYPE_MODE (optype), 1); |