middle-end/97521 - always use single-bit bools in mask vector types
authorRichard Biener <rguenther@suse.de>
Fri, 23 Oct 2020 06:40:15 +0000 (08:40 +0200)
committerRichard Biener <rguenther@suse.de>
Mon, 26 Oct 2020 11:28:30 +0000 (12:28 +0100)
commit605c2a393d3a2db86454a70fd7c9467db434060c
tree0e268ceb12720c4f1395e88440321b79dab85230
parent4052c05e5b30fee0fb95a51e74e12a56dce29491
middle-end/97521 - always use single-bit bools in mask vector types

This makes us always use a single-bit boolean type component type
for integer mode mask VECTOR_BOOLEAN_TYPE_P to match the RTL and target
representation.  This aovids the need for magic translation and
the inconsistencies from the translation requirement now that
we expose temporaries of those types on the GIMPLE level.

2020-10-23  Richard Biener  <rguenther@suse.de>

PR middle-end/97521
* expr.c (const_scalar_mask_from_tree): Remove.
(expand_expr_real_1): Always VIEW_CONVERT integer mode
vector constants to an integer type.
* tree.c (build_truth_vector_type_for_mode): Use a single-bit
boolean component type for non-vector-mode mask_mode.

* gcc.target/i386/pr97521.c: New testcase.
gcc/expr.c
gcc/testsuite/gcc.target/i386/pr97521.c [new file with mode: 0644]
gcc/tree.c