Adding intrinsics to the llvm backend for TBM instruction set.
[oota-llvm.git] / test / CodeGen / X86 / tbm-intrinsics-x86_64.ll
1 ; RUN: llc -mtriple=x86_64-unknown-unknown -march=x86-64 -mattr=+tbm < %s | FileCheck %s
2
3 define i32 @test_x86_tbm_bextri_u32(i32 %a) nounwind readnone {
4 entry:
5   ; CHECK-LABEL: test_x86_tbm_bextri_u32:
6   ; CHECK-NOT: mov
7   ; CHECK: bextr $
8   %0 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %a, i32 2814)
9   ret i32 %0
10 }
11
12 declare i32 @llvm.x86.tbm.bextri.u32(i32, i32) nounwind readnone
13
14 define i32 @test_x86_tbm_bextri_u32_m(i32* nocapture %a) nounwind readonly {
15 entry:
16   ; CHECK-LABEL: test_x86_tbm_bextri_u32_m:
17   ; CHECK-NOT: mov
18   ; CHECK: bextr $
19   %tmp1 = load i32* %a, align 4
20   %0 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %tmp1, i32 2814)
21   ret i32 %0
22 }
23
24 define i64 @test_x86_tbm_bextri_u64(i64 %a) nounwind readnone {
25 entry:
26   ; CHECK-LABEL: test_x86_tbm_bextri_u64:
27   ; CHECK-NOT: mov
28   ; CHECK: bextr $
29   %0 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %a, i32 2814)
30   ret i64 %0
31 }
32
33 declare i64 @llvm.x86.tbm.bextri.u64(i64, i32) nounwind readnone
34
35 define i64 @test_x86_tbm_bextri_u64_m(i64* nocapture %a) nounwind readonly {
36 entry:
37   ; CHECK-LABEl: test_x86_tbm_bextri_u64_m:
38   ; CHECK-NOT: mov
39   ; CHECK: bextr $
40   %tmp1 = load i64* %a, align 8
41   %0 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %tmp1, i32 2814)
42   ret i64 %0
43 }
44
45 define i32 @test_x86_tbm_blcfill_u32(i32 %a) nounwind readnone {
46 entry:
47   ; CHECK-LABEL: test_x86_tbm_blcfill_u32:
48   ; CHECK-NOT: mov
49   ; CHECK: blcfill %
50   %0 = tail call i32 @llvm.x86.tbm.blcfill.u32(i32 %a)
51   ret i32 %0
52 }
53
54 declare i32 @llvm.x86.tbm.blcfill.u32(i32) nounwind readnone
55
56 define i32 @test_x86_tbm_blcfill_u32_m(i32* nocapture %a) nounwind readonly {
57 entry:
58   ; CHECK-LABEL: test_x86_tbm_blcfill_u32_m:
59   ; CHECK-NOT: mov
60   ; CHECK: blcfill (%
61   %tmp1 = load i32* %a, align 4
62   %0 = tail call i32 @llvm.x86.tbm.blcfill.u32(i32 %tmp1)
63   ret i32 %0
64 }
65
66 define i64 @test_x86_tbm_blcfill_u64(i64 %a) nounwind readnone {
67 entry:
68   ; CHECK-LABEL: test_x86_tbm_blcfill_u64:
69   ; CHECK-NOT: mov
70   ; CHECK: blcfill %
71   %0 = tail call i64 @llvm.x86.tbm.blcfill.u64(i64 %a)
72   ret i64 %0
73 }
74
75 declare i64 @llvm.x86.tbm.blcfill.u64(i64) nounwind readnone
76
77 define i64 @test_x86_tbm_blcfill_u64_m(i64* nocapture %a) nounwind readonly {
78 entry:
79   ; CHECK-LABEL: test_x86_tbm_blcfill_u64_m:
80   ; CHECK-NOT: mov
81   ; CHECK: blcfill (%
82   %tmp1 = load i64* %a, align 8
83   %0 = tail call i64 @llvm.x86.tbm.blcfill.u64(i64 %tmp1)
84   ret i64 %0
85 }
86
87 define i32 @test_x86_tbm_blci_u32(i32 %a) nounwind readnone {
88 entry:
89   ; CHECK-LABEL: test_x86_tbm_blci_u32:
90   ; CHECK-NOT: mov
91   ; CHECK: blci %
92   %0 = tail call i32 @llvm.x86.tbm.blci.u32(i32 %a)
93   ret i32 %0
94 }
95
96 declare i32 @llvm.x86.tbm.blci.u32(i32) nounwind readnone
97
98 define i32 @test_x86_tbm_blci_u32_m(i32* nocapture %a) nounwind readonly {
99 entry:
100   ; CHECK-LABEL: test_x86_tbm_blci_u32_m:
101   ; CHECK-NOT: mov
102   ; CHECK: blci (%
103   %tmp1 = load i32* %a, align 4
104   %0 = tail call i32 @llvm.x86.tbm.blci.u32(i32 %tmp1)
105   ret i32 %0
106 }
107
108 define i64 @test_x86_tbm_blci_u64(i64 %a) nounwind readnone {
109 entry:
110   ; CHECK-LABEL: test_x86_tbm_blci_u64:
111   ; CHECK-NOT: mov
112   ; CHECK: blci %
113   %0 = tail call i64 @llvm.x86.tbm.blci.u64(i64 %a)
114   ret i64 %0
115 }
116
117 declare i64 @llvm.x86.tbm.blci.u64(i64) nounwind readnone
118
119 define i64 @test_x86_tbm_blci_u64_m(i64* nocapture %a) nounwind readonly {
120 entry:
121   ; CHECK-LABEl: test_x86_tbm_blci_u64_m:
122   ; CHECK-NOT: mov
123   ; CHECK: blci (%
124   %tmp1 = load i64* %a, align 8
125   %0 = tail call i64 @llvm.x86.tbm.blci.u64(i64 %tmp1)
126   ret i64 %0
127 }
128
129 define i32 @test_x86_tbm_blcic_u32(i32 %a) nounwind readnone {
130 entry:
131   ; CHECK-LABEL: test_x86_tbm_blcic_u32:
132   ; CHECK-NOT: mov
133   ; CHECK: blcic %
134   %0 = tail call i32 @llvm.x86.tbm.blcic.u32(i32 %a)
135   ret i32 %0
136 }
137
138 declare i32 @llvm.x86.tbm.blcic.u32(i32) nounwind readnone
139
140 define i32 @test_x86_tbm_blcic_u32_m(i32* nocapture %a) nounwind readonly {
141 entry:
142   ; CHECK-LABEL: test_x86_tbm_blcic_u32_m:
143   ; CHECK-NOT: mov
144   ; CHECK: blcic (%
145   %tmp1 = load i32* %a, align 4
146   %0 = tail call i32 @llvm.x86.tbm.blcic.u32(i32 %tmp1)
147   ret i32 %0
148 }
149
150 define i64 @test_x86_tbm_blcic_u64(i64 %a) nounwind readnone {
151 entry:
152   ; CHECK-LABEL: test_x86_tbm_blcic_u64:
153   ; CHECK-NOT: mov
154   ; CHECK: blcic %
155   %0 = tail call i64 @llvm.x86.tbm.blcic.u64(i64 %a)
156   ret i64 %0
157 }
158
159 declare i64 @llvm.x86.tbm.blcic.u64(i64) nounwind readnone
160
161 define i64 @test_x86_tbm_blcic_u64_m(i64* nocapture %a) nounwind readonly {
162 entry:
163   ; CHECK-LABEL: test_x86_tbm_blcic_u64_m:
164   ; CHECK-NOT: mov
165   ; CHECK: blcic (%
166   %tmp1 = load i64* %a, align 8
167   %0 = tail call i64 @llvm.x86.tbm.blcic.u64(i64 %tmp1)
168   ret i64 %0
169 }
170
171 define i32 @test_x86_tbm_blcmsk_u32(i32 %a) nounwind readnone {
172 entry:
173   ; CHECK-LABEL: test_x86_tbm_blcmsk_u32:
174   ; CHECK-NOT: mov
175   ; CHECK: blcmsk %
176   %0 = tail call i32 @llvm.x86.tbm.blcmsk.u32(i32 %a)
177   ret i32 %0
178 }
179
180 declare i32 @llvm.x86.tbm.blcmsk.u32(i32) nounwind readnone
181
182 define i32 @test_x86_tbm_blcmsk_u32_m(i32* nocapture %a) nounwind readonly {
183 entry:
184   ; CHECK-LABEL: test_x86_tbm_blcmsk_u32_m:
185   ; CHECK-NOT: mov
186   ; CHECK: blcmsk (%
187   %tmp1 = load i32* %a, align 4
188   %0 = tail call i32 @llvm.x86.tbm.blcmsk.u32(i32 %tmp1)
189   ret i32 %0
190 }
191
192 define i64 @test_x86_tbm_blcmsk_u64(i64 %a) nounwind readnone {
193 entry:
194   ; CHECK-LABEL: test_x86_tbm_blcmsk_u64:
195   ; CHECK-NOT: mov
196   ; CHECK: blcmsk %
197   %0 = tail call i64 @llvm.x86.tbm.blcmsk.u64(i64 %a)
198   ret i64 %0
199 }
200
201 declare i64 @llvm.x86.tbm.blcmsk.u64(i64) nounwind readnone
202
203 define i64 @test_x86_tbm_blcmsk_u64_m(i64* nocapture %a) nounwind readonly {
204 entry:
205   ; CHECK-LABEL: test_x86_tbm_blcmsk_u64_m:
206   ; CHECK-NOT: mov
207   ; CHECK: blcmsk (%
208   %tmp1 = load i64* %a, align 8
209   %0 = tail call i64 @llvm.x86.tbm.blcmsk.u64(i64 %tmp1)
210   ret i64 %0
211 }
212
213 define i32 @test_x86_tbm_blcs_u32(i32 %a) nounwind readnone {
214 entry:
215   ; CHECK-LABEL: test_x86_tbm_blcs_u32:
216   ; CHECK-NOT: mov
217   ; CHECK: blcs %
218   %0 = tail call i32 @llvm.x86.tbm.blcs.u32(i32 %a)
219   ret i32 %0
220 }
221
222 declare i32 @llvm.x86.tbm.blcs.u32(i32) nounwind readnone
223
224 define i32 @test_x86_tbm_blcs_u32_m(i32* nocapture %a) nounwind readonly {
225 entry:
226   ; CHECK-LABEL: test_x86_tbm_blcs_u32_m:
227   ; CHECK-NOT: mov
228   ; CHECK: blcs (%
229   %tmp1 = load i32* %a, align 4
230   %0 = tail call i32 @llvm.x86.tbm.blcs.u32(i32 %tmp1)
231   ret i32 %0
232 }
233
234 define i64 @test_x86_tbm_blcs_u64(i64 %a) nounwind readnone {
235 entry:
236   ; CHECK-LABEL: test_x86_tbm_blcs_u64:
237   ; CHECK-NOT: mov
238   ; CHECK: blcs %
239   %0 = tail call i64 @llvm.x86.tbm.blcs.u64(i64 %a)
240   ret i64 %0
241 }
242
243 declare i64 @llvm.x86.tbm.blcs.u64(i64) nounwind readnone
244
245 define i64 @test_x86_tbm_blcs_u64_m(i64* nocapture %a) nounwind readonly {
246 entry:
247   ; CHECK-LABEL: test_x86_tbm_blcs_u64_m:
248   ; CHECK-NOT: mov
249   ; CHECK: blcs (%
250   %tmp1 = load i64* %a, align 8
251   %0 = tail call i64 @llvm.x86.tbm.blcs.u64(i64 %tmp1)
252   ret i64 %0
253 }
254
255 define i32 @test_x86_tbm_blsfill_u32(i32 %a) nounwind readnone {
256 entry:
257   ; CHECK-LABEL: test_x86_tbm_blsfill_u32:
258   ; CHECK-NOT: mov
259   ; CHECK: blsfill %
260   %0 = tail call i32 @llvm.x86.tbm.blsfill.u32(i32 %a)
261   ret i32 %0
262 }
263
264 declare i32 @llvm.x86.tbm.blsfill.u32(i32) nounwind readnone
265
266 define i32 @test_x86_tbm_blsfill_u32_m(i32* nocapture %a) nounwind readonly {
267 entry:
268   ; CHECK-LABEL: test_x86_tbm_blsfill_u32_m:
269   ; CHECK-NOT: mov
270   ; CHECK: blsfill (%
271   %tmp1 = load i32* %a, align 4
272   %0 = tail call i32 @llvm.x86.tbm.blsfill.u32(i32 %tmp1)
273   ret i32 %0
274 }
275
276 define i64 @test_x86_tbm_blsfill_u64(i64 %a) nounwind readnone {
277 entry:
278   ; CHECK-LABEL: test_x86_tbm_blsfill_u64:
279   ; CHECK-NOT: mov
280   ; CHECK: blsfill %
281   %0 = tail call i64 @llvm.x86.tbm.blsfill.u64(i64 %a)
282   ret i64 %0
283 }
284
285 declare i64 @llvm.x86.tbm.blsfill.u64(i64) nounwind readnone
286
287 define i64 @test_x86_tbm_blsfill_u64_m(i64* nocapture %a) nounwind readonly {
288 entry:
289   ; CHECK-LABEL: test_x86_tbm_blsfill_u64_m:
290   ; CHECK-NOT: mov
291   ; CHECK: blsfill (%
292   %tmp1 = load i64* %a, align 8
293   %0 = tail call i64 @llvm.x86.tbm.blsfill.u64(i64 %tmp1)
294   ret i64 %0
295 }
296
297 define i32 @test_x86_tbm_blsic_u32(i32 %a) nounwind readnone {
298 entry:
299   ; CHECK-LABEL: test_x86_tbm_blsic_u32:
300   ; CHECK-NOT: mov
301   ; CHECK: blsic %
302   %0 = tail call i32 @llvm.x86.tbm.blsic.u32(i32 %a)
303   ret i32 %0
304 }
305
306 declare i32 @llvm.x86.tbm.blsic.u32(i32) nounwind readnone
307
308 define i32 @test_x86_tbm_blsic_u32_m(i32* nocapture %a) nounwind readonly {
309 entry:
310   ; CHECK-LABEL: test_x86_tbm_blsic_u32_m:
311   ; CHECK-NOT: mov
312   ; CHECK: blsic (%
313   %tmp1 = load i32* %a, align 4
314   %0 = tail call i32 @llvm.x86.tbm.blsic.u32(i32 %tmp1)
315   ret i32 %0
316 }
317
318 define i64 @test_x86_tbm_blsic_u64(i64 %a) nounwind readnone {
319 entry:
320   ; CHECK-LABEL: test_x86_tbm_blsic_u64:
321   ; CHECK-NOT: mov
322   ; CHECK: blsic %
323   %0 = tail call i64 @llvm.x86.tbm.blsic.u64(i64 %a)
324   ret i64 %0
325 }
326
327 declare i64 @llvm.x86.tbm.blsic.u64(i64) nounwind readnone
328
329 define i64 @test_x86_tbm_blsic_u64_m(i64* nocapture %a) nounwind readonly {
330 entry:
331   ; CHECK-LABEL: test_x86_tbm_blsic_u64_m:
332   ; CHECK-NOT: mov
333   ; CHECK: blsic (%
334   %tmp1 = load i64* %a, align 8
335   %0 = tail call i64 @llvm.x86.tbm.blsic.u64(i64 %tmp1)
336   ret i64 %0
337 }
338
339 define i32 @test_x86_tbm_t1mskc_u32(i32 %a) nounwind readnone {
340 entry:
341   ; CHECK-LABEL: test_x86_tbm_t1mskc_u32:
342   ; CHECK-NOT: mov
343   ; CHECK: t1mskc %
344   %0 = tail call i32 @llvm.x86.tbm.t1mskc.u32(i32 %a)
345   ret i32 %0
346 }
347
348 declare i32 @llvm.x86.tbm.t1mskc.u32(i32) nounwind readnone
349
350 define i32 @test_x86_tbm_t1mskc_u32_m(i32* nocapture %a) nounwind readonly {
351 entry:
352   ; CHECK-LABEL: test_x86_tbm_t1mskc_u32_m:
353   ; CHECK-NOT: mov
354   ; CHECK: t1mskc (%
355   %tmp1 = load i32* %a, align 4
356   %0 = tail call i32 @llvm.x86.tbm.t1mskc.u32(i32 %tmp1)
357   ret i32 %0
358 }
359
360 define i64 @test_x86_tbm_t1mskc_u64(i64 %a) nounwind readnone {
361 entry:
362   ; CHECK-LABEL: test_x86_tbm_t1mskc_u64:
363   ; CHECK-NOT: mov
364   ; CHECK: t1mskc %
365   %0 = tail call i64 @llvm.x86.tbm.t1mskc.u64(i64 %a)
366   ret i64 %0
367 }
368
369 declare i64 @llvm.x86.tbm.t1mskc.u64(i64) nounwind readnone
370
371 define i64 @test_x86_tbm_t1mskc_u64_m(i64* nocapture %a) nounwind readonly {
372 entry:
373   ; CHECK-LABEL: test_x86_tbm_t1mskc_u64_m:
374   ; CHECK-NOT: mov
375   ; CHECK: t1mskc (%
376   %tmp1 = load i64* %a, align 8
377   %0 = tail call i64 @llvm.x86.tbm.t1mskc.u64(i64 %tmp1)
378   ret i64 %0
379 }
380
381 define i32 @test_x86_tbm_tzmsk_u32(i32 %a) nounwind readnone {
382 entry:
383   ; CHECK-LABEL: test_x86_tbm_tzmsk_u32:
384   ; CHECK-NOT: mov
385   ; CHECK: tzmsk %
386   %0 = tail call i32 @llvm.x86.tbm.tzmsk.u32(i32 %a)
387   ret i32 %0
388 }
389
390 declare i32 @llvm.x86.tbm.tzmsk.u32(i32) nounwind readnone
391
392 define i32 @test_x86_tbm_tzmsk_u32_m(i32* nocapture %a) nounwind readonly {
393 entry:
394   ; CHECK-LABEL: test_x86_tbm_tzmsk_u32_m:
395   ; CHECK-NOT: mov
396   ; CHECK: tzmsk (%
397   %tmp1 = load i32* %a, align 4
398   %0 = tail call i32 @llvm.x86.tbm.tzmsk.u32(i32 %tmp1)
399   ret i32 %0
400 }
401
402 define i64 @test_x86_tbm_tzmsk_u64(i64 %a) nounwind readnone {
403 entry:
404   ; CHECK-LABEL: test_x86_tbm_tzmsk_u64:
405   ; CHECK-NOT: mov
406   ; CHECK: tzmsk %
407   %0 = tail call i64 @llvm.x86.tbm.tzmsk.u64(i64 %a)
408   ret i64 %0
409 }
410
411 declare i64 @llvm.x86.tbm.tzmsk.u64(i64) nounwind readnone
412
413 define i64 @test_x86_tbm_tzmsk_u64_m(i64* nocapture %a) nounwind readonly {
414 entry:
415   ; CHECK-LABEl: test_x86_tbm_tzmsk_u64_m:
416   ; CHECK-NOT: mov
417   ; CHECK: tzmsk (%
418   %tmp1 = load i64* %a, align 8
419   %0 = tail call i64 @llvm.x86.tbm.tzmsk.u64(i64 %tmp1)
420   ret i64 %0
421 }
422