62 lines · c
1// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT2// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT3// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s4// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s5 6// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT7// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT8// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s9// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s10 11 12#include <x86intrin.h>13#include "builtin_test_helpers.h"14 15#ifdef __POPCNT__16int test_mm_popcnt_u32(unsigned int __X) {17 //CHECK-POPCNT: call i32 @llvm.ctpop.i3218 return _mm_popcnt_u32(__X);19}20TEST_CONSTEXPR(_mm_popcnt_u32(0x00000000) == 0);21TEST_CONSTEXPR(_mm_popcnt_u32(0x000000F0) == 4);22#endif23 24int test_popcnt32(unsigned int __X) {25 //CHECK: call i32 @llvm.ctpop.i3226 return _popcnt32(__X);27}28TEST_CONSTEXPR(_popcnt32(0x00000000) == 0);29TEST_CONSTEXPR(_popcnt32(0x100000F0) == 5);30 31int test__popcntd(unsigned int __X) {32 //CHECK: call i32 @llvm.ctpop.i3233 return __popcntd(__X);34}35TEST_CONSTEXPR(__popcntd(0x00000000) == 0);36TEST_CONSTEXPR(__popcntd(0x00F000F0) == 8);37 38#ifdef __x86_64__39#ifdef __POPCNT__40long long test_mm_popcnt_u64(unsigned long long __X) {41 //CHECK-POPCNT: call i64 @llvm.ctpop.i6442 return _mm_popcnt_u64(__X);43}44TEST_CONSTEXPR(_mm_popcnt_u64(0x0000000000000000ULL) == 0);45TEST_CONSTEXPR(_mm_popcnt_u64(0xF000000000000001ULL) == 5);46#endif47 48long long test_popcnt64(unsigned long long __X) {49 //CHECK: call i64 @llvm.ctpop.i6450 return _popcnt64(__X);51}52TEST_CONSTEXPR(_popcnt64(0x0000000000000000ULL) == 0);53TEST_CONSTEXPR(_popcnt64(0xF00000F000000001ULL) == 9);54 55long long test__popcntq(unsigned long long __X) {56 //CHECK: call i64 @llvm.ctpop.i6457 return __popcntq(__X);58}59TEST_CONSTEXPR(__popcntq(0x0000000000000000ULL) == 0);60TEST_CONSTEXPR(__popcntq(0xF000010000300001ULL) == 8);61#endif62