[LLVMbugs] [Bug 13841] New: clang misscompiles complex asm at -O0
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Thu Sep 13 14:17:34 PDT 2012
http://llvm.org/bugs/show_bug.cgi?id=13841
Bug #: 13841
Summary: clang misscompiles complex asm at -O0
Product: new-bugs
Version: unspecified
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: michaelni at gmx.at
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
Tested with clang version 3.1 (trunk 144800) on ubuntu and clang version 3.0
(tags/RELEASE_30/final) on netbsd
The problem can be reproduced with ffmpeg 51fa6538 using the regression test
suite: ./configure --cc=clang --samples=yourpathto/fate-suite/ --enable-gpl
--disable-optimizations && make -j12 fate
(you can fetch the fate suite with make fate-rsync)
The problem is in the get_cabac_inline_x86() function and also occurs without
it being inlined. It seems clang forgets loading the input for at least the
"+&r"(c->range) operand. A workaround is to use "=&r" and a explicit "2" later
(this workaround will likely end in ffmpeg soon)
The diff from changing the 2 "+&r" to "=&r" with "1" and "2" later is:
(you can see here that r10 is uninitialized before and afterwards the
equivalent r9 is initialized)
get_cabac_inline_x86: # @get_cabac_inline_x86
-.Ltmp912:
+.Ltmp910:
.cfi_startproc
.Lfunc_begin23:
.loc 6 158 0 # libavcodec/x86/cabac.h:158:0
# BB#0: # %entry
- pushq %rbx
-.Ltmp913:
- .cfi_def_cfa_offset 16
-.Ltmp914:
- .cfi_offset %rbx, -16
movq %rdi, -8(%rsp)
movq %rsi, -16(%rsp)
.loc 6 169 5 prologue_end # libavcodec/x86/cabac.h:169:5
-.Ltmp915:
+.Ltmp911:
movq -8(%rsp), %rsi
- movl (%rsi), %eax
movq -8(%rsp), %rdi
- movl 4(%rdi), %ecx
- movq -16(%rsp), %rdx
- movq -8(%rsp), %r8
- movl %ecx, -28(%rsp) # 4-byte Spill
+ movq -16(%rsp), %rax
+ movq -8(%rsp), %rcx
+ movq -8(%rsp), %rdx
+ movl (%rdx), %r8d
+ movq -8(%rsp), %rdx
+ movl 4(%rdx), %r9d
+ movq %rcx, -32(%rsp) # 8-byte Spill
+ movq -32(%rsp), %rdx # 8-byte Reload
#APP
- movzbl (%rdx) , %r9d
- mov %r10d , %r11d
- and $0xC0 , %r10d
- movzbl ff_h264_cabac_tables+512(%r9d, %r10d, 2), %r10d
- sub %r10d , %r11d
+ movzbl (%rax) , %r10d
+ mov %r9d , %r11d
+ and $0xC0 , %r9d
+ movzbl ff_h264_cabac_tables+512(%r10d, %r9d, 2), %r9d
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list