[clang] X86: make the setr_ph intrinsics functions (PR #156819)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 4 00:39:05 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Sadiinso (SadiinsoSnowfall)
<details>
<summary>Changes</summary>
Change the definitions of `_mm_setr_ph`, `_mm256_setr_ph` and `_mm512_setr_ph` to be functions instead of macros.
Resolves #<!-- -->156709
Pending questions :
- Should the `_mm_setr_ph` and `_mm256_setr_ph` functions be marked as `__DEFAULT_FN_A TTRS128_CONSTEXPR` and `__DEFAULT_FN_ATTRS256_CONSTEXPR` respectively ? I marked `_mm512_setr_ph` as `__DEFAULT_FN_ATTRS512_CONSTEXPR` because this attribute list is also applied to `_mm512_set_ph`. This is not the case for `_mm_set_ph` and `_mm256_set_ph`.
- What about the other `setr` intrinsics such as `_mm512_setr_ps`, `_mm512_setr_pd`, `_mm512_setr_epi64`, etc... Should they be made into real functions too ? If so, should it be done in this PR ?
---
Full diff: https://github.com/llvm/llvm-project/pull/156819.diff
2 Files Affected:
- (modified) clang/lib/Headers/avx512fp16intrin.h (+14-7)
- (modified) clang/lib/Headers/avx512vlfp16intrin.h (+13-6)
``````````diff
diff --git a/clang/lib/Headers/avx512fp16intrin.h b/clang/lib/Headers/avx512fp16intrin.h
index 25f65aee7ff11..f501974d34c97 100644
--- a/clang/lib/Headers/avx512fp16intrin.h
+++ b/clang/lib/Headers/avx512fp16intrin.h
@@ -100,13 +100,20 @@ _mm512_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,
__h4, __h3, __h2, __h1};
}
-#define _mm512_setr_ph(h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, \
- h14, h15, h16, h17, h18, h19, h20, h21, h22, h23, h24, \
- h25, h26, h27, h28, h29, h30, h31, h32) \
- _mm512_set_ph((h32), (h31), (h30), (h29), (h28), (h27), (h26), (h25), (h24), \
- (h23), (h22), (h21), (h20), (h19), (h18), (h17), (h16), (h15), \
- (h14), (h13), (h12), (h11), (h10), (h9), (h8), (h7), (h6), \
- (h5), (h4), (h3), (h2), (h1))
+static __inline__ __m512h __DEFAULT_FN_ATTRS512_CONSTEXPR
+_mm512_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,
+ _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8,
+ _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12,
+ _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16,
+ _Float16 __h17, _Float16 __h18, _Float16 __h19, _Float16 __h20,
+ _Float16 __h21, _Float16 __h22, _Float16 __h23, _Float16 __h24,
+ _Float16 __h25, _Float16 __h26, _Float16 __h27, _Float16 __h28,
+ _Float16 __h29, _Float16 __h30, _Float16 __h31, _Float16 __h32) {
+ return _mm512_set_ph(__h32, __h31, __h30, __h29, __h28, __h27, __h26, __h25,
+ __h24, __h23, __h22, __h21, __h20, __h19, __h18, __h17,
+ __h16, __h15, __h14, __h13, __h12, __h11, __h10, __h9,
+ __h8, __h7, __h6, __h5, __h4, __h3, __h2, __h1);
+}
static __inline __m512h __DEFAULT_FN_ATTRS512
_mm512_set1_pch(_Float16 _Complex __h) {
diff --git a/clang/lib/Headers/avx512vlfp16intrin.h b/clang/lib/Headers/avx512vlfp16intrin.h
index 98ad9b54eef39..a74e43170fc33 100644
--- a/clang/lib/Headers/avx512vlfp16intrin.h
+++ b/clang/lib/Headers/avx512vlfp16intrin.h
@@ -81,13 +81,20 @@ _mm256_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,
__h4, __h3, __h2, __h1};
}
-#define _mm_setr_ph(h1, h2, h3, h4, h5, h6, h7, h8) \
- _mm_set_ph((h8), (h7), (h6), (h5), (h4), (h3), (h2), (h1))
+static __inline__ __m128h __DEFAULT_FN_ATTRS128
+_mm_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,
+ _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8) {
+ return _mm_set_ph(__h8, __h7, __h6, __h5, __h4, __h3, __h2, __h1);
+}
-#define _mm256_setr_ph(h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, \
- h14, h15, h16) \
- _mm256_set_ph((h16), (h15), (h14), (h13), (h12), (h11), (h10), (h9), (h8), \
- (h7), (h6), (h5), (h4), (h3), (h2), (h1))
+static __inline__ __m256h __DEFAULT_FN_ATTRS256
+_mm256_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4,
+ _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8,
+ _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12,
+ _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16) {
+ return _mm256_set_ph(__h16, __h15, __h14, __h13, __h12, __h11, __h10, __h9,
+ __h8, __h7, __h6, __h5, __h4, __h3, __h2, __h1);
+}
static __inline__ __m256h __DEFAULT_FN_ATTRS256 _mm256_add_ph(__m256h __A,
__m256h __B) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/156819
More information about the cfe-commits
mailing list