Skip to content

Conversation

markbhasawut
Copy link
Contributor

@markbhasawut markbhasawut commented Sep 3, 2025

This PR adds constexpr support for the following AVX512F mullox intrinsics:

  • _mm512_mullox_epi64
  • _mm512_mask_mullox_epi64

Closes #156632
Fixes #155411

@markbhasawut markbhasawut force-pushed the x86-avx512f-mullox-constexpr-intrinsics branch 2 times, most recently from 7d33987 to c006c50 Compare September 3, 2025 20:42
Add constexpr support for the following AVX512F mullox intrinsics:

  - _mm512_mullox_epi64
  - _mm512_mask_mullox_epi64
@markbhasawut markbhasawut force-pushed the x86-avx512f-mullox-constexpr-intrinsics branch from c006c50 to d9557ab Compare September 3, 2025 20:43
@markbhasawut markbhasawut marked this pull request as ready for review September 3, 2025 21:03
@llvmbot llvmbot added clang Clang issues not falling into any other category backend:X86 clang:headers Headers provided by Clang, e.g. for intrinsics labels Sep 3, 2025
@llvmbot
Copy link
Member

llvmbot commented Sep 3, 2025

@llvm/pr-subscribers-backend-x86

@llvm/pr-subscribers-clang

Author: Bhasawut Singhaphan (markbhasawut)

Changes

This PR adds constexpr support for the following AVX512F mullox intrinsics:

  • _mm512_mullox_epi64
  • _mm512_mask_mullox_epi64

Closes #156632
Fixes #155411


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

2 Files Affected:

  • (modified) clang/lib/Headers/avx512fintrin.h (+3-3)
  • (modified) clang/test/CodeGen/X86/avx512f-builtins.c (+2)
diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h
index 66967321044e8..9c0fa9719fb62 100644
--- a/clang/lib/Headers/avx512fintrin.h
+++ b/clang/lib/Headers/avx512fintrin.h
@@ -1463,12 +1463,12 @@ _mm512_mask_mullo_epi32(__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) {
                                              (__v16si)__W);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS512
-_mm512_mullox_epi64 (__m512i __A, __m512i __B) {
+static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
+_mm512_mullox_epi64(__m512i __A, __m512i __B) {
   return (__m512i) ((__v8du) __A * (__v8du) __B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS512
+static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
 _mm512_mask_mullox_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
   return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
                                              (__v8di)_mm512_mullox_epi64(__A, __B),
diff --git a/clang/test/CodeGen/X86/avx512f-builtins.c b/clang/test/CodeGen/X86/avx512f-builtins.c
index 39a212c80b70b..82f878ebc43c3 100644
--- a/clang/test/CodeGen/X86/avx512f-builtins.c
+++ b/clang/test/CodeGen/X86/avx512f-builtins.c
@@ -3171,6 +3171,7 @@ __m512i test_mm512_mullox_epi64 (__m512i __A, __m512i __B) {
   // CHECK: mul <8 x i64>
   return (__m512i) _mm512_mullox_epi64(__A, __B);
 }
+TEST_CONSTEXPR(match_v8di(_mm512_mullox_epi64((__m512i)(__v8di){+1, -2, +3, -4, +5, -6, +7, -8}, (__m512i)(__v8di){-2, +3, +4, +5, -6, +7, +8, +9}), -2, -6, +12, -20, -30, -42, +56, -72));
 
 __m512i test_mm512_mask_mullox_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
   // CHECK-LABEL: test_mm512_mask_mullox_epi64
@@ -3178,6 +3179,7 @@ __m512i test_mm512_mask_mullox_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __
   // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
   return (__m512i) _mm512_mask_mullox_epi64(__W, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v8di(_mm512_mask_mullox_epi64((__m512i)(__v8di){-100, +200, -300, +400, -500, +600, -700, +800}, 0x00FF, (__m512i)(__v8di){+1, -2, +3, -4, +5, -6, +7, -8}, (__m512i)(__v8di){-2, +3, +4, +5, -6, +7, +8, +9}), -2, -6, +12, -20, -30, -42, +56, -72));
 
 __m512d test_mm512_add_round_pd(__m512d __A, __m512d __B) {
   // CHECK-LABEL: test_mm512_add_round_pd

Copy link
Collaborator

@RKSimon RKSimon left a comment

Choose a reason for hiding this comment

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

LGTM - cheers

@RKSimon RKSimon merged commit ab6be80 into llvm:main Sep 3, 2025
14 checks passed
@markbhasawut
Copy link
Contributor Author

Thanks! @RKSimon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:X86 clang:headers Headers provided by Clang, e.g. for intrinsics clang Clang issues not falling into any other category
Projects
None yet
3 participants