Issue 166814
Summary [Clang][constexpr] Subbexpression not valid in a constant _expression_ for pimmintrin.h functions.
Labels clang
Assignees
Reporter mahesh-attarde
    Hi 
Latest changes related to `pimmintrin.h` broke compiler for simple valid code. 
here is repro.
https://godbolt.org/z/GfoT9Ydff

```
#include <pmmintrin.h>
#include <stdio.h>

#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__)

constexpr bool match_m128(__m128 _v, __m128 _p) {
  __v4su v = (__v4su)_v;
    __v4su p = (__v4su)_p;
  return v[0] == __builtin_bit_cast(unsigned, p[0]) && v[1] == __builtin_bit_cast(unsigned, p[1]) && v[2] == __builtin_bit_cast(unsigned, p[2]) && v[3] == __builtin_bit_cast(unsigned, p[3]);
}

int main() {

 TEST_CONSTEXPR(match_m128(_mm_addsub_pd((__m128d){+2.0, +2.0}, (__m128d){+1.0, +2.0}), (__m128d){+1.0, +4.0}));
  return 0;
 }
```
Error Reported is 

```
x86-64 clang (assertions trunk)
-msse3 
123
<Compilation failed>

# For more information see the output window
x86-64 clang (assertions trunk) - 500ms
<source>:15:18: error: static assertion _expression_ is not an integral constant _expression_
   15 | TEST_CONSTEXPR(match_m128(_mm_addsub_pd((__m128d){+2.0, +2.0}, (__m128d){+1.0, +2.0}), (__m128d){+1.0, +4.0}));
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:4:43: note: expanded from macro 'TEST_CONSTEXPR'
    4 | #define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__)
      | ^~~~~~~~~~~
/cefs/96/96a61a354c7fcaba5936d879_clang-assertions-trunk-20251106/lib/clang/22/include/pmmintrin.h:171:10: note: subexpression not valid in a constant _expression_
  171 |   return __builtin_ia32_addsubpd((__v2df)__a, (__v2df)__b);
      | ^~~~~~~~~~~~~~~~~~~~~~~
<source>:15:29: note: in call to '_mm_addsub_pd({2.000000e+00, 2.000000e+00}, {1.000000e+00, 2.000000e+00})'
 15 |   TEST_CONSTEXPR(match_m128(_mm_addsub_pd((__m128d){+2.0, +2.0}, (__m128d){+1.0, +2.0}), (__m128d){+1.0, +4.0}));
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:4:43: note: expanded from macro 'TEST_CONSTEXPR'
    4 | #define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__)
      | ^~~~~~~~~~~
1 error generated.
Compiler returned: 1
```

Can you help identify root cause and possible WA? 

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to