From: Michael Kuperstein Date: Sun, 20 Dec 2015 12:35:35 +0000 (+0000) Subject: [X86] Add signed aliases for popcnt intrinsics X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=54a41ae4327edc85f037012782024c8e23808c28;p=clang [X86] Add signed aliases for popcnt intrinsics 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 --- diff --git a/lib/Headers/popcntintrin.h b/lib/Headers/popcntintrin.h index 29c074b61d..6fcda65c78 100644 --- a/lib/Headers/popcntintrin.h +++ b/lib/Headers/popcntintrin.h @@ -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 diff --git a/test/CodeGen/popcnt-builtins.c b/test/CodeGen/popcnt-builtins.c index 1105c37c07..5ae40c7a76 100644 --- a/test/CodeGen/popcnt-builtins.c +++ b/test/CodeGen/popcnt-builtins.c @@ -6,11 +6,21 @@ #include 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); +}