<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/68149>68149</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Can't pass `__m512bh` as inline assembly operand
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          bjacob
      </td>
    </tr>
</table>

<pre>
    Normally constraint `x` allows passing SIMD vectors as X86 inline assembly operands, as documented here for LLVM inline assembly:
https://llvm.org/docs/LangRef.html#inline-assembler-expressions

This Compiler Explorer link shows that this works for `__m512` but not for `__m512bh`.
https://godbolt.org/z/Wrrnr6E4d

Pasted here:

```c
#include <immintrin.h>
#include <stdint.h>

__m512bh broadcast_load_2xbf16(const void *src) {
 __m512bh dst;
  asm("vbroadcastss %[dst], dword ptr [%[src]]" :[dst]"=x"(dst) : [src]"r"(src) :);
  return dst;
}

__m512 broadcast_load_f32(const void *src) {
  __m512 dst;
 asm("vbroadcastss %[dst], dword ptr [%[src]]" :[dst]"=x"(dst) : [src]"r"(src) :);
  return dst;
}
```

Compile with flags: `-O3 -masm=intel -mavx -mavx2 -mfma -mf16c -mavx512f -mavx512vl -mavx512cd -mavx512bw -mavx512dq -mavx512bf16` .

The function `broadcast_load_f32` compiles but the function `broadcast_load_2xbf16` errors with:

```
<source>:6:7: error: couldn't allocate output register for constraint 'x'
    6 |   asm("vbroadcastss %[dst], dword ptr [%[src]]" :[dst]"=x"(dst) : [src]"r"(src) :);
      |       ^
1 error generated.
Compiler returned: 1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVV2P6yYT_jXkZpQIQ0ySC19kk430SnveVm3VnrsVhnHMWQwp4Gy2v77CdrIf3dPetlGEB5gZHh7mQ8Zojg6xIuUdKfcz2afWh6r-JpWvZ7XXL9X_feiktS-gvIspSOMSEEEvRFCQ1vrnCKfsxh3h5_992cMZVfIhgozwdS3AOGscgowRu9q-gD9hkE5HwnZZRXvVd-gSamgxIDQ-wMPDr18-2hG-JXRP6LZN6RTzjB0IO1h77hY-HAk7aK8iYYcH6Y4_YbNoU2cJ46Ob-eQGwxwvp4AxGu_i6HAcf2lNhJ3vTsZigPvLyfqAAaxxTxDbfMnUygQpqz378BQHpETQx8euLFgmo-4TOJ_eb9QtEXTxGfSj17W3aUL_B2GH30JwQdwv9VtgP8p4JefGwTQKOv7VNM-3VbbXCITvTNcZl4Jxi5bw-880YtLGpbfbw3jFDXXwUisZ06P1Uj-yS90UgrD1EAdw9kYDYdsYFGEbIKu70Rxu9jomwq-rIGNH2Jowdr75jREIK0l5lzXLfY4I_eyDhlMKkANy2MwHlPthn0Gm4FWfEb6_5A9b56UMg2_h1YaxMO5eQWbuN29ABUx9cO-QktX-r2x85KLh7J-JmJh4z8N_j4ZrlL1lZUoUeDaphcbKYxxOFHT-A4d5ly_J98YltHl2vowjg3nXdDKPhVDjWlmw5iad7U1U-ibWzzdR__66moNRUFi8z2KEpncqGe8ynE-eTVBQI_o4ZGz6e5Mp6gUFDCGXtXzl7yXiNOW76PugMCcW3wrCt6tMz-AgC8r3VjvCVmkooEomBN-nU58g4NHEhGEoIm8LLltdCFtdHwxAAFnt4F-aVvk3whukcqovxUgBHNFhkAn14l00hSkOUefjig_cznTF9YZv5AyrQmwEF7RcbmZtVa9XGptlKTSnxaaQy1XdrHWt-ZoLrZfNzFSMMl5QyotNUS43C6VQIEdKdbHmy6YkS4qdNHZx7SYzE2OPlVgXy83MyhptHBokY7VUT-gywK9rkUko97NQZbt53R8jWVJrYoqvnpJJFqudHJ87N8oPvSE3we_0yFkfbPWhaZjU9vVC-W5qftNnfgr-G6pE2GHAnjvhAP_PAAAA___DVFVq">