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

Reply via email to