]> granicus.if.org Git - clang/commitdiff
[X86] Add signed aliases for popcnt intrinsics
authorMichael Kuperstein <michael.m.kuperstein@intel.com>
Sun, 20 Dec 2015 12:35:35 +0000 (12:35 +0000)
committerMichael Kuperstein <michael.m.kuperstein@intel.com>
Sun, 20 Dec 2015 12:35:35 +0000 (12:35 +0000)
The Intel manual documents both an unsigned form (_mm_popcnt_u32)
and a signed form (_popcnt32) of the intrinsic. Add the missing signed form.

Differential Revision: http://reviews.llvm.org/D15568

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@256121 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/popcntintrin.h
test/CodeGen/popcnt-builtins.c

index 29c074b61d1c996eb855dee317c4dd63f23525b3..6fcda65c7807d40566031d088c0a4a1c89403a43 100644 (file)
@@ -33,12 +33,24 @@ _mm_popcnt_u32(unsigned int __A)
   return __builtin_popcount(__A);
 }
 
+static __inline__ int __DEFAULT_FN_ATTRS
+_popcnt32(int __A)
+{
+  return __builtin_popcount(__A);
+}
+
 #ifdef __x86_64__
 static __inline__ long long __DEFAULT_FN_ATTRS
 _mm_popcnt_u64(unsigned long long __A)
 {
   return __builtin_popcountll(__A);
 }
+
+static __inline__ long long __DEFAULT_FN_ATTRS
+_popcnt64(long long __A)
+{
+  return __builtin_popcountll(__A);
+}
 #endif /* __x86_64__ */
 
 #undef __DEFAULT_FN_ATTRS
index 1105c37c073d2b627a9b5cd886c39bc4bf897bcf..5ae40c7a768896d1f84058ae1f29b04cd40f4b34 100644 (file)
@@ -6,11 +6,21 @@
 #include <x86intrin.h>
 
 unsigned int test_mm_popcnt_u32(unsigned int __X) {
-  // CHECK: @llvm.ctpop.i32
+  //CHECK: call i32 @llvm.ctpop.i32
   return _mm_popcnt_u32(__X);
 }
 
+unsigned int test_popcnt_32(int __X) {
+  //CHECK: call i32 @llvm.ctpop.i32
+  return _popcnt32(__X);
+}
+
 unsigned long long test_mm_popcnt_u64(unsigned long long __X) {
-  // CHECK: @llvm.ctpop.i64
+  //CHECK: call i64 @llvm.ctpop.i64
   return _mm_popcnt_u64(__X);
 }
+
+unsigned long long test_popcnt_64(long long __X) {
+  //CHECK: call i64 @llvm.ctpop.i64
+  return _popcnt64(__X);
+}