[PATCH] D15568: [X86] Add signed aliases for popcnt intrinsics

Michael Kuperstein via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 16 06:07:08 PST 2015


mkuper created this revision.
mkuper added reviewers: AsafBadouh, delena.
mkuper added a subscriber: llvm-commits.

The Intel manual documents both an unsigned form (_mm_popcnt_u32) and a signed form (_popcnt32) of the intrinsic.
Add the missing signed form.

http://reviews.llvm.org/D15568

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

Index: lib/Headers/popcntintrin.h
===================================================================
--- lib/Headers/popcntintrin.h
+++ lib/Headers/popcntintrin.h
@@ -33,12 +33,24 @@
   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: test/CodeGen/popcnt-builtins.c
===================================================================
--- test/CodeGen/popcnt-builtins.c
+++ test/CodeGen/popcnt-builtins.c
@@ -10,7 +10,17 @@
   return _mm_popcnt_u32(__X);
 }
 
+unsigned int test_popcnt_32(int __X) {
+  // CHECK: @llvm.ctpop.i32
+  return _popcnt32(__X);
+}
+
 unsigned long long test_mm_popcnt_u64(unsigned long long __X) {
   // CHECK: @llvm.ctpop.i64
   return _mm_popcnt_u64(__X);
 }
+
+unsigned long long test_popcntu64(long long __X) {
+  // CHECK: @llvm.ctpop.i64
+  return _popcnt_64(__X);
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15568.42996.patch
Type: text/x-patch
Size: 1265 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151216/829a99ba/attachment.bin>


More information about the llvm-commits mailing list