[Bug tree-optimization/112508] New: [14 Regression] Size regression when using -Os starting with r14-4089-gd45ddc2c04e
theodort at inf dot ethz.ch
gcc-bugzilla@gcc.gnu.org
Mon Nov 13 11:11:45 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112508
Bug ID: 112508
Summary: [14 Regression] Size regression when using -Os
starting with r14-4089-gd45ddc2c04e
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: theodort at inf dot ethz.ch
Target Milestone: ---
https://godbolt.org/z/qE79f7qvW
Given the following code:
static int b, c = 8, d, e, f, g = 9;
static char h = 3;
static void(a)(int, unsigned i) {
if (!(((i) >= 1) && ((i) <= 3421036188))) {
__builtin_unreachable();
}
}
int main1() {
for (; h; --h) {
for (; f <= 9; f++) {
if (d) g = 0;
if (e) continue;
a(b, g && c);
}
e = d = 0;
a(0, 3421036188);
}
}
gcc-trunk -Os generates more and more complex code:
main1:
movl d(%rip), %edi
movl g(%rip), %esi
xorl %edx, %edx
xorl %ecx, %ecx
movb h(%rip), %r8b
movl e(%rip), %r9d
xorl %r10d, %r10d
movl f(%rip), %eax
testb %r8b, %r8b
jne .L49
testb %r10b, %r10b
je .L37
movb $0, h(%rip)
testb %dl, %dl
je .L41
movl %eax, f(%rip)
jmp .L41
.L37:
testb %dl, %dl
je .L44
movl %eax, f(%rip)
jmp .L44
.L41:
movl %r9d, e(%rip)
testb %cl, %cl
je .L45
movl %esi, g(%rip)
.L45:
movl %edi, d(%rip)
jmp .L47
.L44:
testb %cl, %cl
je .L47
movl %esi, g(%rip)
.L47:
xorl %eax, %eax
ret
.L49:
pushq %rbx
.L35:
movl %eax, %r11d
.L4:
movl %r11d, %eax
cmpl $9, %r11d
jg .L51
testl %edi, %edi
je .L3
movb $1, %cl
xorl %esi, %esi
.L3:
movl %esi, %ebx
incl %r11d
orl %r9d, %ebx
jne .L22
testb %r10b, %r10b
je .L5
movb %r8b, h(%rip)
testb %dl, %dl
je .L7
movl %eax, f(%rip)
jmp .L7
.L5:
testb %dl, %dl
je .L8
movl %eax, f(%rip)
jmp .L8
.L7:
xorl %esi, %esi
movl %esi, e(%rip)
testb %cl, %cl
je .L9
xorl %edx, %edx
movl %edx, g(%rip)
.L9:
movl %edi, d(%rip)
.L19:
.L22:
movb $1, %dl
jmp .L4
.L51:
decl %r8d
xorl %r9d, %r9d
movb $1, %r10b
xorl %edi, %edi
testb %r8b, %r8b
jne .L35
testb %r10b, %r10b
je .L12
movb $0, h(%rip)
testb %dl, %dl
je .L14
movl %r11d, f(%rip)
jmp .L14
.L12:
testb %dl, %dl
je .L16
movl %r11d, f(%rip)
jmp .L16
.L14:
movl %r9d, e(%rip)
testb %cl, %cl
je .L17
movl %esi, g(%rip)
.L17:
movl %edi, d(%rip)
jmp .L18
.L8:
xorl %eax, %eax
movl %eax, g(%rip)
jmp .L19
.L16:
testb %cl, %cl
je .L18
movl %esi, g(%rip)
.L18:
xorl %eax, %eax
popq %rbx
ret
gcc-13 -Os -o 13.o test.c -c
gcc-trunk -Os -o 14.o test.c -c
size 13.o 14.o
text data bss dec hex filename
235 8 12 255 ff 13.o
422 8 12 442 1ba 14.o
gcc-13.2.0 -Os:
main1:
movb h(%rip), %dil
xorl %r8d, %r8d
xorl %esi, %esi
xorl %ecx, %ecx
movl d(%rip), %edx
movl f(%rip), %eax
movb $1, %r9b
xorl %r11d, %r11d
movl $10, %r10d
.L2:
testb %dil, %dil
je .L5
movl %eax, %ecx
.L6:
cmpl $9, %ecx
jg .L25
testl %edx, %edx
movb $1, %r8b
cmovne %r9d, %esi
incl %ecx
jmp .L6
.L25:
movl %r10d, %edx
movb $1, %cl
subl %eax, %edx
cmpl $10, %eax
cmovg %r11d, %edx
decl %edi
addl %edx, %eax
xorl %edx, %edx
jmp .L2
.L5:
testb %cl, %cl
je .L7
xorl %edi, %edi
movb $0, h(%rip)
movl %edi, e(%rip)
.L7:
testb %r8b, %r8b
je .L8
movl %eax, f(%rip)
.L8:
testb %sil, %sil
je .L9
xorl %eax, %eax
movl %eax, g(%rip)
.L9:
testb %cl, %cl
je .L10
movl %edx, d(%rip)
.L10:
ret
Bisects to r14-4089-gd45ddc2c04e
More information about the Gcc-bugs
mailing list