https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69692
Bug ID: 69692 Summary: STV is disabled even when stack is aligned Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com CC: ienkovich at gcc dot gnu.org Target Milestone: --- Target: i686 [hjl@gnu-skl-1 pr69677]$ cat x.i struct bar { int i[16] __attribute__ ((aligned(16))); }; extern void fn2 (void); long long a, b; struct bar fn1 (struct bar x) { long long c = a; a = b ^ a; fn2 (); a = c; return x; } [hjl@gnu-skl-1 pr69677]$ make x.s /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -m32 -O2 -msse2 -mno-accumulate-outgoing-args -mpreferred-stack-boundary=2 -S x.i [hjl@gnu-skl-1 pr69677]$ cat x.s .file "x.i" .text .p2align 4,,15 .globl fn1 .type fn1, @function fn1: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 pushl %edi pushl %esi pushl %ebx pushl %ecx .cfi_offset 7, -12 .cfi_offset 6, -16 .cfi_offset 3, -20 .cfi_offset 1, -24 leal 8(%ebp), %ecx subl $4, %esp movl a, %eax movl a+4, %edi movl (%ecx), %ebx movl %ecx, %esi movl %eax, %edx xorl b, %edx movl %eax, -20(%ebp) movl %edx, a movl b+4, %edx xorl %edi, %edx movl %edx, a+4 call fn2 movl -20(%ebp), %eax movl %edi, a+4 movl %eax, a movl 4(%esi), %eax movl %eax, (%ebx) movl 8(%esi), %eax movl %eax, 4(%ebx) movl 12(%esi), %eax movl %eax, 8(%ebx) movl 16(%esi), %eax movl %eax, 12(%ebx) movl 20(%esi), %eax movl %eax, 16(%ebx) movl 24(%esi), %eax movl %eax, 20(%ebx) movl 28(%esi), %eax movl %eax, 24(%ebx) movl 32(%esi), %eax movl %eax, 28(%ebx) movl 36(%esi), %eax movl %eax, 32(%ebx) movl 40(%esi), %eax movl %eax, 36(%ebx) movl 44(%esi), %eax movl %eax, 40(%ebx) movl 48(%esi), %eax movl %eax, 44(%ebx) movl 52(%esi), %eax movl %eax, 48(%ebx) movl 56(%esi), %eax movl %eax, 52(%ebx) movl 60(%esi), %eax movl %eax, 56(%ebx) movl 64(%esi), %eax movl %eax, 60(%ebx) addl $4, %esp movl %ebx, %eax popl %ecx .cfi_restore 1 popl %ebx .cfi_restore 3 popl %esi .cfi_restore 6 popl %edi .cfi_restore 7 popl %ebp .cfi_restore 5 .cfi_def_cfa 4, 4 ret $4 .cfi_endproc .LFE0: .size fn1, .-fn1 .comm b,8,8 .comm a,8,8 .ident "GCC: (GNU) 6.0.0 20160205 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-skl-1 pr69677]$