Skip to content

[libcxx] <experimental/simd> Add _LIBCPP_HIDE_FROM_ABI to internal br… #66977

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

Merged
merged 1 commit into from
Sep 29, 2023

Conversation

joy2myself
Copy link
Member

…oadcast functions

@joy2myself joy2myself requested a review from a team as a code owner September 21, 2023 05:18
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Sep 21, 2023
@llvmbot
Copy link
Member

llvmbot commented Sep 21, 2023

@llvm/pr-subscribers-libcxx

Changes

…oadcast functions


Full diff: https://github.com/llvm/llvm-project/pull/66977.diff

4 Files Affected:

  • (modified) libcxx/include/experimental/__simd/scalar.h (+2-2)
  • (modified) libcxx/include/experimental/__simd/vec_ext.h (+2-2)
  • (modified) libcxx/test/std/experimental/simd/simd.class/simd_ctor_broadcast.pass.cpp (-4)
  • (modified) libcxx/test/std/experimental/simd/simd.mask.class/simd_mask_ctor_broadcast.pass.cpp (-4)
diff --git a/libcxx/include/experimental/__simd/scalar.h b/libcxx/include/experimental/__simd/scalar.h
index dcb32206d0746e9..ce629becb1123ce 100644
--- a/libcxx/include/experimental/__simd/scalar.h
+++ b/libcxx/include/experimental/__simd/scalar.h
@@ -45,14 +45,14 @@ struct __simd_operations<_Tp, simd_abi::__scalar> {
   using _SimdStorage = __simd_storage<_Tp, simd_abi::__scalar>;
   using _MaskStorage = __mask_storage<_Tp, simd_abi::__scalar>;
 
-  static _SimdStorage __broadcast(_Tp __v) noexcept { return {__v}; }
+  static _LIBCPP_HIDE_FROM_ABI _SimdStorage __broadcast(_Tp __v) noexcept { return {__v}; }
 };
 
 template <class _Tp>
 struct __mask_operations<_Tp, simd_abi::__scalar> {
   using _MaskStorage = __mask_storage<_Tp, simd_abi::__scalar>;
 
-  static _MaskStorage __broadcast(bool __v) noexcept { return {__v}; }
+  static _LIBCPP_HIDE_FROM_ABI _MaskStorage __broadcast(bool __v) noexcept { return {__v}; }
 };
 
 } // namespace parallelism_v2
diff --git a/libcxx/include/experimental/__simd/vec_ext.h b/libcxx/include/experimental/__simd/vec_ext.h
index c7c2decefad3e40..bfc204bb1ec8eaf 100644
--- a/libcxx/include/experimental/__simd/vec_ext.h
+++ b/libcxx/include/experimental/__simd/vec_ext.h
@@ -49,7 +49,7 @@ struct __simd_operations<_Tp, simd_abi::__vec_ext<_Np>> {
   using _SimdStorage = __simd_storage<_Tp, simd_abi::__vec_ext<_Np>>;
   using _MaskStorage = __mask_storage<_Tp, simd_abi::__vec_ext<_Np>>;
 
-  static _SimdStorage __broadcast(_Tp __v) noexcept {
+  static _LIBCPP_HIDE_FROM_ABI _SimdStorage __broadcast(_Tp __v) noexcept {
     _SimdStorage __result;
     for (int __i = 0; __i < _Np; ++__i) {
       __result.__set(__i, __v);
@@ -62,7 +62,7 @@ template <class _Tp, int _Np>
 struct __mask_operations<_Tp, simd_abi::__vec_ext<_Np>> {
   using _MaskStorage = __mask_storage<_Tp, simd_abi::__vec_ext<_Np>>;
 
-  static _MaskStorage __broadcast(bool __v) noexcept {
+  static _LIBCPP_HIDE_FROM_ABI _MaskStorage __broadcast(bool __v) noexcept {
     _MaskStorage __result;
     auto __all_bits_v = experimental::__set_all_bits<_Tp>(__v);
     for (int __i = 0; __i < _Np; ++__i) {
diff --git a/libcxx/test/std/experimental/simd/simd.class/simd_ctor_broadcast.pass.cpp b/libcxx/test/std/experimental/simd/simd.class/simd_ctor_broadcast.pass.cpp
index e1a668c8b4932f0..ef3e6fd719c6b6f 100644
--- a/libcxx/test/std/experimental/simd/simd.class/simd_ctor_broadcast.pass.cpp
+++ b/libcxx/test/std/experimental/simd/simd.class/simd_ctor_broadcast.pass.cpp
@@ -13,10 +13,6 @@
 // [simd.class]
 // template<class U> simd(U&& value) noexcept;
 
-// GCC returns __int128 unsigned with garbled data in higher 64 bits.
-// This is likely a bug in GCC implementation. Investigation needed.
-// XFAIL: gcc-13
-
 #include "../test_utils.h"
 
 namespace ex = std::experimental::parallelism_v2;
diff --git a/libcxx/test/std/experimental/simd/simd.mask.class/simd_mask_ctor_broadcast.pass.cpp b/libcxx/test/std/experimental/simd/simd.mask.class/simd_mask_ctor_broadcast.pass.cpp
index 967368196d1bf05..229c3b72cde0376 100644
--- a/libcxx/test/std/experimental/simd/simd.mask.class/simd_mask_ctor_broadcast.pass.cpp
+++ b/libcxx/test/std/experimental/simd/simd.mask.class/simd_mask_ctor_broadcast.pass.cpp
@@ -13,10 +13,6 @@
 // [simd.mask.class]
 // explicit simd_mask(value_type) noexcept;
 
-// GCC returns __int128 unsigned with garbled data in higher 64 bits.
-// This is likely a bug in GCC implementation. Investigation needed.
-// XFAIL: gcc-13
-
 #include "../test_utils.h"
 #include <experimental/simd>
 

@joy2myself
Copy link
Member Author

I'm not sure why but it seems the GCC int128 issue does not appear again after add the _LIBCPP_HIDE_FROM_ABI to internal functions. @philnik777

Copy link
Contributor

@philnik777 philnik777 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with the remaining HIDE_FROM_ABIs added.

@@ -45,14 +45,14 @@ struct __simd_operations<_Tp, simd_abi::__scalar> {
using _SimdStorage = __simd_storage<_Tp, simd_abi::__scalar>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're also missing HIDE_FROM_ABI above. Same in vec_ext.h.

@joy2myself
Copy link
Member Author

I'm not sure, but CI errors don't seem relevant, do they?

Also, should I click on 'squash and merge' myself?

@philnik777 philnik777 merged commit cf31d0e into llvm:main Sep 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants