-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[Clang] Add queryable feature 'ext_vector_type_boolean' for SIMD masks #154227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-clang Author: Joseph Huber (jhuber6) ChangesSummary: Full diff: https://github.com/llvm/llvm-project/pull/154227.diff 3 Files Affected:
diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst
index 97413588fea15..953278aa62c6c 100644
--- a/clang/docs/LanguageExtensions.rst
+++ b/clang/docs/LanguageExtensions.rst
@@ -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(boolean_vectors)```.
The semantics of boolean vectors borrows from C bit-fields with the following
differences:
diff --git a/clang/include/clang/Basic/Features.def b/clang/include/clang/Basic/Features.def
index b9efc6a6a2e9d..d3c7642e53963 100644
--- a/clang/include/clang/Basic/Features.def
+++ b/clang/include/clang/Basic/Features.def
@@ -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(boolean_vectors, true)
FEATURE(blocks, LangOpts.Blocks)
FEATURE(c_thread_safety_attributes, true)
FEATURE(cxx_exceptions, LangOpts.CXXExceptions)
diff --git a/clang/test/SemaCXX/vector-bool.cpp b/clang/test/SemaCXX/vector-bool.cpp
index cd638056f348b..b5160c4cee540 100644
--- a/clang/test/SemaCXX/vector-bool.cpp
+++ b/clang/test/SemaCXX/vector-bool.cpp
@@ -112,3 +112,7 @@ void Sizeof() {
static_assert(sizeof(Bool195) == 32);
static_assert(sizeof(Bool257) == 64);
}
+
+#if !__has_feature(boolean_vectors)
+#error "FAIL"
+#endif
|
erichkeane
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I clicked accept, but not sure I'm super in favor of the name? Maybe see if folks will bikeshed it for you? I'm a bit concerned it is too close to other things (vector is ambiguous of course).
Maybe:
boolean_gnu_vector_type and boolean_ext_vector_type
WDYT?
Yeah, I was wondering about that. I don't think we support the GNU vectors to be boolean yet so it can be a little confusing. Maybe just |
ah, sure. Then when/if we get |
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.
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.