aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2019-03-21 17:43:53 +0000
committerCraig Topper <craig.topper@intel.com>2019-03-21 17:43:53 +0000
commit2f63b89563b3b38799e89c2897eea594314a37bd (patch)
treecf399cb796a757362810512bbab4de958bfda291 /test/CodeGen
parent83386471224da56316d3de126587377a95d54c69 (diff)
[X86] Add __popcntd and __popcntq to ia32intrin.h to match gcc and icc. Remove popcnt feature flag from _popcnt32/_popcnt64 and move to ia32intrin.h to match gcc
gcc and icc both implement popcntd and popcntq which we did not. gcc doesn't seem to require a feature flag for the _popcnt32/_popcnt64 spelling and will use a libcall if its not supported. Differential Revision: https://reviews.llvm.org/D59567 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@356689 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen')
-rw-r--r--test/CodeGen/popcnt-builtins.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/test/CodeGen/popcnt-builtins.c b/test/CodeGen/popcnt-builtins.c
index 1fdb43339a..800e759bba 100644
--- a/test/CodeGen/popcnt-builtins.c
+++ b/test/CodeGen/popcnt-builtins.c
@@ -1,24 +1,39 @@
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT
+// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - | FileCheck %s
-#include <immintrin.h>
+#include <x86intrin.h>
-unsigned int test_mm_popcnt_u32(unsigned int __X) {
- //CHECK: call i32 @llvm.ctpop.i32
+#ifdef __POPCNT__
+int test_mm_popcnt_u32(unsigned int __X) {
+ //CHECK-POPCNT: call i32 @llvm.ctpop.i32
return _mm_popcnt_u32(__X);
}
+#endif
-unsigned int test_popcnt_32(int __X) {
+int test_popcnt32(unsigned int __X) {
//CHECK: call i32 @llvm.ctpop.i32
return _popcnt32(__X);
}
-unsigned long long test_mm_popcnt_u64(unsigned long long __X) {
- //CHECK: call i64 @llvm.ctpop.i64
+int test__popcntd(unsigned int __X) {
+ //CHECK: call i32 @llvm.ctpop.i32
+ return __popcntd(__X);
+}
+
+#ifdef __POPCNT__
+long long test_mm_popcnt_u64(unsigned long long __X) {
+ //CHECK-POPCNT: call i64 @llvm.ctpop.i64
return _mm_popcnt_u64(__X);
}
+#endif
-unsigned long long test_popcnt_64(long long __X) {
+long long test_popcnt64(unsigned long long __X) {
//CHECK: call i64 @llvm.ctpop.i64
return _popcnt64(__X);
}
+
+long long test__popcntq(unsigned long long __X) {
+ //CHECK: call i64 @llvm.ctpop.i64
+ return __popcntq(__X);
+}