Add a triple to switch.ll test.
[oota-llvm.git] / test / CodeGen / X86 / vec_ctbits.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s
2
3 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
4 declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)
5 declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)
6
7 define <2 x i64> @footz(<2 x i64> %a) nounwind {
8   %c = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
9   ret <2 x i64> %c
10
11 ; CHECK-LABEL: footz
12 ; CHECK: bsfq
13 ; CHECK: bsfq
14 }
15 define <2 x i64> @foolz(<2 x i64> %a) nounwind {
16   %c = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
17   ret <2 x i64> %c
18
19 ; CHECK-LABEL: foolz
20 ; CHECK: bsrq
21 ; CHECK: xorq $63
22 ; CHECK: bsrq
23 ; CHECK: xorq $63
24 }
25
26 define <2 x i64> @foopop(<2 x i64> %a) nounwind {
27   %c = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %a)
28   ret <2 x i64> %c
29 }
30
31 declare <2 x i32> @llvm.cttz.v2i32(<2 x i32>, i1)
32 declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1)
33 declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32>)
34
35 define <2 x i32> @promtz(<2 x i32> %a) nounwind {
36   %c = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> %a, i1 false)
37   ret <2 x i32> %c
38
39 ; CHECK: .quad 4294967296
40 ; CHECK: .quad 4294967296
41 ; CHECK-LABEL: promtz
42 ; CHECK: bsfq
43 ; CHECK: cmov
44 ; CHECK: bsfq
45 ; CHECK: cmov
46 }
47 define <2 x i32> @promlz(<2 x i32> %a) nounwind {
48   %c = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false)
49   ret <2 x i32> %c
50
51 ; CHECK: .quad 4294967295
52 ; CHECK: .quad 4294967295
53 ; CHECK: .quad 32
54 ; CHECK: .quad 32
55 ; CHECK-LABEL: promlz
56 ; CHECK: pand
57 ; CHECK: bsrq
58 ; CHECK: xorq $63
59 ; CHECK: bsrq
60 ; CHECK: xorq $63
61 ; CHECK: psub
62 }
63
64 define <2 x i32> @prompop(<2 x i32> %a) nounwind {
65   %c = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %a)
66   ret <2 x i32> %c
67 }