[clang] [X86][Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - Allow AVX/AVX512 IFMA madd52 intrinsics to be used in constexpr (PR #161056)

NagaChaitanya Vellanki via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 30 03:22:31 PDT 2025


================
@@ -52,3 +56,35 @@ __m256i test_mm256_madd52lo_avx_epu64(__m256i __X, __m256i __Y, __m256i __Z) {
 // CHECK:    call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}})
   return _mm256_madd52lo_avx_epu64(__X, __Y, __Z);
 }
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64((__m128i)((__v2du){0, 0}), (__m128i)((__v2du){10, 0}), (__m128i)((__v2du){5, 0})), 50, 0));
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64((__m128i)((__v2du){100, 0}), (__m128i)((__v2du){20, 0}), (__m128i)((__v2du){30, 0})), 700, 0));
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64((__m128i)((__v2du){1, 2}), (__m128i)((__v2du){10, 20}), (__m128i)((__v2du){2, 3})), 21, 62));
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52lo_epu64((__m128i)((__v2du){0, 0}), (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0}), (__m128i)((__v2du){1, 0})), 0xFFFFFFFFFFFFFull, 0));
+
+TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_epu64((__m256i)((__v4du){1, 2, 3, 4}), (__m256i)((__v4du){10, 20, 30, 40}), (__m256i)((__v4du){2, 3, 4, 5})), 21, 62, 123, 204));
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52hi_epu64((__m128i)((__v2du){100, 0}), (__m128i)((__v2du){10, 0}), (__m128i)((__v2du){5, 0})), 100, 0));
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52hi_epu64((__m128i)((__v2du){0, 0}), (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0}), (__m128i)((__v2du){0xFFFFFFFFFFFFFull, 0})), 0xFFFFFFFFFFFFEull, 0));
+
+TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_epu64((__m256i)((__v4du){100, 200, 300, 400}), (__m256i)((__v4du){10, 20, 30, 40}), (__m256i)((__v4du){5, 6, 7, 8})), 100, 200, 300, 400));
+
+TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_epu64((__m256i)((__v4du){0, 0, 0, 0}), (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0, 0}), (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0, 0})), 0xFFFFFFFFFFFFEull, 0, 0, 0));
+
+TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_epu64((__m256i)((__v4du){0, 0, 0, 0}), (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0, 0, 0}), (__m256i)((__v4du){1, 0, 0, 0})), 0xFFFFFFFFFFFFFull, 0, 0, 0));
+
+TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_epu64((__m256i)((__v4du){0, 0, 0, 0}), (__m256i)((__v4du){0x1F000000000000ull, 0, 0, 0}), (__m256i)((__v4du){2, 0, 0, 0})), 0xE000000000000ull, 0, 0, 0));
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52lo_avx_epu64((__m128i)((__v2du){5, 10}), (__m128i)((__v2du){100, 200}), (__m128i)((__v2du){7, 8})), 705, 1610));
+
+TEST_CONSTEXPR(match_v4di(_mm256_madd52lo_avx_epu64((__m256i)((__v4du){1, 2, 3, 4}), (__m256i)((__v4du){10, 20, 30, 40}), (__m256i)((__v4du){2, 3, 4, 5})), 21, 62, 123, 204));
+
+TEST_CONSTEXPR(match_v2di(_mm_madd52hi_avx_epu64((__m128i)((__v2du){50, 100}), (__m128i)((__v2du){10, 20}), (__m128i)((__v2du){5, 6})), 50, 100));
+
+TEST_CONSTEXPR(match_v4di(_mm256_madd52hi_avx_epu64((__m256i)((__v4du){0, 0, 0, 0}), (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFull, 0, 0}), (__m256i)((__v4du){0xFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFull, 0, 0})), 0xFFFFFFFFFFFFEull, 0xFFFFFFFFFFFFEull, 0, 0));
+
+// expected-no-diagnostics
----------------
chaitanyav wrote:

```
+ /Users/nagachaitanyavellanki/scratch/llvm-project/build/bin/clang -cc1 -internal-isystem /Users/nagachaitanyavellanki/scratch/llvm-project/build/lib/clang/22/include -nostdsysteminc -x c++ -std=c++2a -fsyntax-only /Users/nagachaitanyavellanki/scratch/llvm-project/clang/test/CodeGen/X86/avxifma-builtins.c -triple=x86_64-unknown-unknown -target-feature +avxifma -ffreestanding -verify
error: no expected directives found: consider use of 'expected-no-diagnostics'
```

https://github.com/llvm/llvm-project/pull/161056


More information about the cfe-commits mailing list