Clang Project

clang_source_code/test/CodeGen/avx512vbmivl-builtin.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s
2
3
4#include <immintrin.h>
5
6__m128i test_mm_permutexvar_epi8(__m128i __A, __m128i __B) {
7  // CHECK-LABEL: @test_mm_permutexvar_epi8
8  // CHECK: @llvm.x86.avx512.permvar.qi.128
9  return _mm_permutexvar_epi8(__A, __B); 
10}
11
12__m128i test_mm_maskz_permutexvar_epi8(__mmask16 __M, __m128i __A, __m128i __B) {
13  // CHECK-LABEL: @test_mm_maskz_permutexvar_epi8
14  // CHECK: @llvm.x86.avx512.permvar.qi.128
15  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
16  return _mm_maskz_permutexvar_epi8(__M, __A, __B); 
17}
18
19__m128i test_mm_mask_permutexvar_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) {
20  // CHECK-LABEL: @test_mm_mask_permutexvar_epi8
21  // CHECK: @llvm.x86.avx512.permvar.qi.128
22  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
23  return _mm_mask_permutexvar_epi8(__W, __M, __A, __B); 
24}
25
26__m256i test_mm256_permutexvar_epi8(__m256i __A, __m256i __B) {
27  // CHECK-LABEL: @test_mm256_permutexvar_epi8
28  // CHECK: @llvm.x86.avx512.permvar.qi.256
29  return _mm256_permutexvar_epi8(__A, __B); 
30}
31
32__m256i test_mm256_maskz_permutexvar_epi8(__mmask32 __M, __m256i __A, __m256i __B) {
33  // CHECK-LABEL: @test_mm256_maskz_permutexvar_epi8
34  // CHECK: @llvm.x86.avx512.permvar.qi.256
35  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
36  return _mm256_maskz_permutexvar_epi8(__M, __A, __B); 
37}
38
39__m256i test_mm256_mask_permutexvar_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) {
40  // CHECK-LABEL: @test_mm256_mask_permutexvar_epi8
41  // CHECK: @llvm.x86.avx512.permvar.qi.256
42  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
43  return _mm256_mask_permutexvar_epi8(__W, __M, __A, __B); 
44}
45
46__m128i test_mm_mask2_permutex2var_epi8(__m128i __A, __m128i __I, __mmask16 __U, __m128i __B) {
47  // CHECK-LABEL: @test_mm_mask2_permutex2var_epi8
48  // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
49  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
50  return _mm_mask2_permutex2var_epi8(__A, __I, __U, __B); 
51}
52
53__m256i test_mm256_mask2_permutex2var_epi8(__m256i __A, __m256i __I, __mmask32 __U, __m256i __B) {
54  // CHECK-LABEL: @test_mm256_mask2_permutex2var_epi8
55  // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
56  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
57  return _mm256_mask2_permutex2var_epi8(__A, __I, __U, __B); 
58}
59
60__m128i test_mm_permutex2var_epi8(__m128i __A, __m128i __I, __m128i __B) {
61  // CHECK-LABEL: @test_mm_permutex2var_epi8
62  // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
63  return _mm_permutex2var_epi8(__A, __I, __B); 
64}
65
66__m128i test_mm_mask_permutex2var_epi8(__m128i __A, __mmask16 __U, __m128i __I, __m128i __B) {
67  // CHECK-LABEL: @test_mm_mask_permutex2var_epi8
68  // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
69  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
70  return _mm_mask_permutex2var_epi8(__A, __U, __I, __B); 
71}
72
73__m128i test_mm_maskz_permutex2var_epi8(__mmask16 __U, __m128i __A, __m128i __I, __m128i __B) {
74  // CHECK-LABEL: @test_mm_maskz_permutex2var_epi8
75  // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
76  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
77  return _mm_maskz_permutex2var_epi8(__U, __A, __I, __B); 
78}
79
80__m256i test_mm256_permutex2var_epi8(__m256i __A, __m256i __I, __m256i __B) {
81  // CHECK-LABEL: @test_mm256_permutex2var_epi8
82  // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
83  return _mm256_permutex2var_epi8(__A, __I, __B); 
84}
85
86__m256i test_mm256_mask_permutex2var_epi8(__m256i __A, __mmask32 __U, __m256i __I, __m256i __B) {
87  // CHECK-LABEL: @test_mm256_mask_permutex2var_epi8
88  // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
89  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
90  return _mm256_mask_permutex2var_epi8(__A, __U, __I, __B); 
91}
92
93__m256i test_mm256_maskz_permutex2var_epi8(__mmask32 __U, __m256i __A, __m256i __I, __m256i __B) {
94  // CHECK-LABEL: @test_mm256_maskz_permutex2var_epi8
95  // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
96  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
97  return _mm256_maskz_permutex2var_epi8(__U, __A, __I, __B); 
98}
99
100__m128i test_mm_mask_multishift_epi64_epi8(__m128i __W, __mmask16 __M, __m128i __X, __m128i __Y) {
101  // CHECK-LABEL: @test_mm_mask_multishift_epi64_epi8
102  // CHECK: @llvm.x86.avx512.pmultishift.qb.128
103  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
104  return _mm_mask_multishift_epi64_epi8(__W, __M, __X, __Y); 
105}
106
107__m128i test_mm_maskz_multishift_epi64_epi8(__mmask16 __M, __m128i __X, __m128i __Y) {
108  // CHECK-LABEL: @test_mm_maskz_multishift_epi64_epi8
109  // CHECK: @llvm.x86.avx512.pmultishift.qb.128
110  // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
111  return _mm_maskz_multishift_epi64_epi8(__M, __X, __Y); 
112}
113
114__m128i test_mm_multishift_epi64_epi8(__m128i __X, __m128i __Y) {
115  // CHECK-LABEL: @test_mm_multishift_epi64_epi8
116  // CHECK: @llvm.x86.avx512.pmultishift.qb.128
117  return _mm_multishift_epi64_epi8(__X, __Y); 
118}
119
120__m256i test_mm256_mask_multishift_epi64_epi8(__m256i __W, __mmask32 __M, __m256i __X, __m256i __Y) {
121  // CHECK-LABEL: @test_mm256_mask_multishift_epi64_epi8
122  // CHECK: @llvm.x86.avx512.pmultishift.qb.256
123  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
124  return _mm256_mask_multishift_epi64_epi8(__W, __M, __X, __Y); 
125}
126
127__m256i test_mm256_maskz_multishift_epi64_epi8(__mmask32 __M, __m256i __X, __m256i __Y) {
128  // CHECK-LABEL: @test_mm256_maskz_multishift_epi64_epi8
129  // CHECK: @llvm.x86.avx512.pmultishift.qb.256
130  // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
131  return _mm256_maskz_multishift_epi64_epi8(__M, __X, __Y); 
132}
133
134__m256i test_mm256_multishift_epi64_epi8(__m256i __X, __m256i __Y) {
135  // CHECK-LABEL: @test_mm256_multishift_epi64_epi8
136  // CHECK: @llvm.x86.avx512.pmultishift.qb.256
137  return _mm256_multishift_epi64_epi8(__X, __Y); 
138}
139
140