aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2021-12-02 12:21:19 +0100
committerRichard Biener <rguenther@suse.de>2021-12-02 13:32:11 +0100
commit70ece2d4ca403dfc6a837d876642378a8d4d3dce (patch)
tree1da21ec8d1b5bc3afdb4d698bfc9b43cf72bf7a4 /gcc
parent1ea226fad13ab696c6d5d17b7bbfc5b4b693c363 (diff)
downloadgcc-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.c5
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);