Improve constant folding of vector lowering with vector bools
This improves the situation somewhat when vector lowering tries to access vector bools as seen in PR96814. 2020-09-03 Richard Biener <rguenther@suse.de> * tree-vect-generic.c (tree_vec_extract): Remove odd special-casing of boolean vectors. * fold-const.c (fold_ternary_loc): Handle boolean vector type BIT_FIELD_REFs.
This commit is contained in:
parent
3cc3a373fe
commit
b246f5272e
2 changed files with 4 additions and 14 deletions
|
@ -12581,7 +12581,9 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
|
|||
&& tree_fits_uhwi_p (op2))
|
||||
{
|
||||
tree eltype = TREE_TYPE (TREE_TYPE (arg0));
|
||||
unsigned HOST_WIDE_INT width = tree_to_uhwi (TYPE_SIZE (eltype));
|
||||
unsigned HOST_WIDE_INT width
|
||||
= (TREE_CODE (eltype) == BOOLEAN_TYPE
|
||||
? TYPE_PRECISION (eltype) : tree_to_uhwi (TYPE_SIZE (eltype)));
|
||||
unsigned HOST_WIDE_INT n = tree_to_uhwi (arg1);
|
||||
unsigned HOST_WIDE_INT idx = tree_to_uhwi (op2);
|
||||
|
||||
|
|
|
@ -136,19 +136,7 @@ tree_vec_extract (gimple_stmt_iterator *gsi, tree type,
|
|||
t = gimple_assign_rhs1 (def_stmt);
|
||||
}
|
||||
if (bitpos)
|
||||
{
|
||||
if (TREE_CODE (type) == BOOLEAN_TYPE)
|
||||
{
|
||||
tree itype
|
||||
= build_nonstandard_integer_type (tree_to_uhwi (bitsize), 0);
|
||||
tree field = gimplify_build3 (gsi, BIT_FIELD_REF, itype, t,
|
||||
bitsize, bitpos);
|
||||
return gimplify_build2 (gsi, NE_EXPR, type, field,
|
||||
build_zero_cst (itype));
|
||||
}
|
||||
else
|
||||
return gimplify_build3 (gsi, BIT_FIELD_REF, type, t, bitsize, bitpos);
|
||||
}
|
||||
return gimplify_build3 (gsi, BIT_FIELD_REF, type, t, bitsize, bitpos);
|
||||
else
|
||||
return gimplify_build1 (gsi, VIEW_CONVERT_EXPR, type, t);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue