[gimplefe] Add vector_mask attribute to get access to vector bools
authorRichard Biener <rguenther@suse.de>
Fri, 11 Feb 2022 11:43:22 +0000 (12:43 +0100)
committerRichard Biener <rguenther@suse.de>
Fri, 11 Feb 2022 12:53:45 +0000 (13:53 +0100)
commitae117af43944101ca47b99b743c85a3c528b4b4f
treee6b640e8c3125ff9be07dc1d869a03e4d682beef
parent84993d94e13ad2ab3aee151bb5a5e767cf75d51e
[gimplefe] Add vector_mask attribute to get access to vector bools

The following adds __attribute__((vector_mask)) to get access to
the corresponding mask type for a vector type.  The implementation
simply uses truth_type_for so creating a mask type that's not
what the target would choose as canonical, say a AVX2 style one
when AVX512VL is enabled, is not possible.  It might be possible
to provide access to that with an optional argument specifying
the precision of the bool element.  The syntax is as simple as

typedef vector_type mask_type __attribute__((vector_mask));

In theory this allows to create unit testcases for vector
lowering and ISEL.

2022-02-11  Richard Biener  <rguenther@suse.de>

gcc/c-family/
* c-attribs.cc (c_common_attribute_table): Add entry for
vector_mask.
(handle_vector_mask_attribute): New.

gcc/c/
* gimple-parser.cc (c_parser_gimple_statement): Properly parse
VEC_COND_EXPRs.

gcc/testsuite/
* gcc.dg/gimplefe-48.c: New testcase.
gcc/c-family/c-attribs.cc
gcc/c/gimple-parser.cc
gcc/testsuite/gcc.dg/gimplefe-48.c [new file with mode: 0644]