[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrMMX.td

Bill Wendling isanbard at gmail.com
Thu Mar 22 13:29:51 PDT 2007



Changes in directory llvm/lib/Target/X86:

X86InstrMMX.td updated: 1.22 -> 1.23
---
Log message:

We generate a shufflevector instruction, so we don't need the builtin
intrinsic.


---
Diffs of the changes:  (+13 -6)

 X86InstrMMX.td |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86InstrMMX.td
diff -u llvm/lib/Target/X86/X86InstrMMX.td:1.22 llvm/lib/Target/X86/X86InstrMMX.td:1.23
--- llvm/lib/Target/X86/X86InstrMMX.td:1.22	Thu Mar 22 13:42:45 2007
+++ llvm/lib/Target/X86/X86InstrMMX.td	Thu Mar 22 15:29:26 2007
@@ -152,6 +152,16 @@
 defm MMX_PMADDWD : MMXI_binop_rm_int<0xF5, "pmaddwd", int_x86_mmx_pmadd_wd, 1>;
 
 
+// MMX_SHUFFLE_get_shuf_imm xform function: convert vector_shuffle mask to
+// MMX_PSHUF*, MMX_SHUFP* etc. imm.
+def MMX_SHUFFLE_get_shuf_imm : SDNodeXForm<build_vector, [{
+  return getI8Imm(X86::getShuffleSHUFImmediate(N));
+}]>;
+
+def MMX_splat_mask : PatLeaf<(build_vector), [{
+  return X86::isSplatMask(N);
+}], MMX_SHUFFLE_get_shuf_imm>;
+
 def MMX_UNPCKH_shuffle_mask : PatLeaf<(build_vector), [{
   return X86::isUNPCKHMask(N);
 }]>;
@@ -315,16 +325,13 @@
 // Splat v2i32
 let AddedComplexity = 10 in {
   def : Pat<(vector_shuffle (v2i32 VR64:$src), (undef),
+             MMX_splat_mask:$sm),
+            (MMX_PUNPCKHDQrr VR64:$src, VR64:$src)>;
+  def : Pat<(vector_shuffle (v2i32 VR64:$src), (undef),
              MMX_UNPCKH_shuffle_mask:$sm),
             (MMX_PUNPCKHDQrr VR64:$src, VR64:$src)>;
 }
 
-// FIXME: Temporary workaround because 2-wide shuffle is broken.
-def : Pat<(int_x86_mmx_punpckh_dq VR64:$src1, VR64:$src2),
-          (v2i32 (MMX_PUNPCKHDQrr VR64:$src1, VR64:$src2))>;
-def : Pat<(int_x86_mmx_punpckh_dq VR64:$src1, (load addr:$src2)),
-          (v2i32 (MMX_PUNPCKHDQrm VR64:$src1, addr:$src2))>;
-
 def MMX_X86s2vec : SDNode<"X86ISD::S2VEC",  SDTypeProfile<1, 1, []>, []>;
 
 // Scalar to v4i16 / v8i8. The source may be a GR32, but only the lower 8 or






More information about the llvm-commits mailing list