From f29c8ad917e5fdc8fdd3d43707073be217bad625 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 18 Apr 2009 07:01:54 +0000 Subject: [PATCH] fix incorrect lowering of __builtin_ia32_shufpd, rdar://6803924 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69428 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGBuiltin.cpp | 3 ++- test/CodeGen/x86.c | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 5ef01ac5f0..e7adf72190 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -891,7 +891,8 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, } case X86::BI__builtin_ia32_shufpd: { unsigned i = cast(Ops[2])->getZExtValue(); - return EmitShuffleVector(Ops[0], Ops[1], i & 1, (i & 2) + 2, "shufpd"); + return EmitShuffleVector(Ops[0], Ops[1], i & 1, + ((i & 2) >> 1)+2, "shufpd"); } case X86::BI__builtin_ia32_punpcklbw128: return EmitShuffleVector(Ops[0], Ops[1], 0, 16, 1, 17, 2, 18, 3, 19, diff --git a/test/CodeGen/x86.c b/test/CodeGen/x86.c index d12f26c0df..10808dca87 100644 --- a/test/CodeGen/x86.c +++ b/test/CodeGen/x86.c @@ -8,8 +8,16 @@ // RUN: grep "st" %t1 && // RUN: grep "st(1)" %t1 -void f() { +void test1() { int d1, d2; asm ("" : "=a" (d1), "=b" (d2) : "c" (0), "d" (0), "S" (0), "D" (0), "t" (0), "u" (0)); } + + +// rdar://6803924 +typedef double T __attribute__ ((__vector_size__ (16))); +T test2(T va) { + return __builtin_ia32_shufpd(va, va, 3); +} +