[llvm-commits] [llvm-gcc-4.2] r51532 - /llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp

Evan Cheng evan.cheng at apple.com
Fri May 23 19:15:45 PDT 2008


Author: evancheng
Date: Fri May 23 21:15:45 2008
New Revision: 51532

URL: http://llvm.org/viewvc/llvm-project?rev=51532&view=rev
Log:
Lower shufpd, unpckhpd, unpcklpd, and movsd intrinsics into shuffles.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp?rev=51532&r1=51531&r2=51532&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386.cpp Fri May 23 21:15:45 2008
@@ -147,6 +147,16 @@
       Result = Ops[0];
     }
     return true;
+  case IX86_BUILTIN_SHUFPD:
+    if (ConstantInt *Elt = dyn_cast<ConstantInt>(Ops[2])) {
+      int EV = Elt->getZExtValue();
+      Result = BuildVectorShuffle(Ops[0], Ops[1],
+                                  ((EV & 0x01) >> 0),   ((EV & 0x02) >> 1)+2);
+    } else {
+      error("%Hmask must be an immediate", &EXPR_LOCATION(exp));
+      Result = Ops[0];
+    }
+    return true;
   case IX86_BUILTIN_PSHUFW:
   case IX86_BUILTIN_PSHUFD:
     if (ConstantInt *Elt = dyn_cast<ConstantInt>(Ops[1])) {
@@ -229,9 +239,15 @@
   case IX86_BUILTIN_UNPCKHPS:
     Result = BuildVectorShuffle(Ops[0], Ops[1], 2, 6, 3, 7);
     return true;
+  case IX86_BUILTIN_UNPCKHPD:
+    Result = BuildVectorShuffle(Ops[0], Ops[1], 1, 3);
+    return true;
   case IX86_BUILTIN_UNPCKLPS:
     Result = BuildVectorShuffle(Ops[0], Ops[1], 0, 4, 1, 5);
     return true;
+  case IX86_BUILTIN_UNPCKLPD:
+    Result = BuildVectorShuffle(Ops[0], Ops[1], 0, 2);
+    return true;
   case IX86_BUILTIN_MOVHLPS:
     Result = BuildVectorShuffle(Ops[0], Ops[1], 6, 7, 2, 3);
     return true;
@@ -241,6 +257,9 @@
   case IX86_BUILTIN_MOVSS:
     Result = BuildVectorShuffle(Ops[0], Ops[1], 4, 1, 2, 3);
     return true;
+  case IX86_BUILTIN_MOVSD:
+    Result = BuildVectorShuffle(Ops[0], Ops[1], 2, 1);
+    return true;
   case IX86_BUILTIN_MOVQ: {
     Value *Zero = ConstantInt::get(Type::Int32Ty, 0);
     Result = BuildVector(Zero, Zero, Zero, Zero, NULL);





More information about the llvm-commits mailing list