[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