]> granicus.if.org Git - clang/commitdiff
[X86][MMX] Added MMX IR + assembly codegen builtin tests for some missing cvt intrinsics
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 15 Nov 2015 14:40:31 +0000 (14:40 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 15 Nov 2015 14:40:31 +0000 (14:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@253169 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/mmx-builtins.c

index ded6a44b749b445b55577db102ed266f0583e6f1..563169a205a0cbe8c67b23d07a073a5d7cf48054 100644 (file)
@@ -163,6 +163,20 @@ __m64 test_mm_cmpgt_pi32(__m64 a, __m64 b) {
   return _mm_cmpgt_pi32(a, b);
 }
 
+__m128 test_mm_cvt_pi2ps(__m128 a, __m64 b) {
+  // CHECK-LABEL: test_mm_cvt_pi2ps
+  // CHECK: <4 x float> @llvm.x86.sse.cvtpi2ps
+  // CHECK-ASM: cvtpi2ps %mm{{.*}}, %xmm{{.*}}
+  return _mm_cvt_pi2ps(a, b);
+}
+
+__m64 test_mm_cvt_ps2pi(__m128 a) {
+  // CHECK-LABEL: test_mm_cvt_ps2pi
+  // CHECK: call x86_mmx @llvm.x86.sse.cvtps2pi
+  // CHECK-ASM: cvtps2pi %xmm{{.*}}, %mm{{.*}}
+  return _mm_cvt_ps2pi(a);
+}
+
 __m64 test_mm_cvtpd_pi32(__m128d a) {
   // CHECK-LABEL: test_mm_cvtpd_pi32
   // CHECK: call x86_mmx @llvm.x86.sse.cvtpd2pi
@@ -184,6 +198,52 @@ __m128d test_mm_cvtpi32_pd(__m64 a) {
   return _mm_cvtpi32_pd(a);
 }
 
+__m128 test_mm_cvtpi32_ps(__m128 a, __m64 b) {
+  // CHECK-LABEL: test_mm_cvtpi32_ps
+  // CHECK: call <4 x float> @llvm.x86.sse.cvtpi2ps
+  // CHECK-ASM: cvtpi2ps %mm{{.*}}, %xmm{{.*}}
+  return _mm_cvtpi32_ps(a, b);
+}
+
+__m128 test_mm_cvtpi32x2_ps(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_cvtpi32x2_ps
+  // CHECK: call <4 x float> @llvm.x86.sse.cvtpi2ps
+  // CHECK: call <4 x float> @llvm.x86.sse.cvtpi2ps
+  // CHECK-ASM: cvtpi2ps %mm{{.*}}, %xmm{{.*}}
+  // CHECK-ASM: cvtpi2ps %mm{{.*}}, %xmm{{.*}}
+  return _mm_cvtpi32x2_ps(a, b);
+}
+
+__m64 test_mm_cvtps_pi16(__m128 a) {
+  // CHECK-LABEL: test_mm_cvtps_pi16
+  // CHECK: call x86_mmx @llvm.x86.sse.cvtps2pi
+  // CHECK-ASM: cvtps2pi %xmm{{.*}}, %mm{{.*}}
+  // CHECK-ASM: cvtps2pi %xmm{{.*}}, %mm{{.*}}
+  // CHECK-ASM: packssdw %mm{{.*}}, %mm{{.*}}
+  return _mm_cvtps_pi16(a);
+}
+
+__m64 test_mm_cvtps_pi32(__m128 a) {
+  // CHECK-LABEL: test_mm_cvtps_pi32
+  // CHECK: call x86_mmx @llvm.x86.sse.cvtps2pi
+  // CHECK-ASM: cvtps2pi %xmm{{.*}}, %mm{{.*}}
+  return _mm_cvtps_pi32(a);
+}
+
+__m64 test_mm_cvtsi32_si64(int a) {
+  // CHECK-LABEL: test_mm_cvtsi32_si64
+  // CHECK: insertelement <2 x i32>
+  // CHECK-ASM: movd
+  return _mm_cvtsi32_si64(a);
+}
+
+int test_mm_cvtsi64_si32(__m64 a) {
+  // CHECK-LABEL: test_mm_cvtsi64_si32
+  // CHECK: extractelement <2 x i32>
+  // CHECK-ASM: movd
+  return _mm_cvtsi64_si32(a);
+}
+
 __m64 test_mm_cvttpd_pi32(__m128d a) {
   // CHECK-LABEL: test_mm_cvttpd_pi32
   // CHECK: call x86_mmx @llvm.x86.sse.cvttpd2pi
@@ -191,6 +251,13 @@ __m64 test_mm_cvttpd_pi32(__m128d a) {
   return _mm_cvttpd_pi32(a);
 }
 
+__m64 test_mm_cvttps_pi32(__m128 a) {
+  // CHECK-LABEL: test_mm_cvttps_pi32
+  // CHECK: call x86_mmx @llvm.x86.sse.cvttps2pi
+  // CHECK-ASM: cvttps2pi %xmm{{.*}}, %mm{{.*}}
+  return _mm_cvttps_pi32(a);
+}
+
 __m64 test_m_from_int(int a) {
   // CHECK-LABEL: test_m_from_int
   // CHECK: insertelement <2 x i32>
@@ -366,6 +433,20 @@ __m64 test_mm_sad_pu8(__m64 a, __m64 b) {
   return _mm_sad_pu8(a, b);
 }
 
+__m64 test_mm_shuffle_pi8(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_shuffle_pi8
+  // CHECK: call x86_mmx @llvm.x86.ssse3.pshuf.b
+  // CHECK-ASM: pshufb %mm{{.*}}, %mm{{.*}}
+  return _mm_shuffle_pi8(a, b);
+}
+
+__m64 test_mm_shuffle_pi16(__m64 a) {
+  // CHECK-LABEL: test_mm_shuffle_pi16
+  // CHECK: call x86_mmx @llvm.x86.sse.pshuf.w
+  // CHECK-ASM: pshufw $3, %mm{{.*}}, %mm{{.*}}
+  return _mm_shuffle_pi16(a, 3);
+}
+
 __m64 test_mm_sign_pi8(__m64 a, __m64 b) {
   // CHECK-LABEL: test_mm_sign_pi8
   // CHECK: call x86_mmx @llvm.x86.ssse3.psign.b
@@ -387,20 +468,6 @@ __m64 test_mm_sign_pi32(__m64 a, __m64 b) {
   return _mm_sign_pi32(a, b);
 }
 
-__m64 test_mm_shuffle_pi8(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_shuffle_pi8
-  // CHECK: call x86_mmx @llvm.x86.ssse3.pshuf.b
-  // CHECK-ASM: pshufb %mm{{.*}}, %mm{{.*}}
-  return _mm_shuffle_pi8(a, b);
-}
-
-__m64 test_mm_shuffle_pi16(__m64 a) {
-  // CHECK-LABEL: test_mm_shuffle_pi16
-  // CHECK: call x86_mmx @llvm.x86.sse.pshuf.w
-  // CHECK-ASM: pshufw $3, %mm{{.*}}, %mm{{.*}}
-  return _mm_shuffle_pi16(a, 3);
-}
-
 __m64 test_mm_sll_pi16(__m64 a, __m64 b) {
   // CHECK-LABEL: test_mm_sll_pi16
   // CHECK: call x86_mmx @llvm.x86.mmx.psll.w