Index: cfe/trunk/lib/Headers/popcntintrin.h =================================================================== --- cfe/trunk/lib/Headers/popcntintrin.h +++ cfe/trunk/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: cfe/trunk/test/CodeGen/popcnt-builtins.c =================================================================== --- cfe/trunk/test/CodeGen/popcnt-builtins.c +++ cfe/trunk/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); +}