[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#576111: gcc-4.4 miscompiles __builtin_expect in -O0



For what it's worth, there is at least _another_ regression introduced
by the -4 or -5 revision in -O0, that I've not been able to track down
yet. I mean that when I remove all my uses of __builtin_expect in the
code that lead me to find out about this bug, I still have (at least)
another issue that pops up at the -O0 level that never shows up with any
other gcc release. And I deeply trust the mentioned code to be correct.
The code in question uses a lot of gcc __builtin_* functions if that
helps (ctz, clz, bswap among other).

On Thu, Apr 01, 2010 at 01:38:20AM +0200, Pierre Habouzit wrote:
> Package: gcc-4.4
> Version: 4.4.3-4
> Severity: grave
> 
> Since gcc-4.4 version 4.4.3-4 (and yes -5 is still affected), gcc miscompiles
> __builtin_expect when no optimization is set (at least).
> 
> Test case:
> 
>     int foo(int t) {
> 	if (__builtin_expect(t & 0x100, 0))
> 	    return 0;
> 	return 1;
>     }
> 
> 
> Bad assembly:
> 
>     gcc -O0 -S -o /dev/stdout a.c
> 	    .file	"a.c"
> 	    .text
>     .globl foo
> 	    .type	foo, @function
>     foo:
>     .LFB0:
> 	    .cfi_startproc
> 	    pushq	%rbp
> 	    .cfi_def_cfa_offset 16
> 	    movq	%rsp, %rbp
> 	    .cfi_offset 6, -16
> 	    .cfi_def_cfa_register 6
> 	    movl	%edi, -4(%rbp)
> 	    movl	-4(%rbp), %eax
> 	    cltq
> 	    andl	$256, %eax
> 	    movzbl	%al, %eax            <---------------------
> 	    testq	%rax, %rax
> 	    je	.L2
> 	    movl	$0, %eax
> 	    jmp	.L3
>     .L2:
> 	    movl	$1, %eax
>     .L3:
> 	    leave
> 	    ret
> 	    .cfi_endproc
>     .LFE0:
> 	    .size	foo, .-foo
> 	    .ident	"GCC: (Debian 4.4.3-5) 4.4.3"
> 	    .section	.note.GNU-stack,"",@progbits
> 
> The buggy line is marked with the arrow.
> gcc-4.4 version 4.4.3-3 is correct and doesn't perform the buggy movzbl.

-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org



Reply to: