Author: mzuckerm Date: Wed Jun 22 07:32:43 2016 New Revision: 273401 URL: http://llvm.org/viewvc/llvm-project?rev=273401&view=rev Log: [Clang][bmi][intrinsics] Adding _mm_tzcnt_64 _mm_tzcnt_32 intrinsics to clang.
Differential Revision: http://reviews.llvm.org/D21373 Modified: cfe/trunk/lib/Headers/bmiintrin.h cfe/trunk/test/CodeGen/bmi-builtins.c Modified: cfe/trunk/lib/Headers/bmiintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/bmiintrin.h?rev=273401&r1=273400&r2=273401&view=diff ============================================================================== --- cfe/trunk/lib/Headers/bmiintrin.h (original) +++ cfe/trunk/lib/Headers/bmiintrin.h Wed Jun 22 07:32:43 2016 @@ -287,6 +287,22 @@ __tzcnt_u32(unsigned int __X) return __X ? __builtin_ctz(__X) : 32; } +/// \brief Counts the number of trailing zero bits in the operand. +/// +/// \headerfile <x86intrin.h> +/// +/// This intrinsic corresponds to the \c TZCNT instruction. +/// +/// \param __X +/// An unsigned 32-bit integer whose trailing zeros are to be counted. +/// \returns An 32-bit integer containing the number of trailing zero +/// bits in the operand. +static __inline__ int __RELAXED_FN_ATTRS +_mm_tzcnt_32(unsigned int __X) +{ + return __X ? __builtin_ctz(__X) : 32; +} + #ifdef __x86_64__ /// \brief Performs a bitwise AND of the second operand with the one's @@ -507,6 +523,22 @@ __tzcnt_u64(unsigned long long __X) { return __X ? __builtin_ctzll(__X) : 64; } + +/// \brief Counts the number of trailing zero bits in the operand. +/// +/// \headerfile <x86intrin.h> +/// +/// This intrinsic corresponds to the \c TZCNT instruction. +/// +/// \param __X +/// An unsigned 64-bit integer whose trailing zeros are to be counted. +/// \returns An 64-bit integer containing the number of trailing zero +/// bits in the operand. +static __inline__ long long __RELAXED_FN_ATTRS +_mm_tzcnt_64(unsigned long long __X) +{ + return __X ? __builtin_ctzll(__X) : 64; +} #endif /* __x86_64__ */ Modified: cfe/trunk/test/CodeGen/bmi-builtins.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/bmi-builtins.c?rev=273401&r1=273400&r2=273401&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/bmi-builtins.c (original) +++ cfe/trunk/test/CodeGen/bmi-builtins.c Wed Jun 22 07:32:43 2016 @@ -64,6 +64,13 @@ unsigned int test__tzcnt_u32(unsigned in return __tzcnt_u32(__X); } +int test_mm_tzcnt_32(unsigned int __X) { + // CHECK-LABEL: test_mm_tzcnt_32 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 true) + return _mm_tzcnt_32(__X); +} + unsigned long long test__andn_u64(unsigned long __X, unsigned long __Y) { // CHECK-LABEL: test__andn_u64 // CHECK: xor i64 %{{.*}}, -1 @@ -105,6 +112,13 @@ unsigned long long test__tzcnt_u64(unsig return __tzcnt_u64(__X); } +long long test_mm_tzcnt_64(unsigned long long __X) { + // CHECK-LABEL: test_mm_tzcnt_64 + // CHECK: icmp ne i64 %{{.*}}, 0 + // CHECK: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 true) + return _mm_tzcnt_64(__X); +} + // Intel intrinsics unsigned short test_tzcnt_u16(unsigned short __X) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits