<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/154900>154900</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] __builtin_elementwise_fma fails to be a constexpr in some valid cases
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ckoparkar
</td>
</tr>
</table>
<pre>
Consider the code:
```
#include "immintrin.h"
int main() {
constexpr __m128 a = (__m128){2.0f, 2.0f, 2.0f, 2.0f};
constexpr float x = __builtin_elementwise_fma(a[1], a[2], a[3]);
return 0;
}
```
Compiling this with trunk leads to an error: `constexpr variable 'x' must be initialized by a constant expression`, but it shouldn't fail in this case. This builtin was made a constexpr in #152919.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8Ustu2zAQ_JrVZRGBWup50MEP-At6NyiRtrahSIOknKRfX0h2kCItChDg8LCzM8NRMfLVGdNDtYfqmKklTT7046u_qfCqQjZ4_dEfvIusTcA0GRy9NiB3ILZTi-cROyDJbrSLNghEPM_sUmCXT0AEYscu4azYAbVAHUKzB7FDHL2LybzfAp7Pc0EtKgR5RKD28QbqoNlTLi5AB_zn3RxBfie7WK8Svm9c5_OwsE3szsaa2bj0xtGcL7MCahVU-wKq40q2YvoDyw13n-TBpCU4FI_3uvWbf7E7-PnGlt0V08QR3zhNmMLiXtEapSMmj8qhCcEHkDuEWnwpvqvAarBreM07UIPzEhMOBtlxYmX5l9E4fKB6uFQu4TpnYmTvVgV0wGFJyAnj5BerHVCT8KLYIruHoFFFk-OPFT4jwTcVcVbafPJuWtghkCwq6oouz3QvdSc7lZm-aKqqLaumldnUt1SqmjqpS1MYJTtZ1lrW3aXW0gyVKjLuSVAlWiJRVzXJfLyoispyJG3aYiAFpTCzYptbe59zH64Zx7iYvqjKTojMqsHYuHWTaLTKXdcqVccs9OvAy7BcI5TCckzxiyJxsluhHxPVfwqwpbN9y_BXANHPBu_Kst5ii9kSbD-ldItr--kEdLpympYhH_0MdFr3P6-XW_A_zZiATpufCHR6Wrr39DsAAP__vPgTTg">