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

    <tr>
        <th>Summary</th>
        <td>
            Some `shufflevector`s should emit as a single `shld`/`shrd` instruction
        </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 Godbolt](https://zig.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,selection:(endColumn:1,endLineNumber:11,positionColumn:1,positionLineNumber:11,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:'const+std+%3D+@import(%22std%22)%3B%0A%0Aexport+fn+foo(a:+@Vector(8,+u8),+b:+@Vector(8,+u8))+@Vector(8,+u8)+%7B%0A++++return+@shuffle(u8,+a,+b,+%5B_%5Di32%7B+-8,+0,+1,+2,+3,+4,+5,+6+%7D)%3B%0A%7D%0A%0Aexport+fn+bar(a:+@Vector(8,+u8),+b:+@Vector(8,+u8))+@Vector(8,+u8)+%7B%0A++++const+i+%3D+8%3B%0A++++return+@bitCast((@as(u64,+@bitCast(a))+%3C%3C+i)+%7C+(@as(u64,+@bitCast(b))+%3E%3E+(63+-+i+%2B+1)))%3B%0A%7D%0A'),l:'5',n:'0',o:'Zig+source+%231',t:'0')),k:51.84055022764701,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((g:!((h:compiler,i:(compiler:ztrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,libs:!(),options:'-OReleaseFast+-target+x86_64-linux+-mcpu%3Dznver5',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+zig+trunk+(Editor+%231)',t:'0')),k:48.15944977235301,l:'4',m:50,n:'0',o:'',s:0,t:'0'),(g:!((h:ir,i:('-fno-discard-value-names':'0',compilerName:'zig+trunk',demangle-symbols:'0',editorid:1,filter-attributes:'0',filter-comments:'0',filter-debug-info:'0',filter-instruction-metadata:'0',fontScale:14,fontUsePx:'0',j:1,selection:(endColumn:2,endLineNumber:5,positionColumn:1,positionLineNumber:1,selectionStartColumn:2,selectionStartLineNumber:5,startColumn:1,startLineNumber:1),treeid:0,wrap:'1'),l:'5',n:'0',o:'LLVM+IR+Viewer+zig+trunk+(Editor+%231,+Compiler+%231)',t:'0')),header:(),l:'4',m:50,n:'0',o:'',s:0,t:'0')),k:48.15944977235301,l:'3',n:'0',o:'',t:'0')),l:'2',n:'0',o:'',t:'0')),version:4) [LLVM Godbolt](https://llvm.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,selection:(endColumn:21,endLineNumber:3,positionColumn:21,positionLineNumber:3,selectionStartColumn:8,selectionStartLineNumber:3,startColumn:8,startLineNumber:3),source:'define+dso_local+%3C8+x+i8%3E+@foo(%3C8+x+i8%3E+%250,+%3C8+x+i8%3E+%251)+local_unnamed_addr+%7B%0AEntry:%0A++%252+%3D+shufflevector+%3C8+x+i8%3E+%250,+%3C8+x+i8%3E+%251,+%3C8+x+i32%3E+%3Ci32+15,+i32+0,+i32+1,+i32+2,+i32+3,+i32+4,+i32+5,+i32+6%3E%0A++ret+%3C8+x+i8%3E+%252%0A%7D'),l:'5',n:'0',o:'LLVM+IR+source+%231',t:'0')),k:50,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:llctrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,libs:!(),options:'-O3+--mtriple%3Dx86_64-linux+-mcpu%3Dznver5',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+llc+(trunk)+(Editor+%231)',t:'0')),k:50,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',m:100,n:'0',o:'',t:'0')),version:4)

This code:


```llvm
define dso_local <8 x i8> @foo(<8 x i8> %0, <8 x i8> %1) local_unnamed_addr {
Entry:
  %2 = shufflevector <8 x i8> %0, <8 x i8> %1, <8 x i32> <i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6>
  ret <8 x i8> %2
}
```

Compiles to the following on znver5:

```asm
.LCPI0_0:
        .byte   15 # 0xf
        .byte   0                               # 0x0
        .byte 2                               # 0x2
        .byte   4 # 0x4
        .byte   6                               # 0x6
 .byte   8                               # 0x8
        .byte   10 # 0xa
        .byte   12                              # 0xc
        .zero   1
        .zero   1
        .zero   1
        .zero 1
        .zero   1
        .zero   1
        .zero   1
        .zero 1
foo:                                    # @foo
        vpunpcklbw xmm0, xmm0, xmm1        # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
 vpshufb xmm0, xmm0, xmmword ptr [rip + .LCPI0_0] # xmm0 = xmm0[15,0,2,4,6,8,10,12,u,u,u,u,u,u,u,u]
        ret
```

Zig trunk for some reason ends up with the following:

```asm
.LCPI0_0:
        .byte 23
        .byte   0
        .byte   1
        .byte   2
        .byte 3
        .byte   4
        .byte   5
        .byte   6
foo:
 vpbroadcastq    xmm2, qword ptr [rip + .LCPI0_0]
        vpermt2b xmm0, xmm2, xmm1
        ret
```

It should be:

```asm
foo:
 vpshldq xmm0, xmm0, xmm1, 8
        ret
```
</pre>

<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWUuT4ygS_jX4QrgCgSTLBx8sV9dGR_ROT0zv9qEvFUjCNtNIuAG5Hr9-A5Bcoiw_qqJ2dg9T4TYiX6Akv8zETbXmm4axBUhykNxOaGu2Ui2-U8Erqn5OClk9Wd4PvoH_kFUhhQHJLcDZ1pidBmQJ8B3Ad898c7Ox7BthHIVsHC8COAM4Oz3ZArIsZcU-VdxIBfCKO2625oI1tGZuNosAngG8WsvGfCupsNQo7gj_1uz3Ry-GvNiflg3wStDGrvXMNwCvNBOsNFw23j5rqpUUbd10sqypvvCG_dbWBVOWZok7qblVCSR74rH4YYlvhioTKIWsUNWyjxXG5OaWIVtVdm4pZaMNwLk2FcA5wAm5tWOMeL2TyjgPJxg7doKxM5AQK4iW7os9erl83dgvKQHOqLNtrXxnpTuTLAN4BXDeZn4LAOfFJaH5Wa7dwqzfR374KGZa1XhNvW3Xa8EAztpOl_ZLuwHgJMnv7fctJ7izl087WeSHyA_YD8QPsR8SP6Tdbm5fe8dSxv1UUPW_9VN_7nxw6tlw8-MuLbhZUe3DIgMxotp6N-38EQjQl83hhKy6L7tgvyt_BhfMFIGZT92X1UuJPa2Xd3CbjXrxEycx834VPvoTj_YmwL70sx8W83mHFb8A6ZKIGcr7tVY_AVkm0U0WoyRBGM_SeIail5XiMyv5ic2EaMT46orkV--4YIPUd6CQ5bNRbfPTJjouDFM-32ZFsI-CN1Q9BXnSk74Wf7LSBIxS1jVrzNdGPAU2Kla0mxUVQgfiFatpsxEslOXKprI90wGZPbKyNWG-5o1hIpASvFBUPa1kFRo1iteB6p6pQmp263fAm81rx64F3ejvnD183bHmw6qE4IUenJBdSO5s3u5edvr1DyYY1ezOBXg-NVRtmH16zNL7NJ4K3rSPllGXu9Zh87nZM9XFqtwzpXjFXq_x1uL0ttr0l5em6GqcApw7x-ddoNvU0LcCB9TOzwM3zm6iZB7H89kMk4SMANeGVoI-CMEWtHwAVxsV60ZOK65LqqrpnoqWTW3voq2N4YI9sn87NDbByw8hN9VPdSHFK4w5z_CqOwifFKbUGMWL1rwCZMftID_Kc7Cf8mYtx7i80Ua1LjSmNTO0ooaGcm8D2pkgxyNBnnxUkOPzQZ68LciNYsydgA2WB0V3w9xzZdR_-fL9nwDnn_8AOLcpzGb_K3Bgy-vqUC6ugceW0cpt_pBpPg4YV8CPXKybY0Y7Zfwu5T1T2odYDPAcgiS3zj53dRFiX__f3l3s5i5AZ6xAkDHs4JPgIafBk50HDzkCTzYKHnJ8eanYmje2Oau0vBeypKLvNjNbTm1rmB0axhj5y8kpPk5wgg4Xg5MiHi25W-2-bewhVfe0qlTQan9qTNdQDZrpBCd40G5315N917efXfW6jR2LuGtNL0NWbp5H3b3Fz9BwEg0neDghw0k8nATW0r5L719budbm3MbxsEl_XwZ8W5eO_itt-cVOXIjy7178r-rFu6x3uRl3l8hpbRTfCeag-Xcb_s42XIjStx1dmM_f14x_DD6P2wAbkRG60KpcbggAWgK0_NeWa1h2cY_6T4r8x0UfWvr6BA_VCQKyyuAj5Bkgn-BLRQqoPtnD10TrN3hcdSCY5WBQb9ASWmkMAbmFQYU5snhqmRciwY7q6gZ0VcPSIOofov4B9w-kf4j7h4NWCsgntz3FzNGy2Hpvdjv0oXdp16xqaCQ0WwbXUgj5wJsNlA3sAEleu59q6_2bL6vfP6N71LvF_90UT4ZBCKMEAkwgelyPMBE8_-c10ZEmvkoPj6wYd7x4hJdeZTW1mr1KdpVKNuYX1DHpGPPCC3rNcqj5zJS0mu-mvV_zlDWLOrK84KHD-3QwfTG037XNrvwpigf4WNcODIMxGupaukOiE0hy5G4PKysWzCwvCnhRwMMBDwc8EvBIwIsDXhzwkoCXBLw04KUBbxbw3Awt4X5nk00x5pEHqSq4M8repBTfQYBzeMBmcjvqKJdsrAGbWWwuSQG2_eMqssTIUtuz__yuuj_bgx5llh98A12hgmupoJY1g4pRLRvImkrDdgcfuNmGSec9qQaTsQQzBq4R2nGqGLM2ljSSsURyCH5_ZIWStCqpNr-s1GNduzz-68KBBVBgqjY4OHbcA-HSAXw2UG9lKypYsFOOHe5Wb0X1axRydsxOLzepFqSakzmdsEU0S1CazNNZOtkuojmaz-g8opiVc5KUUTlfr2eUVCieJ7M1m_AFRjhBKSYoxVGU3szSWZlVhJKUxZhgBGLEasrFjfsJQKrNhGvdskUUJ3iWTgQtmNDuP0YxbtgDdFyALYInamGVpkW70SBGgmujX8wYbgRbfLNRCVIUXhVTpHvPsZobSDWkUHPb2nthUdkXx3duouwEDn6Jm7RKLMIfMDbcbNvippR192tGN0x3SrpbB75zO9cA33Wvtl_g_wQAAP__YDr7EQ">