This change enables constant propagation for conversions. But at this time it 
leads to worse instruction selection when the actual conversion needs to be 
executed.

http://llvm-reviews.chandlerc.com/D1793

Files:
  lib/Headers/emmintrin.h

Index: lib/Headers/emmintrin.h
===================================================================
--- lib/Headers/emmintrin.h
+++ lib/Headers/emmintrin.h
@@ -375,19 +375,20 @@
 static __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
 _mm_cvtpd_ps(__m128d __a)
 {
-  return __builtin_ia32_cvtpd2ps(__a);
+  return (__m128)(__v4sf) { __a[0], __a[1], 0, 0 };
 }
 
 static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
 _mm_cvtps_pd(__m128 __a)
 {
-  return __builtin_ia32_cvtps2pd(__a);
+  return (__m128d)(__v2df) { __a[0], __a[1] };
 }
 
 static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
 _mm_cvtepi32_pd(__m128i __a)
 {
-  return __builtin_ia32_cvtdq2pd((__v4si)__a);
+  __v4si __b = (__v4si)__a;
+  return (__m128d)(__v2df) { __b[0], __b[1] };
 }
 
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
@@ -426,7 +427,7 @@
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
 _mm_cvttpd_epi32(__m128d __a)
 {
-  return (__m128i)__builtin_ia32_cvttpd2dq(__a);
+  return (__m128i)(__v4si) { __a[0], __a[1], 0, 0 };
 }
 
 static __inline__ int __attribute__((__always_inline__, __nodebug__))
@@ -1023,7 +1024,7 @@
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
 _mm_cvttps_epi32(__m128 __a)
 {
-  return (__m128i)__builtin_ia32_cvttps2dq(__a);
+  return (__m128i)(__v4si) { __a[0], __a[1], __a[2], __a[3] };
 }
 
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
Index: lib/Headers/emmintrin.h
===================================================================
--- lib/Headers/emmintrin.h
+++ lib/Headers/emmintrin.h
@@ -375,19 +375,20 @@
 static __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
 _mm_cvtpd_ps(__m128d __a)
 {
-  return __builtin_ia32_cvtpd2ps(__a);
+  return (__m128)(__v4sf) { __a[0], __a[1], 0, 0 };
 }
 
 static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
 _mm_cvtps_pd(__m128 __a)
 {
-  return __builtin_ia32_cvtps2pd(__a);
+  return (__m128d)(__v2df) { __a[0], __a[1] };
 }
 
 static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
 _mm_cvtepi32_pd(__m128i __a)
 {
-  return __builtin_ia32_cvtdq2pd((__v4si)__a);
+  __v4si __b = (__v4si)__a;
+  return (__m128d)(__v2df) { __b[0], __b[1] };
 }
 
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
@@ -426,7 +427,7 @@
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
 _mm_cvttpd_epi32(__m128d __a)
 {
-  return (__m128i)__builtin_ia32_cvttpd2dq(__a);
+  return (__m128i)(__v4si) { __a[0], __a[1], 0, 0 };
 }
 
 static __inline__ int __attribute__((__always_inline__, __nodebug__))
@@ -1023,7 +1024,7 @@
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
 _mm_cvttps_epi32(__m128 __a)
 {
-  return (__m128i)__builtin_ia32_cvttps2dq(__a);
+  return (__m128i)(__v4si) { __a[0], __a[1], __a[2], __a[3] };
 }
 
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to