[x86] Factor out the zero vector insertion logic in the new vector
[oota-llvm.git] / test / CodeGen / X86 / mmx-punpckhdq.ll
index 0af7e017b626b83554739e626b82b529e42bf3b9..9e8f5bf53363b7532614f5ff50b586c13ec53c61 100644 (file)
@@ -1,6 +1,9 @@
-; RUN: llc < %s -march=x86 -mattr=+mmx | grep punpckhdq | count 1
+; RUN: llc < %s -march=x86 -mattr=+mmx,+sse4.2 -mtriple=x86_64-apple-darwin10 | FileCheck %s
+; There are no MMX operations in bork; promoted to XMM.
 
 define void @bork(<1 x i64>* %x) {
+; CHECK: bork
+; CHECK: movlpd
 entry:
        %tmp2 = load <1 x i64>* %x              ; <<1 x i64>> [#uses=1]
        %tmp6 = bitcast <1 x i64> %tmp2 to <2 x i32>            ; <<2 x i32>> [#uses=1]
@@ -11,4 +14,18 @@ entry:
        ret void
 }
 
+; pork uses MMX.
+
+define void @pork(x86_mmx* %x) {
+; CHECK: pork
+; CHECK: punpckhdq
+entry:
+       %tmp2 = load x86_mmx* %x                ; <x86_mmx> [#uses=1]
+        %tmp9 = tail call x86_mmx @llvm.x86.mmx.punpckhdq (x86_mmx %tmp2, x86_mmx %tmp2)
+       store x86_mmx %tmp9, x86_mmx* %x
+       tail call void @llvm.x86.mmx.emms( )
+       ret void
+}
+
+declare x86_mmx @llvm.x86.mmx.punpckhdq(x86_mmx, x86_mmx)
 declare void @llvm.x86.mmx.emms()