blob: 0caa4bfca324edb145109004958067b611783374 [file] [log] [blame]
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -o - -Werror | FileCheck %s
2// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Werror | FileCheck %s
Simon Pilgrima5c04932015-11-29 20:23:00 +00003
4// Don't include mm_malloc.h, it's system specific.
5#define __MM_MALLOC_H
6
7#include <x86intrin.h>
8
9__m128i test_mm_add_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000010 // CHECK-LABEL: test_mm_add_epi8
11 // CHECK: add <16 x i8>
Simon Pilgrima5c04932015-11-29 20:23:00 +000012 return _mm_add_epi8(A, B);
13}
14
15__m128i test_mm_add_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000016 // CHECK-LABEL: test_mm_add_epi16
17 // CHECK: add <8 x i16>
Simon Pilgrima5c04932015-11-29 20:23:00 +000018 return _mm_add_epi16(A, B);
19}
20
21__m128i test_mm_add_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000022 // CHECK-LABEL: test_mm_add_epi32
23 // CHECK: add <4 x i32>
Simon Pilgrima5c04932015-11-29 20:23:00 +000024 return _mm_add_epi32(A, B);
25}
26
27__m128i test_mm_add_epi64(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000028 // CHECK-LABEL: test_mm_add_epi64
29 // CHECK: add <2 x i64>
Simon Pilgrima5c04932015-11-29 20:23:00 +000030 return _mm_add_epi64(A, B);
31}
32
33__m128d test_mm_add_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000034 // CHECK-LABEL: test_mm_add_pd
35 // CHECK: fadd <2 x double>
Simon Pilgrima5c04932015-11-29 20:23:00 +000036 return _mm_add_pd(A, B);
37}
38
39__m128d test_mm_add_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000040 // CHECK-LABEL: test_mm_add_sd
41 // CHECK: fadd double
Simon Pilgrima5c04932015-11-29 20:23:00 +000042 return _mm_add_sd(A, B);
43}
44
45__m128i test_mm_adds_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000046 // CHECK-LABEL: test_mm_adds_epi8
47 // CHECK: call <16 x i8> @llvm.x86.sse2.padds.b
Simon Pilgrima5c04932015-11-29 20:23:00 +000048 return _mm_adds_epi8(A, B);
49}
50
51__m128i test_mm_adds_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000052 // CHECK-LABEL: test_mm_adds_epi16
53 // CHECK: call <8 x i16> @llvm.x86.sse2.padds.w
Simon Pilgrima5c04932015-11-29 20:23:00 +000054 return _mm_adds_epi16(A, B);
55}
56
57__m128i test_mm_adds_epu8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000058 // CHECK-LABEL: test_mm_adds_epu8
59 // CHECK: call <16 x i8> @llvm.x86.sse2.paddus.b
Simon Pilgrima5c04932015-11-29 20:23:00 +000060 return _mm_adds_epu8(A, B);
61}
62
63__m128i test_mm_adds_epu16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000064 // CHECK-LABEL: test_mm_adds_epu16
65 // CHECK: call <8 x i16> @llvm.x86.sse2.paddus.w
Simon Pilgrima5c04932015-11-29 20:23:00 +000066 return _mm_adds_epu16(A, B);
67}
68
69__m128d test_mm_and_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000070 // CHECK-LABEL: test_mm_and_pd
71 // CHECK: and <4 x i32>
Simon Pilgrima5c04932015-11-29 20:23:00 +000072 return _mm_and_pd(A, B);
73}
74
75__m128i test_mm_and_si128(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000076 // CHECK-LABEL: test_mm_and_si128
77 // CHECK: and <2 x i64>
Simon Pilgrima5c04932015-11-29 20:23:00 +000078 return _mm_and_si128(A, B);
79}
80
81__m128i test_mm_avg_epu8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000082 // CHECK-LABEL: test_mm_avg_epu8
83 // CHECK: call <16 x i8> @llvm.x86.sse2.pavg.b
Simon Pilgrima5c04932015-11-29 20:23:00 +000084 return _mm_avg_epu8(A, B);
85}
86
87__m128i test_mm_avg_epu16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000088 // CHECK-LABEL: test_mm_avg_epu16
89 // CHECK: call <8 x i16> @llvm.x86.sse2.pavg.w
Simon Pilgrima5c04932015-11-29 20:23:00 +000090 return _mm_avg_epu16(A, B);
91}
92
93__m128i test_mm_bslli_si128(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +000094 // CHECK-LABEL: test_mm_bslli_si128
95 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26>
Simon Pilgrima5c04932015-11-29 20:23:00 +000096 return _mm_bslli_si128(A, 5);
97}
98
99__m128i test_mm_bsrli_si128(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000100 // CHECK-LABEL: test_mm_bsrli_si128
101 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000102 return _mm_bsrli_si128(A, 5);
103}
104
105void test_mm_clflush(void* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000106 // CHECK-LABEL: test_mm_clflush
107 // CHECK: call void @llvm.x86.sse2.clflush(i8* %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000108 _mm_clflush(A);
109}
110
111__m128i test_mm_cmpeq_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000112 // CHECK-LABEL: test_mm_cmpeq_epi8
113 // CHECK: icmp eq <16 x i8>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000114 return _mm_cmpeq_epi8(A, B);
115}
116
117__m128i test_mm_cmpeq_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000118 // CHECK-LABEL: test_mm_cmpeq_epi16
119 // CHECK: icmp eq <8 x i16>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000120 return _mm_cmpeq_epi16(A, B);
121}
122
123__m128i test_mm_cmpeq_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000124 // CHECK-LABEL: test_mm_cmpeq_epi32
125 // CHECK: icmp eq <4 x i32>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000126 return _mm_cmpeq_epi32(A, B);
127}
128
129__m128d test_mm_cmpeq_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000130 // CHECK-LABEL: test_mm_cmpeq_pd
131 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 0)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000132 return _mm_cmpeq_pd(A, B);
133}
134
135__m128d test_mm_cmpeq_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000136 // CHECK-LABEL: test_mm_cmpeq_sd
137 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 0)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000138 return _mm_cmpeq_sd(A, B);
139}
140
141__m128d test_mm_cmpge_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000142 // CHECK-LABEL: test_mm_cmpge_pd
143 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000144 return _mm_cmpge_pd(A, B);
145}
146
147__m128d test_mm_cmpge_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000148 // CHECK-LABEL: test_mm_cmpge_sd
149 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000150 return _mm_cmpge_sd(A, B);
151}
152
153__m128i test_mm_cmpgt_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000154 // CHECK-LABEL: test_mm_cmpgt_epi8
155 // CHECK: icmp sgt <16 x i8>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000156 return _mm_cmpgt_epi8(A, B);
157}
158
159__m128i test_mm_cmpgt_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000160 // CHECK-LABEL: test_mm_cmpgt_epi16
161 // CHECK: icmp sgt <8 x i16>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000162 return _mm_cmpgt_epi16(A, B);
163}
164
165__m128i test_mm_cmpgt_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000166 // CHECK-LABEL: test_mm_cmpgt_epi32
167 // CHECK: icmp sgt <4 x i32>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000168 return _mm_cmpgt_epi32(A, B);
169}
170
171__m128d test_mm_cmpgt_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000172 // CHECK-LABEL: test_mm_cmpgt_pd
173 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000174 return _mm_cmpgt_pd(A, B);
175}
176
177__m128d test_mm_cmpgt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000178 // CHECK-LABEL: test_mm_cmpgt_sd
179 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000180 return _mm_cmpgt_sd(A, B);
181}
182
183__m128d test_mm_cmple_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000184 // CHECK-LABEL: test_mm_cmple_pd
185 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000186 return _mm_cmple_pd(A, B);
187}
188
189__m128d test_mm_cmple_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000190 // CHECK-LABEL: test_mm_cmple_sd
191 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000192 return _mm_cmple_sd(A, B);
193}
194
195__m128i test_mm_cmplt_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000196 // CHECK-LABEL: test_mm_cmplt_epi8
197 // CHECK: icmp sgt <16 x i8>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000198 return _mm_cmplt_epi8(A, B);
199}
200
201__m128i test_mm_cmplt_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000202 // CHECK-LABEL: test_mm_cmplt_epi16
203 // CHECK: icmp sgt <8 x i16>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000204 return _mm_cmplt_epi16(A, B);
205}
206
207__m128i test_mm_cmplt_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000208 // CHECK-LABEL: test_mm_cmplt_epi32
209 // CHECK: icmp sgt <4 x i32>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000210 return _mm_cmplt_epi32(A, B);
211}
212
213__m128d test_mm_cmplt_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000214 // CHECK-LABEL: test_mm_cmplt_pd
215 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000216 return _mm_cmplt_pd(A, B);
217}
218
219__m128d test_mm_cmplt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000220 // CHECK-LABEL: test_mm_cmplt_sd
221 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000222 return _mm_cmplt_sd(A, B);
223}
224
225__m128d test_mm_cmpneq_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000226 // CHECK-LABEL: test_mm_cmpneq_pd
227 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 4)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000228 return _mm_cmpneq_pd(A, B);
229}
230
231__m128d test_mm_cmpneq_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000232 // CHECK-LABEL: test_mm_cmpneq_sd
233 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 4)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000234 return _mm_cmpneq_sd(A, B);
235}
236
237__m128d test_mm_cmpnge_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000238 // CHECK-LABEL: test_mm_cmpnge_pd
239 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000240 return _mm_cmpnge_pd(A, B);
241}
242
243__m128d test_mm_cmpnge_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000244 // CHECK-LABEL: test_mm_cmpnge_sd
245 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000246 return _mm_cmpnge_sd(A, B);
247}
248
249__m128d test_mm_cmpngt_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000250 // CHECK-LABEL: test_mm_cmpngt_pd
251 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000252 return _mm_cmpngt_pd(A, B);
253}
254
255__m128d test_mm_cmpngt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000256 // CHECK-LABEL: test_mm_cmpngt_sd
257 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000258 return _mm_cmpngt_sd(A, B);
259}
260
261__m128d test_mm_cmpnle_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000262 // CHECK-LABEL: test_mm_cmpnle_pd
263 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000264 return _mm_cmpnle_pd(A, B);
265}
266
267__m128d test_mm_cmpnle_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000268 // CHECK-LABEL: test_mm_cmpnle_sd
269 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000270 return _mm_cmpnle_sd(A, B);
271}
272
273__m128d test_mm_cmpnlt_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000274 // CHECK-LABEL: test_mm_cmpnlt_pd
275 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000276 return _mm_cmpnlt_pd(A, B);
277}
278
279__m128d test_mm_cmpnlt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000280 // CHECK-LABEL: test_mm_cmpnlt_sd
281 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000282 return _mm_cmpnlt_sd(A, B);
283}
284
285__m128d test_mm_cmpord_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000286 // CHECK-LABEL: test_mm_cmpord_pd
287 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 7)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000288 return _mm_cmpord_pd(A, B);
289}
290
291__m128d test_mm_cmpord_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000292 // CHECK-LABEL: test_mm_cmpord_sd
293 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 7)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000294 return _mm_cmpord_sd(A, B);
295}
296
297__m128d test_mm_cmpunord_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000298 // CHECK-LABEL: test_mm_cmpunord_pd
299 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 3)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000300 return _mm_cmpunord_pd(A, B);
301}
302
303__m128d test_mm_cmpunord_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000304 // CHECK-LABEL: test_mm_cmpunord_sd
305 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 3)
Simon Pilgrima5c04932015-11-29 20:23:00 +0000306 return _mm_cmpunord_sd(A, B);
307}
308
309int test_mm_comieq_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000310 // CHECK-LABEL: test_mm_comieq_sd
311 // CHECK: call i32 @llvm.x86.sse2.comieq.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000312 return _mm_comieq_sd(A, B);
313}
314
315int test_mm_comige_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000316 // CHECK-LABEL: test_mm_comige_sd
317 // CHECK: call i32 @llvm.x86.sse2.comige.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000318 return _mm_comige_sd(A, B);
319}
320
321int test_mm_comigt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000322 // CHECK-LABEL: test_mm_comigt_sd
323 // CHECK: call i32 @llvm.x86.sse2.comigt.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000324 return _mm_comigt_sd(A, B);
325}
326
327int test_mm_comile_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000328 // CHECK-LABEL: test_mm_comile_sd
329 // CHECK: call i32 @llvm.x86.sse2.comile.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000330 return _mm_comile_sd(A, B);
331}
332
333int test_mm_comilt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000334 // CHECK-LABEL: test_mm_comilt_sd
335 // CHECK: call i32 @llvm.x86.sse2.comilt.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000336 return _mm_comilt_sd(A, B);
337}
338
339int test_mm_comineq_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000340 // CHECK-LABEL: test_mm_comineq_sd
341 // CHECK: call i32 @llvm.x86.sse2.comineq.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000342 return _mm_comineq_sd(A, B);
343}
344
345__m128d test_mm_cvtepi32_pd(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000346 // CHECK-LABEL: test_mm_cvtepi32_pd
347 // CHECK: call <2 x double> @llvm.x86.sse2.cvtdq2pd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000348 return _mm_cvtepi32_pd(A);
349}
350
351__m128 test_mm_cvtepi32_ps(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000352 // CHECK-LABEL: test_mm_cvtepi32_ps
353 // CHECK: call <4 x float> @llvm.x86.sse2.cvtdq2ps
Simon Pilgrima5c04932015-11-29 20:23:00 +0000354 return _mm_cvtepi32_ps(A);
355}
356
357__m128i test_mm_cvtpd_epi32(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000358 // CHECK-LABEL: test_mm_cvtpd_epi32
359 // CHECK: call <4 x i32> @llvm.x86.sse2.cvtpd2dq
Simon Pilgrima5c04932015-11-29 20:23:00 +0000360 return _mm_cvtpd_epi32(A);
361}
362
363__m128 test_mm_cvtpd_ps(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000364 // CHECK-LABEL: test_mm_cvtpd_ps
365 // CHECK: call <4 x float> @llvm.x86.sse2.cvtpd2ps
Simon Pilgrima5c04932015-11-29 20:23:00 +0000366 return _mm_cvtpd_ps(A);
367}
368
369__m128i test_mm_cvtps_epi32(__m128 A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000370 // CHECK-LABEL: test_mm_cvtps_epi32
371 // CHECK: call <4 x i32> @llvm.x86.sse2.cvtps2dq
Simon Pilgrima5c04932015-11-29 20:23:00 +0000372 return _mm_cvtps_epi32(A);
373}
374
375__m128d test_mm_cvtps_pd(__m128 A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000376 // CHECK-LABEL: test_mm_cvtps_pd
377 // CHECK: call <2 x double> @llvm.x86.sse2.cvtps2pd
Simon Pilgrima5c04932015-11-29 20:23:00 +0000378 return _mm_cvtps_pd(A);
379}
380
381double test_mm_cvtsd_f64(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000382 // CHECK-LABEL: test_mm_cvtsd_f64
383 // CHECK: extractelement <2 x double> %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000384 return _mm_cvtsd_f64(A);
385}
386
387int test_mm_cvtsd_si32(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000388 // CHECK-LABEL: test_mm_cvtsd_si32
389 // CHECK: call i32 @llvm.x86.sse2.cvtsd2si
Simon Pilgrima5c04932015-11-29 20:23:00 +0000390 return _mm_cvtsd_si32(A);
391}
392
393long long test_mm_cvtsd_si64(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000394 // CHECK-LABEL: test_mm_cvtsd_si64
395 // CHECK: call i64 @llvm.x86.sse2.cvtsd2si64
Simon Pilgrima5c04932015-11-29 20:23:00 +0000396 return _mm_cvtsd_si64(A);
397}
398
399__m128 test_mm_cvtsd_ss(__m128 A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000400 // CHECK-LABEL: test_mm_cvtsd_ss
401 // CHECK: fptrunc double %{{.*}} to float
Simon Pilgrima5c04932015-11-29 20:23:00 +0000402 return _mm_cvtsd_ss(A, B);
403}
404
405int test_mm_cvtsi128_si32(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000406 // CHECK-LABEL: test_mm_cvtsi128_si32
407 // CHECK: extractelement <4 x i32> %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000408 return _mm_cvtsi128_si32(A);
409}
410
411long long test_mm_cvtsi128_si64(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000412 // CHECK-LABEL: test_mm_cvtsi128_si64
413 // CHECK: extractelement <2 x i64> %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000414 return _mm_cvtsi128_si64(A);
415}
416
417__m128d test_mm_cvtsi32_sd(__m128d A, int B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000418 // CHECK-LABEL: test_mm_cvtsi32_sd
419 // CHECK: sitofp i32 %{{.*}} to double
420 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000421 return _mm_cvtsi32_sd(A, B);
422}
423
424__m128i test_mm_cvtsi32_si128(int A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000425 // CHECK-LABEL: test_mm_cvtsi32_si128
426 // CHECK: insertelement <4 x i32> undef, i32 %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000427 return _mm_cvtsi32_si128(A);
428}
429
430__m128d test_mm_cvtsi64_sd(__m128d A, long long B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000431 // CHECK-LABEL: test_mm_cvtsi64_sd
432 // CHECK: sitofp i64 %{{.*}} to double
433 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000434 return _mm_cvtsi64_sd(A, B);
435}
436
437__m128i test_mm_cvtsi64_si128(long long A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000438 // CHECK-LABEL: test_mm_cvtsi64_si128
439 // CHECK: insertelement <2 x i64> undef, i64 %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000440 return _mm_cvtsi64_si128(A);
441}
442
443__m128d test_mm_cvtss_sd(__m128d A, __m128 B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000444 // CHECK-LABEL: test_mm_cvtss_sd
445 // CHECK: extractelement <4 x float> %{{.*}}, i32 0
446 // CHECK: fpext float %{{.*}} to double
447 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0
Simon Pilgrima5c04932015-11-29 20:23:00 +0000448 return _mm_cvtss_sd(A, B);
449}
450
451__m128i test_mm_cvttpd_epi32(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000452 // CHECK-LABEL: test_mm_cvttpd_epi32
453 // CHECK: call <4 x i32> @llvm.x86.sse2.cvttpd2dq
Simon Pilgrima5c04932015-11-29 20:23:00 +0000454 return _mm_cvttpd_epi32(A);
455}
456
457__m128i test_mm_cvttps_epi32(__m128 A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000458 // CHECK-LABEL: test_mm_cvttps_epi32
459 // CHECK: call <4 x i32> @llvm.x86.sse2.cvttps2dq
Simon Pilgrima5c04932015-11-29 20:23:00 +0000460 return _mm_cvttps_epi32(A);
461}
462
463int test_mm_cvttsd_si32(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000464 // CHECK-LABEL: test_mm_cvttsd_si32
465 // CHECK: extractelement <2 x double> %{{.*}}, i32 0
466 // CHECK: fptosi double %{{.*}} to i32
Simon Pilgrima5c04932015-11-29 20:23:00 +0000467 return _mm_cvttsd_si32(A);
468}
469
470long long test_mm_cvttsd_si64(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000471 // CHECK-LABEL: test_mm_cvttsd_si64
472 // CHECK: extractelement <2 x double> %{{.*}}, i32 0
473 // CHECK: fptosi double %{{.*}} to i64
Simon Pilgrima5c04932015-11-29 20:23:00 +0000474 return _mm_cvttsd_si64(A);
475}
476
477__m128d test_mm_div_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000478 // CHECK-LABEL: test_mm_div_pd
479 // CHECK: fdiv <2 x double>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000480 return _mm_div_pd(A, B);
481}
482
483__m128d test_mm_div_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000484 // CHECK-LABEL: test_mm_div_sd
485 // CHECK: fdiv double
Simon Pilgrima5c04932015-11-29 20:23:00 +0000486 return _mm_div_sd(A, B);
487}
488
489// Lowering to pextrw requires optimization.
490int test_mm_extract_epi16(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000491 // CHECK-LABEL: test_mm_extract_epi16
492 // CHECK: [[x:%.*]] = and i32 %{{.*}}, 7
493 // CHECK: extractelement <8 x i16> %{{.*}}, i32 [[x]]
Simon Pilgrima5c04932015-11-29 20:23:00 +0000494 return _mm_extract_epi16(A, 8);
495}
496
Simon Pilgrima5c04932015-11-29 20:23:00 +0000497__m128i test_mm_insert_epi16(__m128i A, short B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000498 // CHECK-LABEL: test_mm_insert_epi16
499 // CHECK: [[x:%.*]] = and i32 %{{.*}}, 7
500 // CHECK: insertelement <8 x i16> %{{.*}}, i32 [[x]]
Simon Pilgrima5c04932015-11-29 20:23:00 +0000501 return _mm_insert_epi16(A, B, 8);
502}
503
504void test_mm_lfence() {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000505 // CHECK-LABEL: test_mm_lfence
506 // CHECK: call void @llvm.x86.sse2.lfence()
Simon Pilgrima5c04932015-11-29 20:23:00 +0000507 _mm_lfence();
508}
509
510__m128d test_mm_load_pd(double const* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000511 // CHECK-LABEL: test_mm_load_pd
512 // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 16
Simon Pilgrima5c04932015-11-29 20:23:00 +0000513 return _mm_load_pd(A);
514}
515
516__m128d test_mm_load_sd(double const* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000517 // CHECK-LABEL: test_mm_load_sd
518 // CHECK: load double, double* %{{.*}}, align 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000519 return _mm_load_sd(A);
520}
521
522__m128i test_mm_load_si128(__m128i const* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000523 // CHECK-LABEL: test_mm_load_si128
524 // CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 16
Simon Pilgrima5c04932015-11-29 20:23:00 +0000525 return _mm_load_si128(A);
526}
527
528__m128d test_mm_load1_pd(double const* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000529 // CHECK-LABEL: test_mm_load1_pd
530 // CHECK: load double, double* %{{.*}}, align 8
531 // CHECK: insertelement <2 x double> undef, double %{{.*}}, i32 0
532 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000533 return _mm_load1_pd(A);
534}
535
536__m128d test_mm_loadh_pd(__m128d x, void* y) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000537 // CHECK-LABEL: test_mm_loadh_pd
538 // CHECK: load double, double* %{{.*}}, align 1{{$}}
Simon Pilgrim2d1decf2016-05-17 22:03:31 +0000539 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000540 return _mm_loadh_pd(x, y);
541}
542
Simon Pilgrim2d1decf2016-05-17 22:03:31 +0000543__m128i test_mm_loadl_epi64(__m128i* y) {
544 // CHECK: test_mm_loadl_epi64
545 // CHECK: load i64, i64* {{.*}}, align 1{{$}}
546 // CHECK: insertelement <2 x i64> undef, i64 {{.*}}, i32 0
547 // CHECK: insertelement <2 x i64> {{.*}}, i64 0, i32 1
548 return _mm_loadl_epi64(y);
549}
550
551__m128d test_mm_loadl_pd(__m128d x, void* y) {
552 // CHECK-LABEL: test_mm_loadl_pd
553 // CHECK: load double, double* %{{.*}}, align 1{{$}}
554 // CHECK: insertelement <2 x double> undef, double %{{.*}}, i32 0
555 // CHECK: extractelement <2 x double> %{{.*}}, i32 1
556 // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 1
557 return _mm_loadl_pd(x, y);
558}
559
Simon Pilgrima5c04932015-11-29 20:23:00 +0000560__m128d test_mm_loadr_pd(double const* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000561 // CHECK-LABEL: test_mm_loadr_pd
562 // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 16
563 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 1, i32 0>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000564 return _mm_loadr_pd(A);
565}
566
567__m128d test_mm_loadu_pd(double const* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000568 // CHECK-LABEL: test_mm_loadu_pd
569 // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000570 return _mm_loadu_pd(A);
571}
572
573__m128i test_mm_loadu_si128(__m128i const* A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000574 // CHECK-LABEL: test_mm_loadu_si128
575 // CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000576 return _mm_loadu_si128(A);
577}
578
579__m128i test_mm_madd_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000580 // CHECK-LABEL: test_mm_madd_epi16
581 // CHECK: call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000582 return _mm_madd_epi16(A, B);
583}
584
585void test_mm_maskmoveu_si128(__m128i A, __m128i B, char* C) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000586 // CHECK-LABEL: test_mm_maskmoveu_si128
587 // CHECK: call void @llvm.x86.sse2.maskmov.dqu(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8* %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000588 _mm_maskmoveu_si128(A, B, C);
589}
590
591__m128i test_mm_max_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000592 // CHECK-LABEL: test_mm_max_epi16
593 // CHECK: call <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000594 return _mm_max_epi16(A, B);
595}
596
597__m128i test_mm_max_epu8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000598 // CHECK-LABEL: test_mm_max_epu8
599 // CHECK: call <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000600 return _mm_max_epu8(A, B);
601}
602
603__m128d test_mm_max_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000604 // CHECK-LABEL: test_mm_max_pd
605 // CHECK: call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000606 return _mm_max_pd(A, B);
607}
608
609__m128d test_mm_max_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000610 // CHECK-LABEL: test_mm_max_sd
611 // CHECK: call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000612 return _mm_max_sd(A, B);
613}
614
615void test_mm_mfence() {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000616 // CHECK-LABEL: test_mm_mfence
617 // CHECK: call void @llvm.x86.sse2.mfence()
Simon Pilgrima5c04932015-11-29 20:23:00 +0000618 _mm_mfence();
619}
620
621__m128i test_mm_min_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000622 // CHECK-LABEL: test_mm_min_epi16
623 // CHECK: call <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000624 return _mm_min_epi16(A, B);
625}
626
627__m128i test_mm_min_epu8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000628 // CHECK-LABEL: test_mm_min_epu8
629 // CHECK: call <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000630 return _mm_min_epu8(A, B);
631}
632
633__m128d test_mm_min_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000634 // CHECK-LABEL: test_mm_min_pd
635 // CHECK: call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000636 return _mm_min_pd(A, B);
637}
638
639__m128d test_mm_min_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000640 // CHECK-LABEL: test_mm_min_sd
641 // CHECK: call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000642 return _mm_min_sd(A, B);
643}
644
645int test_mm_movemask_epi8(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000646 // CHECK-LABEL: test_mm_movemask_epi8
647 // CHECK: call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000648 return _mm_movemask_epi8(A);
649}
650
651int test_mm_movemask_pd(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000652 // CHECK-LABEL: test_mm_movemask_pd
653 // CHECK: call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000654 return _mm_movemask_pd(A);
655}
656
657__m128i test_mm_mul_epu32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000658 // CHECK-LABEL: test_mm_mul_epu32
659 // CHECK: call <2 x i64> @llvm.x86.sse2.pmulu.dq(<4 x i32> %{{.*}}, <4 x i32> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000660 return _mm_mul_epu32(A, B);
661}
662
663__m128d test_mm_mul_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000664 // CHECK-LABEL: test_mm_mul_pd
665 // CHECK: fmul <2 x double> %{{.*}}, %{{.*}}
Simon Pilgrima5c04932015-11-29 20:23:00 +0000666 return _mm_mul_pd(A, B);
667}
668
669__m128d test_mm_mul_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000670 // CHECK-LABEL: test_mm_mul_sd
671 // CHECK: fmul double %{{.*}}, %{{.*}}
Simon Pilgrima5c04932015-11-29 20:23:00 +0000672 return _mm_mul_sd(A, B);
673}
674
675__m128i test_mm_mulhi_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000676 // CHECK-LABEL: test_mm_mulhi_epi16
677 // CHECK: call <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000678 return _mm_mulhi_epi16(A, B);
679}
680
681__m128i test_mm_mulhi_epu16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000682 // CHECK-LABEL: test_mm_mulhi_epu16
683 // CHECK: call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000684 return _mm_mulhi_epu16(A, B);
685}
686
687__m128i test_mm_mullo_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000688 // CHECK-LABEL: test_mm_mullo_epi16
689 // CHECK: mul <8 x i16> %{{.*}}, %{{.*}}
Simon Pilgrima5c04932015-11-29 20:23:00 +0000690 return _mm_mullo_epi16(A, B);
691}
692
693__m128d test_mm_or_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000694 // CHECK-LABEL: test_mm_or_pd
695 // CHECK: or <4 x i32> %{{.*}}, %{{.*}}
Simon Pilgrima5c04932015-11-29 20:23:00 +0000696 return _mm_or_pd(A, B);
697}
698
699__m128i test_mm_or_si128(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000700 // CHECK-LABEL: test_mm_or_si128
701 // CHECK: or <2 x i64> %{{.*}}, %{{.*}}
Simon Pilgrima5c04932015-11-29 20:23:00 +0000702 return _mm_or_si128(A, B);
703}
704
705__m128i test_mm_packs_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000706 // CHECK-LABEL: test_mm_packs_epi16
707 // CHECK: call <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000708 return _mm_packs_epi16(A, B);
709}
710
711__m128i test_mm_packs_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000712 // CHECK-LABEL: test_mm_packs_epi32
713 // CHECK: call <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000714 return _mm_packs_epi32(A, B);
715}
716
717__m128i test_mm_packus_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000718 // CHECK-LABEL: test_mm_packus_epi16
719 // CHECK: call <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000720 return _mm_packus_epi16(A, B);
721}
722
723void test_mm_pause() {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000724 // CHECK-LABEL: test_mm_pause
725 // CHECK: call void @llvm.x86.sse2.pause()
Simon Pilgrima5c04932015-11-29 20:23:00 +0000726 return _mm_pause();
727}
728
729__m128i test_mm_sad_epu8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000730 // CHECK-LABEL: test_mm_sad_epu8
731 // CHECK: call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000732 return _mm_sad_epu8(A, B);
733}
734
735__m128d test_mm_setzero_pd() {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000736 // CHECK-LABEL: test_mm_setzero_pd
737 // CHECK: store <2 x double> zeroinitializer
Simon Pilgrima5c04932015-11-29 20:23:00 +0000738 return _mm_setzero_pd();
739}
740
741__m128i test_mm_setzero_si128() {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000742 // CHECK-LABEL: test_mm_setzero_si128
743 // CHECK: store <2 x i64> zeroinitializer
Simon Pilgrima5c04932015-11-29 20:23:00 +0000744 return _mm_setzero_si128();
745}
746
747__m128i test_mm_shuffle_epi32(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000748 // CHECK-LABEL: test_mm_shuffle_epi32
749 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> zeroinitializer
Simon Pilgrima5c04932015-11-29 20:23:00 +0000750 return _mm_shuffle_epi32(A, 0);
751}
752
753__m128d test_mm_shuffle_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000754 // CHECK-LABEL: test_mm_shuffle_pd
755 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 1, i32 2>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000756 return _mm_shuffle_pd(A, B, 1);
757}
758
759__m128i test_mm_shufflehi_epi16(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000760 // CHECK-LABEL: test_mm_shufflehi_epi16
761 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 4>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000762 return _mm_shufflehi_epi16(A, 0);
763}
764
765__m128i test_mm_shufflelo_epi16(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000766 // CHECK-LABEL: test_mm_shufflelo_epi16
767 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000768 return _mm_shufflelo_epi16(A, 0);
769}
770
771__m128i test_mm_sll_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000772 // CHECK-LABEL: test_mm_sll_epi16
773 // CHECK: call <8 x i16> @llvm.x86.sse2.psll.w
Simon Pilgrima5c04932015-11-29 20:23:00 +0000774 return _mm_sll_epi16(A, B);
775}
776
777__m128i test_mm_sll_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000778 // CHECK-LABEL: test_mm_sll_epi32
779 // CHECK: call <4 x i32> @llvm.x86.sse2.psll.d
Simon Pilgrima5c04932015-11-29 20:23:00 +0000780 return _mm_sll_epi32(A, B);
781}
782
783__m128i test_mm_sll_epi64(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000784 // CHECK-LABEL: test_mm_sll_epi64
785 // CHECK: call <2 x i64> @llvm.x86.sse2.psll.q
Simon Pilgrima5c04932015-11-29 20:23:00 +0000786 return _mm_sll_epi64(A, B);
787}
788
789__m128i test_mm_slli_epi16(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000790 // CHECK-LABEL: test_mm_slli_epi16
791 // CHECK: call <8 x i16> @llvm.x86.sse2.pslli.w
Simon Pilgrima5c04932015-11-29 20:23:00 +0000792 return _mm_slli_epi16(A, 1);
793}
794
795__m128i test_mm_slli_epi32(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000796 // CHECK-LABEL: test_mm_slli_epi32
797 // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d
Simon Pilgrima5c04932015-11-29 20:23:00 +0000798 return _mm_slli_epi32(A, 1);
799}
800
801__m128i test_mm_slli_epi64(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000802 // CHECK-LABEL: test_mm_slli_epi64
803 // CHECK: call <2 x i64> @llvm.x86.sse2.pslli.q
Simon Pilgrima5c04932015-11-29 20:23:00 +0000804 return _mm_slli_epi64(A, 1);
805}
806
807__m128i test_mm_slli_si128(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000808 // CHECK-LABEL: test_mm_slli_si128
809 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000810 return _mm_slli_si128(A, 5);
811}
812
813__m128d test_mm_sqrt_pd(__m128d A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000814 // CHECK-LABEL: test_mm_sqrt_pd
815 // CHECK: call <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000816 return _mm_sqrt_pd(A);
817}
818
819__m128d test_mm_sqrt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000820 // CHECK-LABEL: test_mm_sqrt_sd
821 // CHECK: call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %{{.*}})
Simon Pilgrima5c04932015-11-29 20:23:00 +0000822 return _mm_sqrt_sd(A, B);
823}
824
825__m128i test_mm_sra_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000826 // CHECK-LABEL: test_mm_sra_epi16
827 // CHECK: call <8 x i16> @llvm.x86.sse2.psra.w
Simon Pilgrima5c04932015-11-29 20:23:00 +0000828 return _mm_sra_epi16(A, B);
829}
830
831__m128i test_mm_sra_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000832 // CHECK-LABEL: test_mm_sra_epi32
833 // CHECK: call <4 x i32> @llvm.x86.sse2.psra.d
Simon Pilgrima5c04932015-11-29 20:23:00 +0000834 return _mm_sra_epi32(A, B);
835}
836
837__m128i test_mm_srai_epi16(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000838 // CHECK-LABEL: test_mm_srai_epi16
839 // CHECK: call <8 x i16> @llvm.x86.sse2.psrai.w
Simon Pilgrima5c04932015-11-29 20:23:00 +0000840 return _mm_srai_epi16(A, 1);
841}
842
843__m128i test_mm_srai_epi32(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000844 // CHECK-LABEL: test_mm_srai_epi32
845 // CHECK: call <4 x i32> @llvm.x86.sse2.psrai.d
Simon Pilgrima5c04932015-11-29 20:23:00 +0000846 return _mm_srai_epi32(A, 1);
847}
848
849__m128i test_mm_srl_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000850 // CHECK-LABEL: test_mm_srl_epi16
851 // CHECK: call <8 x i16> @llvm.x86.sse2.psrl.w
Simon Pilgrima5c04932015-11-29 20:23:00 +0000852 return _mm_srl_epi16(A, B);
853}
854
855__m128i test_mm_srl_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000856 // CHECK-LABEL: test_mm_srl_epi32
857 // CHECK: call <4 x i32> @llvm.x86.sse2.psrl.d
Simon Pilgrima5c04932015-11-29 20:23:00 +0000858 return _mm_srl_epi32(A, B);
859}
860
861__m128i test_mm_srl_epi64(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000862 // CHECK-LABEL: test_mm_srl_epi64
863 // CHECK: call <2 x i64> @llvm.x86.sse2.psrl.q
Simon Pilgrima5c04932015-11-29 20:23:00 +0000864 return _mm_srl_epi64(A, B);
865}
866
867__m128i test_mm_srli_epi16(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000868 // CHECK-LABEL: test_mm_srli_epi16
869 // CHECK: call <8 x i16> @llvm.x86.sse2.psrli.w
Simon Pilgrima5c04932015-11-29 20:23:00 +0000870 return _mm_srli_epi16(A, 1);
871}
872
873__m128i test_mm_srli_epi32(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000874 // CHECK-LABEL: test_mm_srli_epi32
875 // CHECK: call <4 x i32> @llvm.x86.sse2.psrli.d
Simon Pilgrima5c04932015-11-29 20:23:00 +0000876 return _mm_srli_epi32(A, 1);
877}
878
879__m128i test_mm_srli_epi64(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000880 // CHECK-LABEL: test_mm_srli_epi64
881 // CHECK: call <2 x i64> @llvm.x86.sse2.psrli.q
Simon Pilgrima5c04932015-11-29 20:23:00 +0000882 return _mm_srli_epi64(A, 1);
883}
884
885__m128i test_mm_srli_si128(__m128i A) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000886 // CHECK-LABEL: test_mm_srli_si128
887 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000888 return _mm_srli_si128(A, 5);
889}
890
891void test_mm_store_pd(double* A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000892 // CHECK-LABEL: test_mm_store_pd
893 // CHECK: store <2 x double> %{{.*}}, <2 x double>* %{{.*}}, align 16
Simon Pilgrima5c04932015-11-29 20:23:00 +0000894 _mm_store_pd(A, B);
895}
896
897void test_mm_store_sd(double* A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000898 // CHECK-LABEL: test_mm_store_sd
899 // CHECK: store double %{{.*}}, double* %{{.*}}, align 1{{$}}
Simon Pilgrima5c04932015-11-29 20:23:00 +0000900 _mm_store_sd(A, B);
901}
902
903void test_mm_store_si128(__m128i* A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000904 // CHECK-LABEL: test_mm_store_si128
905 // CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16
Simon Pilgrima5c04932015-11-29 20:23:00 +0000906 _mm_store_si128(A, B);
907}
908
Simon Pilgrim2d1decf2016-05-17 22:03:31 +0000909void test_mm_store1_pd(__m128d x, void* y) {
910 // CHECK-LABEL: test_mm_store1_pd
911 // CHECK: extractelement <2 x double> %{{.*}}, i32 0
912 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
913 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
914 _mm_store1_pd(y, x);
915}
916
Simon Pilgrima5c04932015-11-29 20:23:00 +0000917void test_mm_storeh_pd(double* A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000918 // CHECK-LABEL: test_mm_storeh_pd
Simon Pilgrim2d1decf2016-05-17 22:03:31 +0000919 // CHECK: extractelement <2 x double> %{{.*}}, i32 1
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000920 // CHECK: store double %{{.*}}, double* %{{.*}}, align 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000921 _mm_storeh_pd(A, B);
922}
923
Simon Pilgrim2d1decf2016-05-17 22:03:31 +0000924void test_mm_storel_epi64(__m128i x, void* y) {
925 // CHECK-LABEL: test_mm_storel_epi64
926 // CHECK: extractelement <2 x i64> %{{.*}}, i32 0
927 // CHECK: store {{.*}} i64* {{.*}}, align 1{{$}}
928 _mm_storel_epi64(y, x);
929}
930
Simon Pilgrima5c04932015-11-29 20:23:00 +0000931void test_mm_storel_pd(double* A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000932 // CHECK-LABEL: test_mm_storel_pd
Simon Pilgrim2d1decf2016-05-17 22:03:31 +0000933 // CHECK: extractelement <2 x double> %{{.*}}, i32 0
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000934 // CHECK: store double %{{.*}}, double* %{{.*}}, align 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000935 _mm_storel_pd(A, B);
936}
937
Simon Pilgrim2d1decf2016-05-17 22:03:31 +0000938void test_mm_storer_pd(__m128d A, double* B) {
939 // CHECK-LABEL: test_mm_storer_pd
940 // CHECK: shufflevector <2 x double> {{.*}}, <2 x double> {{.*}}, <2 x i32> <i32 1, i32 0>
941 // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}}
942 _mm_storer_pd(B, A);
943}
944
Simon Pilgrima5c04932015-11-29 20:23:00 +0000945void test_mm_storeu_pd(double* A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000946 // CHECK-LABEL: test_mm_storeu_pd
947 // CHECK: store <2 x double> %{{.*}}, <2 x double>* %{{.*}}, align 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000948 _mm_storeu_pd(A, B);
949}
950
951void test_mm_storeu_si128(__m128i* A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000952 // CHECK-LABEL: test_mm_storeu_si128
953 // CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1
Simon Pilgrima5c04932015-11-29 20:23:00 +0000954 _mm_storeu_si128(A, B);
955}
956
957void test_mm_stream_pd(double *A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000958 // CHECK-LABEL: test_mm_stream_pd
959 // CHECK: store <2 x double> %{{.*}}, <2 x double>* %{{.*}}, align 16, !nontemporal
Simon Pilgrima5c04932015-11-29 20:23:00 +0000960 _mm_stream_pd(A, B);
961}
962
963void test_mm_stream_si32(int *A, int B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000964 // CHECK-LABEL: test_mm_stream_si32
965 // CHECK: store i32 %{{.*}}, i32* %{{.*}}, align 1, !nontemporal
Simon Pilgrima5c04932015-11-29 20:23:00 +0000966 _mm_stream_si32(A, B);
967}
968
969void test_mm_stream_si64(long long *A, long long B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000970 // CHECK-LABEL: test_mm_stream_si64
971 // CHECK: store i64 %{{.*}}, i64* %{{.*}}, align 1, !nontemporal
Simon Pilgrima5c04932015-11-29 20:23:00 +0000972 _mm_stream_si64(A, B);
973}
974
975void test_mm_stream_si128(__m128i *A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000976 // CHECK-LABEL: test_mm_stream_si128
977 // CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 16, !nontemporal
Simon Pilgrima5c04932015-11-29 20:23:00 +0000978 _mm_stream_si128(A, B);
979}
980
981__m128i test_mm_sub_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000982 // CHECK-LABEL: test_mm_sub_epi8
983 // CHECK: sub <16 x i8>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000984 return _mm_sub_epi8(A, B);
985}
986
987__m128i test_mm_sub_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000988 // CHECK-LABEL: test_mm_sub_epi16
989 // CHECK: sub <8 x i16>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000990 return _mm_sub_epi16(A, B);
991}
992
993__m128i test_mm_sub_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +0000994 // CHECK-LABEL: test_mm_sub_epi32
995 // CHECK: sub <4 x i32>
Simon Pilgrima5c04932015-11-29 20:23:00 +0000996 return _mm_sub_epi32(A, B);
997}
998
999__m128i test_mm_sub_epi64(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001000 // CHECK-LABEL: test_mm_sub_epi64
1001 // CHECK: sub <2 x i64>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001002 return _mm_sub_epi64(A, B);
1003}
1004
1005__m128d test_mm_sub_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001006 // CHECK-LABEL: test_mm_sub_pd
1007 // CHECK: fsub <2 x double>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001008 return _mm_sub_pd(A, B);
1009}
1010
1011__m128d test_mm_sub_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001012 // CHECK-LABEL: test_mm_sub_sd
1013 // CHECK: fsub double
Simon Pilgrima5c04932015-11-29 20:23:00 +00001014 return _mm_sub_sd(A, B);
1015}
1016
1017__m128i test_mm_subs_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001018 // CHECK-LABEL: test_mm_subs_epi8
1019 // CHECK: call <16 x i8> @llvm.x86.sse2.psubs.b
Simon Pilgrima5c04932015-11-29 20:23:00 +00001020 return _mm_subs_epi8(A, B);
1021}
1022
1023__m128i test_mm_subs_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001024 // CHECK-LABEL: test_mm_subs_epi16
1025 // CHECK: call <8 x i16> @llvm.x86.sse2.psubs.w
Simon Pilgrima5c04932015-11-29 20:23:00 +00001026 return _mm_subs_epi16(A, B);
1027}
1028
1029__m128i test_mm_subs_epu8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001030 // CHECK-LABEL: test_mm_subs_epu8
1031 // CHECK: call <16 x i8> @llvm.x86.sse2.psubus.b
Simon Pilgrima5c04932015-11-29 20:23:00 +00001032 return _mm_subs_epu8(A, B);
1033}
1034
1035__m128i test_mm_subs_epu16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001036 // CHECK-LABEL: test_mm_subs_epu16
1037 // CHECK: call <8 x i16> @llvm.x86.sse2.psubus.w
Simon Pilgrima5c04932015-11-29 20:23:00 +00001038 return _mm_subs_epu16(A, B);
1039}
1040
1041int test_mm_ucomieq_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001042 // CHECK-LABEL: test_mm_ucomieq_sd
1043 // CHECK: call i32 @llvm.x86.sse2.ucomieq.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +00001044 return _mm_ucomieq_sd(A, B);
1045}
1046
1047int test_mm_ucomige_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001048 // CHECK-LABEL: test_mm_ucomige_sd
1049 // CHECK: call i32 @llvm.x86.sse2.ucomige.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +00001050 return _mm_ucomige_sd(A, B);
1051}
1052
1053int test_mm_ucomigt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001054 // CHECK-LABEL: test_mm_ucomigt_sd
1055 // CHECK: call i32 @llvm.x86.sse2.ucomigt.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +00001056 return _mm_ucomigt_sd(A, B);
1057}
1058
1059int test_mm_ucomile_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001060 // CHECK-LABEL: test_mm_ucomile_sd
1061 // CHECK: call i32 @llvm.x86.sse2.ucomile.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +00001062 return _mm_ucomile_sd(A, B);
1063}
1064
1065int test_mm_ucomilt_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001066 // CHECK-LABEL: test_mm_ucomilt_sd
1067 // CHECK: call i32 @llvm.x86.sse2.ucomilt.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +00001068 return _mm_ucomilt_sd(A, B);
1069}
1070
1071int test_mm_ucomineq_sd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001072 // CHECK-LABEL: test_mm_ucomineq_sd
1073 // CHECK: call i32 @llvm.x86.sse2.ucomineq.sd
Simon Pilgrima5c04932015-11-29 20:23:00 +00001074 return _mm_ucomineq_sd(A, B);
1075}
1076
Simon Pilgrim2d1decf2016-05-17 22:03:31 +00001077__m128d test_mm_undefined_pd() {
1078 // CHECK-LABEL: @test_mm_undefined_pd
1079 // CHECK: ret <2 x double> undef
1080 return _mm_undefined_pd();
1081}
1082
1083__m128i test_mm_undefined_si128() {
1084 // CHECK-LABEL: @test_mm_undefined_si128
1085 // CHECK: ret <2 x i64> undef
1086 return _mm_undefined_si128();
1087}
1088
Simon Pilgrima5c04932015-11-29 20:23:00 +00001089__m128i test_mm_unpackhi_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001090 // CHECK-LABEL: test_mm_unpackhi_epi8
1091 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001092 return _mm_unpackhi_epi8(A, B);
1093}
1094
1095__m128i test_mm_unpackhi_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001096 // CHECK-LABEL: test_mm_unpackhi_epi16
1097 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001098 return _mm_unpackhi_epi16(A, B);
1099}
1100
1101__m128i test_mm_unpackhi_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001102 // CHECK-LABEL: test_mm_unpackhi_epi32
1103 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001104 return _mm_unpackhi_epi32(A, B);
1105}
1106
1107__m128i test_mm_unpackhi_epi64(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001108 // CHECK-LABEL: test_mm_unpackhi_epi64
1109 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 3>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001110 return _mm_unpackhi_epi64(A, B);
1111}
1112
1113__m128d test_mm_unpackhi_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001114 // CHECK-LABEL: test_mm_unpackhi_pd
1115 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 1, i32 3>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001116 return _mm_unpackhi_pd(A, B);
1117}
1118
1119__m128i test_mm_unpacklo_epi8(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001120 // CHECK-LABEL: test_mm_unpacklo_epi8
1121 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001122 return _mm_unpacklo_epi8(A, B);
1123}
1124
1125__m128i test_mm_unpacklo_epi16(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001126 // CHECK-LABEL: test_mm_unpacklo_epi16
1127 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001128 return _mm_unpacklo_epi16(A, B);
1129}
1130
1131__m128i test_mm_unpacklo_epi32(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001132 // CHECK-LABEL: test_mm_unpacklo_epi32
1133 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001134 return _mm_unpacklo_epi32(A, B);
1135}
1136
1137__m128i test_mm_unpacklo_epi64(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001138 // CHECK-LABEL: test_mm_unpacklo_epi64
1139 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 0, i32 2>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001140 return _mm_unpacklo_epi64(A, B);
1141}
1142
1143__m128d test_mm_unpacklo_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001144 // CHECK-LABEL: test_mm_unpacklo_pd
1145 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 0, i32 2>
Simon Pilgrima5c04932015-11-29 20:23:00 +00001146 return _mm_unpacklo_pd(A, B);
1147}
1148
1149__m128d test_mm_xor_pd(__m128d A, __m128d B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001150 // CHECK-LABEL: test_mm_xor_pd
1151 // CHECK: xor <4 x i32> %{{.*}}, %{{.*}}
Simon Pilgrima5c04932015-11-29 20:23:00 +00001152 return _mm_xor_pd(A, B);
1153}
1154
1155__m128i test_mm_xor_si128(__m128i A, __m128i B) {
Simon Pilgrim068c2ce2015-12-03 08:45:21 +00001156 // CHECK-LABEL: test_mm_xor_si128
1157 // CHECK: xor <2 x i64> %{{.*}}, %{{.*}}
Simon Pilgrima5c04932015-11-29 20:23:00 +00001158 return _mm_xor_si128(A, B);
1159}