<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61433>61433</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang generates strange code for empty SVE vector initialization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
SchrodingerZhu
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/zEao8394M
So for the following code:
```c++
#include <arm_sve.h>
svuint8_t
encode0 (svuint8_t x, svuint8_t y)
{
return sveor_u8_x(svptrue_b8 (), svaesmc_u8 (svaese_u8 (x, svdup_n_u8(0))), y);
}
svuint8_t
encode1 (svuint8_t x, svuint8_t y)
{
return sveor_u8_x(svptrue_b8 (), svaesmc_u8 (svaese_u8 (x, svuint8_t {})), y);
}
```
clang generates very under-optimized code for the second case. `GCC trunk` does not have such issue.
```asm
encode0(__SVUint8_t, __SVUint8_t): // @encode0(__SVUint8_t, __SVUint8_t)
mov z2.b, #0 // =0x0
aese z0.b, z0.b, z2.b
aesmc z0.b, z0.b
eor z0.d, z0.d, z1.d
ret
encode1(__SVUint8_t, __SVUint8_t): // @encode1(__SVUint8_t, __SVUint8_t)
mov w9, #2
mov w8, wzr
mov w10, #1
index z2.b, #0, #1
ptrue p0.b
mov z4.b, w9
mov w9, #3
fmov s3, w8
mov z5.b, w10
mov w10, #4
cmpeq p1.b, p0/z, z2.b, z4.b
cmpeq p2.b, p0/z, z2.b, z5.b
mov z4.b, w9
mov w9, #5
mov z3.b, p2/m, w8
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w10
mov w10, #6
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w9
mov w9, #7
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w10
mov w10, #8
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w9
mov w9, #9
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w10
mov w10, #10
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w9
mov w9, #11
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w10
mov w10, #12
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w9
mov w9, #13
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w10
mov w10, #14
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w9
mov w9, #15
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w10
mov z3.b, p1/m, w8
cmpeq p1.b, p0/z, z2.b, z4.b
mov z4.b, w9
mov z3.b, p1/m, w8
cmpeq p0.b, p0/z, z2.b, z4.b
mov z3.b, p0/m, w8
aese z0.b, z0.b, z3.b
aesmc z0.b, z0.b
eor z0.d, z0.d, z1.d
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV01z4jgT_jXiogqlD2Pkgw8JhPf0nlI7h724hN3B2rUlVpJJwq_fkm2-HFjITGYylLFK7qef7n7UGEk6p1YaIEWTBzSZj2TjS2PTp7y0plB6BfbPshktTfGWlt6vHeL3iC0QW6xMsTSVHxu7QmyxDd9HaQRPov8jMkfkvrs_GfxsLPYl4GdTVeZF6RXOTQGB6AiHYtJdOWIP4eqeMq50XjUFYMRn0taZ28C4RPyxs7tNo7QXme-mGIMO3AQjJvY2_IrYDB-mb4glOzya9pGwBd9Yjd0GjM0akb22FGtvG8iWIhAGt5ZIgqvzrBFdFAkO-kkfqGjWmc4agZggrVPSu7aR-cMh-PxYAowvlENvLedQDcafWdAuVOCfzm-oZ7eY3TSvpF7hFWiw0oPDG7BvuNEF2Duz9qpWWyjanti3ioPc6ALn0sEYo5j8bzbD3jb6bxQTXBhwWBuPS7kB7Jq8xMq5BsaD4NLV3ZO-KRATWfb07Y9eYjbDJ9ME8Xvc9TZGEbnVaa93-NRm045bNl4GLGKc7Dn5nLySU3yQusWTDr8fg_8QWedD5AkCjMU9V9EjupGOi0OPHytCv0eR605nFXlJej3YBbsI9pet7c3755T0jvTUUekCXgdSn0e2LR_Gg2T7dYo655drWfNT-3MPcLz1FkPaSU9LyQXefVXRKSCv1_BPyJV2DGvSvVxn-zrblM_7sIs-k6FPSOTm4icXmpz38Rhii_q8EDsIfQf5noLfLdt1feMruX9OYkP2obLvJJ3-WFo_lNR10cRvIdqldjxj_3mZfUC1S4j_SO7nNhmlX7qONyjGfvH74lprUf67KxZ9bY8d2Q-iXft_-BrRfvXP7gPlko_0Lj8Cn6W9uInk5zeRn7OFHOzxj--jIuVFwhM5gpTGUyFEkkRiVKaCRMvplNMojiI5iae0EJMpLxJKyZTH9HmkUkYYJ5xOaEQTIsb5JGckipIoApBxQsI2tJaqGlfVpg5nz1G79U9jGnE-quQSKrc7yto0gO6WzcqhiFTKeXdw88pXkM4GJxPnrdQrOBxGoF77N_z07RFvIPfGYqWVV7JSW-mV0aPGVsNzsfJlsxznpkZsEcL1w93amr8g94gt2pQdYos2638DAAD__xA1-io">