https://llvm.org/bugs/show_bug.cgi?id=24590
Bug ID: 24590 Summary: clang-cl generates wrong addressing mode for table lookup. Product: tools Version: trunk Hardware: PC OS: Windows NT Status: NEW Severity: normal Priority: P Component: llvmc Assignee: unassignedb...@nondot.org Reporter: fbarch...@google.com CC: llvm-bugs@lists.llvm.org Classification: Unclassified Created attachment 14781 --> https://llvm.org/bugs/attachment.cgi?id=14781&action=edit source for test to reproduce table index bug This code generates the wrong code for clang-cl. The indexing is lost. const int fixed_invtbl8[256] = { 0, }; void f() { char file[] = ""; __asm movd xmm0, dword ptr [fixed_invtbl8 + eax * 4] } Visual C: cl /c test.c dumpbin -disasm test.obj 0000000C: 66 0F 6E 04 85 00 movd xmm0,dword ptr _fixed_invtbl8[eax*4] 00 00 00 objdump -d test.obj c: 66 0f 6e 04 85 00 00 movd 0x0(,%eax,4),%xmm0 13: 00 00 clang-cl /c test.c dumpbin -disasm test.obj 00000034: 66 0F 6E 05 00 00 movd xmm0,dword ptr [_fixed_invtbl8] 00 00 34: 66 0f 6e 05 00 00 00 movd 0x0,%xmm0 3b: 00 The code will build and run, but produces the wrong result - it uses the first int from the table. A work around is to put the table into a register: const int fixed_invtbl8[256] = { 0, }; void f() { char file[] = ""; __asm lea ebx, fixed_invtbl8 __asm movd xmm0, dword ptr [ebx + eax * 4] } 35: 8D 1D 00 00 00 00 lea ebx,[_fixed_invtbl8] 3B: 66 0F 6E 04 83 movd xmm0,dword ptr [ebx+eax*4] Using clang-cl provided by chromium third_party\llvm-build\Release+Asserts\bin\clang-cl.exe -- You are receiving this mail because: You are on the CC list for the bug.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs