[LLVMbugs] [Bug 5739] New: _mm_alignr_epi8 sets immediate wrong in llvm-gcc, clang

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Wed Dec 9 14:26:29 PST 2009


http://llvm.org/bugs/show_bug.cgi?id=5739

           Summary: _mm_alignr_epi8 sets immediate wrong in llvm-gcc, clang
           Product: new-bugs
           Version: 2.6
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Keywords: miscompilation
          Severity: normal
          Priority: P2
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: llvm at shiftleft.org
                CC: llvmbugs at cs.uiuc.edu


The SSE3 function _mm_alignr_epi8, which lowers to palignr, is given the wrong
immediate by both llvm-gcc and clang.

Version numbers:

llvm-gcc:
llvm-gcc (GCC) 4.2.1 (Based on Apple Inc. build 5649) (LLVM build)

clang:
clang version 1.1 (trunk 85640)
Target: x86_64-unknown-linux-gnu
Thread model: posix

LLVM:
Low Level Virtual Machine (http://llvm.org/):
  llvm version 2.7svn
  DEBUG build with assertions.
  Built Oct 30 2009 (18:06:39).
  Host: x86_64-unknown-linux-gnu

gcc:
gcc (Ubuntu 4.4.1-4ubuntu8) 4.4.1

Linux distro:
Ubuntu 8.10 "Karmic"
Linux peppercorn 2.6.31-16-generic #52-Ubuntu SMP Thu Dec 3 22:07:16 UTC 2009
x86_64 GNU/Linux

Test case:
////////////////////////////////////////////
#include <tmmintrin.h>

int main(int argc, char **argv) {
  __m128i x = _mm_setzero_si128(), y = _mm_alignr_epi8(x, x, 1);

  return 0;
}
////////////////////////////////////////////

$ llvm-gcc -S -mssse3 test.c -o - | grep palignr
        palignr $8, %xmm1, %xmm1

$ clang -S -mssse3 test.c -o - | grep palignr
        palignr $0, %xmm1, %xmm1

$ gcc -S -mssse3 test.c -o - | grep palignr
        palignr $1, %xmm1, %xmm0

gcc is correct, but clang and llvm-gcc give different wrong results.  From
other testing, it appears that llvm-gcc always sets the immediate too high by a
factor of 8.  Clang sometimes sets it to 0 and sometimes sets it to 1.

The code in the test case is obviously dead, but the optimizer is off here and
the bug occurs in real code as well.


-- 
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