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); +}