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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] Innefiscient codegen in shuffle-tlb34.ll
        </td>
    </tr>

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

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

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

<pre>
    The current codegen:
```
define <8 x i8> @insert4_v8i8(<8 x i8> %a, <16 x i8> %b, <8 x i8> %c, <16 x i8> %d) {
; CHECK-LABEL: insert4_v8i8:
; CHECK:       // %bb.0:
; CHECK-NEXT:    adrp x8, .LCPI14_0
; CHECK-NEXT:    adrp x9, .LCPI14_1
; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
; CHECK-NEXT:    mov v4.16b, v3.16b
; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q2
; CHECK-NEXT:    mov v0.d[1], v2.d[0]
; CHECK-NEXT:    mov v3.16b, v1.16b
; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI14_0]
; CHECK-NEXT:    ldr q2, [x9, :lo12:.LCPI14_1]
; CHECK-NEXT:    tbl v0.8b, { v0.16b }, v1.8b
; CHECK-NEXT:    tbl v1.16b, { v3.16b, v4.16b }, v2.16b
; CHECK-NEXT:    trn1 v0.4h, v1.4h, v0.4h
; CHECK-NEXT:    trn2 v0.4h, v0.4h, v1.4h
; CHECK-NEXT:    ret
  %e1 = extractelement <8 x i8> %a, i32 4
  %e2 = extractelement <8 x i8> %c, i32 0
  %e3 = extractelement <16 x i8> %b, i32 15
  %e4 = extractelement <16 x i8> %d, i32 11
  %e5 = extractelement <8 x i8> %c, i32 6
  %e6 = extractelement <8 x i8> %a, i32 3
  %e7 = extractelement <16 x i8> %d, i32 8
  %e8 = extractelement <16 x i8> %b, i32 12
  %i1 = insertelement <8 x i8> undef, i8 %e1, i32 0
  %i2 = insertelement <8 x i8> %i1, i8 %e2, i32 1
  %i3 = insertelement <8 x i8> %i2, i8 %e3, i32 2
  %i4 = insertelement <8 x i8> %i3, i8 %e4, i32 3
  %i5 = insertelement <8 x i8> %i4, i8 %e5, i32 4
  %i6 = insertelement <8 x i8> %i5, i8 %e6, i32 5
  %i7 = insertelement <8 x i8> %i6, i8 %e7, i32 6
  %i8 = insertelement <8 x i8> %i7, i8 %e8, i32 7
  ret <8 x i8> %i8
}
```

I think we should expect this instead:
```
define <8 x i8> @insert4_v8i8(<8 x i8> %a, <16 x i8> %b, <8 x i8> %c, <16 x i8> %d) {
; CHECK-LABEL: insert4_v8i8:
; CHECK:       // %bb.0:
; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
; CHECK-NEXT:    dup v4.8b, v0.b[4]
; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q2
; CHECK-NEXT:    mov v4.b[1], v2.b[0]
; CHECK-NEXT:    mov v4.b[2], v1.b[15]
; CHECK-NEXT:    mov v4.b[3], v3.b[11]
; CHECK-NEXT:    mov v4.b[4], v2.b[6]
; CHECK-NEXT:    mov v4.b[5], v0.b[3]
; CHECK-NEXT:    mov v4.b[6], v3.b[8]
; CHECK-NEXT:    mov v4.b[7], v1.b[12]
; CHECK-NEXT:    fmov d0, d4
; CHECK-NEXT:    ret
  %e1 = extractelement <8 x i8> %a, i32 4
  %e2 = extractelement <8 x i8> %c, i32 0
  %e3 = extractelement <16 x i8> %b, i32 15
  %e4 = extractelement <16 x i8> %d, i32 11
  %e5 = extractelement <8 x i8> %c, i32 6
  %e6 = extractelement <8 x i8> %a, i32 3
  %e7 = extractelement <16 x i8> %d, i32 8
  %e8 = extractelement <16 x i8> %b, i32 12
  %i1 = insertelement <8 x i8> undef, i8 %e1, i32 0
  %i2 = insertelement <8 x i8> %i1, i8 %e2, i32 1
  %i3 = insertelement <8 x i8> %i2, i8 %e3, i32 2
  %i4 = insertelement <8 x i8> %i3, i8 %e4, i32 3
  %i5 = insertelement <8 x i8> %i4, i8 %e5, i32 4
  %i6 = insertelement <8 x i8> %i5, i8 %e6, i32 5
  %i7 = insertelement <8 x i8> %i6, i8 %e7, i32 6
  %i8 = insertelement <8 x i8> %i7, i8 %e8, i32 7
  ret <8 x i8> %i8
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztmEuPmzwUhn8N2ViDfOWyYJFkpuqoo6qLLrqrAHuCWw-kYNLpv69tION8pQmRqm-VKErw5XnP60vsoxQN_5V9rgQo-7YVtQZlw8VO1AFZB_A-gOsgguPbFbl4lrUAAdkm4BXIJCAPIKBQ1p1oNf16SEwVTk6bMcsDvLUMivzaYqw96VrOduUBTkEQb0ZPZAO27x-2H-6e1puHJ-MVnBg4ep_62R7DK8DvzNtFL0L4Z8-7jw9fPo_dc97uwWtiDYVP20-PiH6FF7unfnd0pvvo5LtUytaYiTVVlENXI_hYGKt_nAv80hzAgYYochN6IO7p6sDYD4yPgfGlwDDkAduggN276NgVoS1eAMnRMbrgWPEWcOQ2BtsMC2JaVIOw-XpbmrMhrYYZzKiRzmug8xq6UHa8ybBx440tGOfm8X4cR3JuGA5H06gd_zYH9EQJX5gR3dbIRqfVGHh8cDVnMexhp_zfsVboodVuHiaQmbl7IF51m5daKPFiz43Zn7wkGFAfxUvQckKhj5K_oDNnimUR82G6COZHGPkwu8p05KPRVVNFfDS-znLis8mVc4U9WA7LOxyos5b72hwOjk2G_TC3XhJfknGxPBl8tOPLkCUy2JMhk8zJoOgSGeLJ0LlFkWyJDPVk2NzPQEZLZJgnE00y_q6W8RKZyJOJ5zapTJbIxJ5MMsnEk4w5If5Exi1pz7S5VGL4fAS6kvV38FOArmp6xc223YtS2-rOmtIi57ds5F_mC7zf2_tmuMbMJVCYG5Gev_n-cc5AXUwvZygW5gwDiCcQDTpsMUkmkgzkhQvfI-mp2WgxyCYQvjlYBEanXpPFYPyf6cHnyWeLcmgJTm9ZwC0LuGUBtyzgf8gCVjwjPCVpvtJSK5GZo2q9bssqskcteKxrc7l3pfT-lDDuTJLQPz8rcadVQWio1KpvVVZpve_s9emuqZ3UVV-EZfNiCkodpq-7fdt8M6mFKcqu60VnHlgU0XhVZRShPOEx4nFJY0ZIkaS0FIRgnmOU5GSl8kKozpoMMK7FT-AkzLMxu5IZhhjDGCOYYsLiEMVlmkYRgznkJctLk5SIl1yq0PoIm3a3ajNnqeh3nWlUstPdW2PedXJXCzcnVj_vddW0GTepUK5q-bpywTNn_jcuE4-A">