brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.4 KiB · 80a20b1 Raw
171 lines · c
1// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s4// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s5// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s6// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s7// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s8// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s9 10 11#include <immintrin.h>12#include "builtin_test_helpers.h"13 14__m512i test_mm512_conflict_epi64(__m512i __A) {15  // CHECK-LABEL: test_mm512_conflict_epi6416  // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.conflict.q.512(<8 x i64> %{{.*}})17  return _mm512_conflict_epi64(__A);18}19 20TEST_CONSTEXPR(match_v8di(_mm512_conflict_epi64((__m512i)(__v8di){1, 2, 1, 3, 2, 4, 1, 5}), 0, 0, 1, 0, 2, 0, 5, 0));21TEST_CONSTEXPR(match_v8di(_mm512_conflict_epi64((__m512i)(__v8di){5, 5, 5, 5, 5, 5, 5, 5}), 0, 1, 3, 7, 15, 31, 63, 127));22TEST_CONSTEXPR(match_v8di(_mm512_conflict_epi64((__m512i)(__v8di){1, 2, 3, 4, 5, 6, 7, 8}), 0, 0, 0, 0, 0, 0, 0, 0));23__m512i test_mm512_mask_conflict_epi64(__m512i __W, __mmask8 __U, __m512i __A) {24  // CHECK-LABEL: test_mm512_mask_conflict_epi6425  // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.conflict.q.512(<8 x i64> %{{.*}})26  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}27  return _mm512_mask_conflict_epi64(__W,__U,__A);28}29 30TEST_CONSTEXPR(match_v8di(_mm512_mask_conflict_epi64((__m512i)(__v8di){0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 0x55, (__m512i)(__v8di){1, 2, 1, 3, 2, 4, 1, 5}), 0, 0xFF, 1, 0xFF, 2, 0xFF, 5, 0xFF));31__m512i test_mm512_maskz_conflict_epi64(__mmask8 __U, __m512i __A) {32  // CHECK-LABEL: test_mm512_maskz_conflict_epi6433  // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.conflict.q.512(<8 x i64> %{{.*}})34  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}35  return _mm512_maskz_conflict_epi64(__U,__A);36}37 38TEST_CONSTEXPR(match_v8di(_mm512_maskz_conflict_epi64(0x55, (__m512i)(__v8di){1, 2, 1, 3, 2, 4, 1, 5}), 0, 0, 1, 0, 2, 0, 5, 0));39__m512i test_mm512_conflict_epi32(__m512i __A) {40  // CHECK-LABEL: test_mm512_conflict_epi3241  // CHECK: call <16 x i32> @llvm.x86.avx512.conflict.d.512(<16 x i32> %{{.*}})42  return _mm512_conflict_epi32(__A);43}44 45TEST_CONSTEXPR(match_v16si(_mm512_conflict_epi32((__m512i)(__v16si){1, 2, 1, 3, 2, 4, 1, 5, 6, 7, 6, 8, 7, 9, 6, 10}), 0, 0, 1, 0, 2, 0, 5, 0, 0, 0, 256, 0, 512, 0, 1280, 0));46TEST_CONSTEXPR(match_v16si(_mm512_conflict_epi32((__m512i)(__v16si){9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}), 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767));47TEST_CONSTEXPR(match_v16si(_mm512_conflict_epi32((__m512i)(__v16si){1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));48__m512i test_mm512_mask_conflict_epi32(__m512i __W, __mmask16 __U, __m512i __A) {49  // CHECK-LABEL: test_mm512_mask_conflict_epi3250  // CHECK: call <16 x i32> @llvm.x86.avx512.conflict.d.512(<16 x i32> %{{.*}})51  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}52  return _mm512_mask_conflict_epi32(__W,__U,__A);53}54 55TEST_CONSTEXPR(match_v16si(_mm512_mask_conflict_epi32((__m512i)(__v16si){0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 0x5555, (__m512i)(__v16si){1, 2, 1, 3, 2, 4, 1, 5, 6, 7, 6, 8, 7, 9, 6, 10}), 0, 0xFF, 1, 0xFF, 2, 0xFF, 5, 0xFF, 0, 0xFF, 256, 0xFF, 512, 0xFF, 1280, 0xFF));56__m512i test_mm512_maskz_conflict_epi32(__mmask16 __U, __m512i __A) {57  // CHECK-LABEL: test_mm512_maskz_conflict_epi3258  // CHECK: call <16 x i32> @llvm.x86.avx512.conflict.d.512(<16 x i32> %{{.*}})59  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}60  return _mm512_maskz_conflict_epi32(__U,__A);61}62 63TEST_CONSTEXPR(match_v16si(_mm512_maskz_conflict_epi32(0x5555, (__m512i)(__v16si){1, 2, 1, 3, 2, 4, 1, 5, 6, 7, 6, 8, 7, 9, 6, 10}), 0, 0, 1, 0, 2, 0, 5, 0, 0, 0, 256, 0, 512, 0, 1280, 0));64__m512i test_mm512_lzcnt_epi32(__m512i __A) {65  // CHECK-LABEL: test_mm512_lzcnt_epi3266  // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true)67  // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer68  // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}69  return _mm512_lzcnt_epi32(__A); 70}71 72TEST_CONSTEXPR(match_v16si(_mm512_lzcnt_epi32((__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 30, 29, 28, 27, 26, 25, 24, 30, 29, 29, 29, 28, 28, 28, 28));73TEST_CONSTEXPR(match_v16si(_mm512_lzcnt_epi32((__m512i)(__v16si){0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32));74 75__m512i test_mm512_mask_lzcnt_epi32(__m512i __W, __mmask16 __U, __m512i __A) {76  // CHECK-LABEL: test_mm512_mask_lzcnt_epi3277  // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true)78  // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer79  // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}80  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}81  return _mm512_mask_lzcnt_epi32(__W,__U,__A); 82}83 84TEST_CONSTEXPR(match_v16si(_mm512_mask_lzcnt_epi32(_mm512_set1_epi32(32), /*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 32, 29, 28, 32, 26, 32, 24, 32, 32, 29, 29, 32, 28, 32, 28));85 86__m512i test_mm512_maskz_lzcnt_epi32(__mmask16 __U, __m512i __A) {87  // CHECK-LABEL: test_mm512_maskz_lzcnt_epi3288  // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true)89  // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer90  // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}}91  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}92  return _mm512_maskz_lzcnt_epi32(__U,__A); 93}94 95TEST_CONSTEXPR(match_v16si(_mm512_maskz_lzcnt_epi32(/*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 0, 29, 28, 0, 26, 0, 24, 0, 0, 29, 29, 0, 28, 0, 28));96 97__m512i test_mm512_lzcnt_epi64(__m512i __A) {98  // CHECK-LABEL: test_mm512_lzcnt_epi6499  // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true)100  // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer101  // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}}102  return _mm512_lzcnt_epi64(__A); 103}104 105TEST_CONSTEXPR(match_v8di(_mm512_lzcnt_epi64((__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 60, 59, 58, 57, 56));106TEST_CONSTEXPR(match_v8di(_mm512_lzcnt_epi64((__m512i)(__v8di){0, 0, 0, 0, 0, 0, 0, 0}), 64, 64, 64, 64, 64, 64, 64, 64));107 108__m512i test_mm512_mask_lzcnt_epi64(__m512i __W, __mmask8 __U, __m512i __A) {109  // CHECK-LABEL: test_mm512_mask_lzcnt_epi64110  // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true)111  // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer112  // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}}113  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}114  return _mm512_mask_lzcnt_epi64(__W,__U,__A); 115}116 117TEST_CONSTEXPR(match_v8di(_mm512_mask_lzcnt_epi64(_mm512_set1_epi64((long long) 64), /*0101 0111=*/0x57, (__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 64, 59, 64, 57, 64));118 119__m512i test_mm512_maskz_lzcnt_epi64(__mmask8 __U, __m512i __A) {120  // CHECK-LABEL: test_mm512_maskz_lzcnt_epi64121  // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true)122  // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer123  // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}}124  // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}125  return _mm512_maskz_lzcnt_epi64(__U,__A); 126}127 128TEST_CONSTEXPR(match_v8di(_mm512_maskz_lzcnt_epi64(/*0101 0111=*/0x57, (__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 0, 59, 0, 57, 0));129 130__m512i test_mm512_broadcastmb_epi64(__m512i a, __m512i b) {131  // CHECK-LABEL: test_mm512_broadcastmb_epi64132  // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}}133  // CHECK: zext i8 %{{.*}} to i64134  // CHECK: insertelement <8 x i64> poison, i64 %{{.*}}, i32 0135  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 1136  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 2137  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 3138  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 4139  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 5140  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 6141  // CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 7142  return _mm512_broadcastmb_epi64(_mm512_cmpeq_epu64_mask ( a, b)); 143}144TEST_CONSTEXPR(match_v8di(_mm512_broadcastmb_epi64((__mmask8)(0)), 0,0,0,0, 0,0,0,0));145TEST_CONSTEXPR(match_v8di(_mm512_broadcastmb_epi64((__mmask8)(0xab)), 0xab,0xab,0xab,0xab, 0xab,0xab,0xab,0xab));146 147__m512i test_mm512_broadcastmw_epi32(__m512i a, __m512i b) {148  // CHECK-LABEL: test_mm512_broadcastmw_epi32149  // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}}150  // CHECK: zext i16 %{{.*}} to i32151  // CHECK: insertelement <16 x i32> poison, i32 %{{.*}}152  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}153  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}154  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}155  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}156  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}157  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}158  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}159  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}160  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}161  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}162  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}163  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}164  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}165  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}166  // CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}167  return _mm512_broadcastmw_epi32(_mm512_cmpeq_epi32_mask ( a, b)); 168}169TEST_CONSTEXPR(match_v16si(_mm512_broadcastmw_epi32((__mmask16)(0xff)), 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff));170TEST_CONSTEXPR(match_v16si(_mm512_broadcastmw_epi32((__mmask16)(0x0FA1L)), 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L, 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L, 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L, 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L));171