| Issue |
61433
|
| Summary |
Clang generates strange code for empty SVE vector initialization
|
| Labels |
|
| Assignees |
|
| Reporter |
SchrodingerZhu
|
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
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs