[Clang] Add queryable feature 'ext_vector_type_boolean' for SIMD masks (#154227)

Summary:
We added boolean vectors in clang 15 and wish to extend them further in
clang-22. However, there's no way to query for their support as they are
separate to the normal extended vector type. This adds a feature so we
can check for it as a feature directly.
This commit is contained in:
Joseph Huber 2025-08-20 13:33:02 -05:00 committed by GitHub
parent 410a1341b5
commit 2f6b747997
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 1 deletions

View File

@ -635,11 +635,12 @@ C and C++. For example:
return v;
}
Boolean vectors are a Clang extension of the ext vector type. Boolean vectors
are intended, though not guaranteed, to map to vector mask registers. The size
parameter of a boolean vector type is the number of bits in the vector. The
boolean vector is dense and each bit in the boolean vector is one vector
element.
element. Query for this feature with ``__has_feature(ext_vector_type_boolean)``.
The semantics of boolean vectors borrows from C bit-fields with the following
differences:

View File

@ -128,6 +128,7 @@ FEATURE(attribute_overloadable, true)
FEATURE(attribute_unavailable_with_message, true)
FEATURE(attribute_unused_on_fields, true)
FEATURE(attribute_diagnose_if_objc, true)
FEATURE(ext_vector_type_boolean, true)
FEATURE(blocks, LangOpts.Blocks)
FEATURE(c_thread_safety_attributes, true)
FEATURE(cxx_exceptions, LangOpts.CXXExceptions)

View File

@ -112,3 +112,7 @@ void Sizeof() {
static_assert(sizeof(Bool195) == 32);
static_assert(sizeof(Bool257) == 64);
}
#if !__has_feature(ext_vector_type_boolean)
#error "FAIL"
#endif