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