<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">