| Issue |
203776
|
| Summary |
[LoopFullUnroll] cause crazy suboptimal codegen
|
| Labels |
|
| Assignees |
|
| Reporter |
Andarwinux
|
https://godbolt.org/z/fcKdPcr5Y
```c
void test(const float * restrict a, float * restrict b) {
for (int i = 0; i < 16; ++i) {
if (b[i] != 0)
b[i] = a[i] + b[i];
else
b[i] = 1;
}
}
```
-fno-unroll-loops
```asm
.LCPI0_0:
.long 0x3f800000
test:
vmovups zmm0, zmmword ptr [rsi]
vxorps xmm1, xmm1, xmm1
vbroadcastss zmm2, dword ptr [rip + .LCPI0_0]
vcmpneqps k1, zmm0, zmm1
vaddps zmm2 {k1}, zmm0, zmmword ptr [rdi]
vmovups zmmword ptr [rsi], zmm2
vzeroupper
ret
```
-funroll-loops
```asm
.LCPI0_0:
.long 0x3f800000
test:
vmovss xmm2, dword ptr [rsi]
vmovss xmm0, dword ptr [rip + .LCPI0_0]
vxorps xmm1, xmm1, xmm1
vucomiss xmm2, xmm1
vmovaps xmm3, xmm0
jne .LBB0_1
jnp .LBB0_2
.LBB0_1:
vaddss xmm3, xmm2, dword ptr [rdi]
.LBB0_2:
vmovss dword ptr [rsi], xmm3
vmovss xmm2, dword ptr [rsi + 4]
vucomiss xmm2, xmm1
vmovaps xmm1, xmm0
jne .LBB0_3
jnp .LBB0_4
.LBB0_3:
vaddss xmm1, xmm2, dword ptr [rdi + 4]
.LBB0_4:
vmovss dword ptr [rsi + 4], xmm1
vxorps xmm1, xmm1, xmm1
vmovaps xmm3, xmm0
vmovss xmm2, dword ptr [rsi + 8]
vucomiss xmm2, xmm1
jne .LBB0_5
jnp .LBB0_6
.LBB0_5:
vaddss xmm3, xmm2, dword ptr [rdi + 8]
.LBB0_6:
vmovss dword ptr [rsi + 8], xmm3
vmovss xmm2, dword ptr [rsi + 12]
vucomiss xmm2, xmm1
vmovaps xmm1, xmm0
jne .LBB0_7
jnp .LBB0_8
.LBB0_7:
vaddss xmm1, xmm2, dword ptr [rdi + 12]
.LBB0_8:
vmovss dword ptr [rsi + 12], xmm1
vxorps xmm1, xmm1, xmm1
vmovaps xmm3, xmm0
vmovss xmm2, dword ptr [rsi + 16]
vucomiss xmm2, xmm1
jne .LBB0_9
jnp .LBB0_10
.LBB0_9:
vaddss xmm3, xmm2, dword ptr [rdi + 16]
.LBB0_10:
vmovss dword ptr [rsi + 16], xmm3
vmovss xmm2, dword ptr [rsi + 20]
vucomiss xmm2, xmm1
vmovaps xmm1, xmm0
jne .LBB0_11
jnp .LBB0_12
.LBB0_11:
vaddss xmm1, xmm2, dword ptr [rdi + 20]
.LBB0_12:
vmovss dword ptr [rsi + 20], xmm1
vxorps xmm1, xmm1, xmm1
vmovaps xmm3, xmm0
vmovss xmm2, dword ptr [rsi + 24]
vucomiss xmm2, xmm1
jne .LBB0_13
jnp .LBB0_14
.LBB0_13:
vaddss xmm3, xmm2, dword ptr [rdi + 24]
.LBB0_14:
vmovss dword ptr [rsi + 24], xmm3
vmovss xmm2, dword ptr [rsi + 28]
vucomiss xmm2, xmm1
vmovaps xmm1, xmm0
jne .LBB0_15
jnp .LBB0_16
.LBB0_15:
vaddss xmm1, xmm2, dword ptr [rdi + 28]
.LBB0_16:
vmovss dword ptr [rsi + 28], xmm1
vxorps xmm1, xmm1, xmm1
vmovaps xmm3, xmm0
vmovss xmm2, dword ptr [rsi + 32]
vucomiss xmm2, xmm1
jne .LBB0_17
jnp .LBB0_18
.LBB0_17:
vaddss xmm3, xmm2, dword ptr [rdi + 32]
.LBB0_18:
vmovss dword ptr [rsi + 32], xmm3
vmovss xmm2, dword ptr [rsi + 36]
vucomiss xmm2, xmm1
vmovaps xmm1, xmm0
jne .LBB0_19
jnp .LBB0_20
.LBB0_19:
vaddss xmm1, xmm2, dword ptr [rdi + 36]
.LBB0_20:
vmovss dword ptr [rsi + 36], xmm1
vxorps xmm1, xmm1, xmm1
vmovaps xmm3, xmm0
vmovss xmm2, dword ptr [rsi + 40]
vucomiss xmm2, xmm1
jne .LBB0_21
jnp .LBB0_22
.LBB0_21:
vaddss xmm3, xmm2, dword ptr [rdi + 40]
.LBB0_22:
vmovss dword ptr [rsi + 40], xmm3
vmovss xmm2, dword ptr [rsi + 44]
vucomiss xmm2, xmm1
vmovaps xmm1, xmm0
jne .LBB0_23
jnp .LBB0_24
.LBB0_23:
vaddss xmm1, xmm2, dword ptr [rdi + 44]
.LBB0_24:
vmovss dword ptr [rsi + 44], xmm1
vxorps xmm1, xmm1, xmm1
vmovaps xmm3, xmm0
vmovss xmm2, dword ptr [rsi + 48]
vucomiss xmm2, xmm1
jne .LBB0_25
jnp .LBB0_26
.LBB0_25:
vaddss xmm3, xmm2, dword ptr [rdi + 48]
.LBB0_26:
vmovss dword ptr [rsi + 48], xmm3
vmovss xmm2, dword ptr [rsi + 52]
vucomiss xmm2, xmm1
vmovaps xmm1, xmm0
jne .LBB0_27
jnp .LBB0_28
.LBB0_27:
vaddss xmm1, xmm2, dword ptr [rdi + 52]
.LBB0_28:
vmovss dword ptr [rsi + 52], xmm1
vxorps xmm1, xmm1, xmm1
vmovaps xmm3, xmm0
vmovss xmm2, dword ptr [rsi + 56]
vucomiss xmm2, xmm1
jne .LBB0_29
jnp .LBB0_30
.LBB0_29:
vaddss xmm3, xmm2, dword ptr [rdi + 56]
.LBB0_30:
vmovss dword ptr [rsi + 56], xmm3
vmovss xmm2, dword ptr [rsi + 60]
vucomiss xmm2, xmm1
jne .LBB0_31
jnp .LBB0_32
.LBB0_31:
vaddss xmm0, xmm2, dword ptr [rdi + 60]
.LBB0_32:
vmovss dword ptr [rsi + 60], xmm0
ret
```
SLP is unlikely to be able to handle such cases, so report this as LoopFullUnroll issue.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs