[clang] 73c4c32 - [X86] Use __builtin_bit_cast _mm_extract_ps instead of type punning through a union. NFC

Craig Topper via cfe-commits cfe-commits at lists.llvm.org
Sat Aug 14 16:36:11 PDT 2021


Author: Craig Topper
Date: 2021-08-14T16:35:55-07:00
New Revision: 73c4c3276720b20525ce9ef5f8e4f0c20fd93862

URL: https://github.com/llvm/llvm-project/commit/73c4c3276720b20525ce9ef5f8e4f0c20fd93862
DIFF: https://github.com/llvm/llvm-project/commit/73c4c3276720b20525ce9ef5f8e4f0c20fd93862.diff

LOG: [X86] Use __builtin_bit_cast _mm_extract_ps instead of type punning through a union. NFC

Added: 
    

Modified: 
    clang/lib/Headers/smmintrin.h

Removed: 
    


################################################################################
diff  --git a/clang/lib/Headers/smmintrin.h b/clang/lib/Headers/smmintrin.h
index 3ee58c9d79370..c55e6dc65c49d 100644
--- a/clang/lib/Headers/smmintrin.h
+++ b/clang/lib/Headers/smmintrin.h
@@ -865,10 +865,8 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
 ///    10: Bits [95:64] of parameter \a X are returned. \n
 ///    11: Bits [127:96] of parameter \a X are returned.
 /// \returns A 32-bit integer containing the extracted 32 bits of float data.
-#define _mm_extract_ps(X, N) (__extension__                      \
-  ({ union { int __i; float __f; } __t;  \
-     __t.__f = __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)); \
-     __t.__i;}))
+#define _mm_extract_ps(X, N) \
+  __builtin_bit_cast(int, __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)))
 
 /* Miscellaneous insert and extract macros.  */
 /* Extract a single-precision float from X at index N into D.  */


        


More information about the cfe-commits mailing list