Author: mkuper Date: Sun Dec 20 06:35:35 2015 New Revision: 256121 URL: http://llvm.org/viewvc/llvm-project?rev=256121&view=rev Log: [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 Modified: cfe/trunk/lib/Headers/popcntintrin.h cfe/trunk/test/CodeGen/popcnt-builtins.c Modified: cfe/trunk/lib/Headers/popcntintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/popcntintrin.h?rev=256121&r1=256120&r2=256121&view=diff ============================================================================== --- cfe/trunk/lib/Headers/popcntintrin.h (original) +++ cfe/trunk/lib/Headers/popcntintrin.h Sun Dec 20 06:35:35 2015 @@ -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 Modified: cfe/trunk/test/CodeGen/popcnt-builtins.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/popcnt-builtins.c?rev=256121&r1=256120&r2=256121&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/popcnt-builtins.c (original) +++ cfe/trunk/test/CodeGen/popcnt-builtins.c Sun Dec 20 06:35:35 2015 @@ -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); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits