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

    <tr>
        <th>Summary</th>
        <td>
            [AVX-512] Identify opportunities for `kunpckdq` 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    ```zig
export fn foo(a: @Vector(32, u8), b: @Vector(32, u8), c: @Vector(32, u8)) u64 {
    const b1: u32 = @bitCast(a == b);
    const b2: u32 = @bitCast(a == c);
    return (@as(u64, b1) << 32) | b2;
}
```

```llvm
define dso_local i64 @foo(<32 x i8> %0, <32 x i8> %1, <32 x i8> %2) local_unnamed_addr {
Entry:
  %3 = icmp eq <32 x i8> %0, %1
  %4 = bitcast <32 x i1> %3 to i32
  %5 = icmp eq <32 x i8> %0, %2
  %6 = bitcast <32 x i1> %5 to i32
  %7 = zext i32 %4 to i64
  %8 = shl nuw i64 %7, 32
  %9 = zext i32 %6 to i64
  %10 = or disjoint i64 %8, %9
  ret i64 %10
}
```

This compiles like so: ([Godbolt link](https://zig.godbolt.org/z/daeo4GWhr))

```asm
foo:
 vpcmpeqb        k0, ymm0, ymm1
        kmovd   ecx, k0
        vpcmpeqb k0, ymm0, ymm2
        kmovd   eax, k0
        shl     rcx, 32
        or      rax, rcx
        vzeroupper
 ret
```

I would think it should be:

```asm
foo:
 vpcmpeqb        k0, ymm0, ymm1
        vpcmpeqb        k1, ymm0, ymm2
 kunpckdq        k0, k0, k1
        kmovd   rax, k0
 vzeroupper
        ret
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VU1zqzoM_TXKRtOMkflcsGiTmzt3_6bv7TqAncQ3gKlt-vXr39iQpmna3m4ukwkg6RzJxxKurFW7XsoSkhtI1otqdHttytuqVaIyh0WtxXMJKZt-L2oHbA3sWj4N2jjc9rjVGiivgF8jxOxWNk4boJwT0ArHHKjwD_Uf_M2X_gLHNEbIbqbkiIiN7q3DOvK4kRMCX3t8rdyqss5X5E3eWnsKfgmlP0Ob91Aj3Wh6BMohZpUFysc0DuuLfJXAV8BX6GsvELJVSDLDIVvPD0cx59dzY9s-dJNJyK3qJQqr71rdVC0qr0HMJsGBrzjhE6oc-A8ESpgv48IafWgN9QXSu7Hvq06Ku0oIc1L4R-_MM_Dr48qBEh50Uk03oLy_pJzS-4QnSBwgtXJNZd0JEs0Qjk6j4vQGkXwvyVtI-nWS5DJJFhAv8sl5x1SoD0rjN0F5CLL7FvvxcZKeksznP-MqLrjSS66IhShtUCj7W6veHQnzeUHFMdrIV1_EvtM4_-yVxUZ3g2qlxVYdJFodholySG5-alHr1mGr-gMka6B879xg_dbSBmjzonbL3RSz1GbnLUAbUUkd__x3b6bp-7BRKzv3qe_H1055GJpukPc1ztchbNlz1x3v0WmYgr_TDwIRZfPkAw7s3P1Kd8FDn_BUH_L4fQzzO6Xh79DaTHczoX3UeRkv0uhxGKSZ7Ua6L_bkFz7qsRXo9qo_oHJo9-G9lq9C_RUxL-KjT0Q7jP3QHMT9OfH8_8kOmXfKXmgyX59JsxAlFwUvqoUso4xyzilJ2WJf5nEjGp7lQsZRlsRRzahKcy5ElW4TkecLVRKjOGIsI0YUsyXLCx4LknmyLaiIMoiZ7CrVLv3H07fxQlk7yjKKophHi7aqZWvDAUfUy0cMXiDy550pPeiqHncWYtYq6-yJxinXhpPx-va_qyTyAPwlZO_U9hn14I_AsVdOSYtbbRBSdlQWUoaL0bTl-bjtlNuP9bLRHdAmfOqn29Vg9G_ZOKBNKM4CbebqH0r6PwAA__-UywF1">