------- Comment #12 from rguenther at suse dot de 2007-06-26 21:55 ------- Subject: Re: [4.3 Regression] attribute always_inline -> sorry, unimplemented: recursive inlining
On Tue, 26 Jun 2007, pinskia at gcc dot gnu dot org wrote: > I can find a testcase, if we change where we generate the promotion at the RTL > expansion time, worse code. > Simple testcase: > > int f(int b, char a) > { > if (b) > a = 1; > g(a); > } > > You can see the difference by looking 3.4 vs 4.2's code generation :). I have a hard time deciding if 3.4 or 4.1 is better: 3.4: f: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movzbl 12(%ebp), %eax testl %edx, %edx je .L2 movb $1, %al .L2: movsbl %al,%eax movl %eax, 8(%ebp) popl %ebp jmp g 4.1 (same as 4.2): f: pushl %ebp movl $1, %edx movl %esp, %ebp movl 8(%ebp), %ecx movzbl 12(%ebp), %eax testl %ecx, %ecx je .L7 movl %edx, 8(%ebp) popl %ebp jmp g .p2align 4,,7 .L7: movsbl %al,%edx movl %edx, 8(%ebp) popl %ebp jmp g -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32492