Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/X86/vec_ctbits.ll @ 83:60c9769439b8 LLVM3.7
LLVM 3.7
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Feb 2015 14:55:36 +0900 |
parents | 95c75e76d11b |
children | afa8332a0e37 |
comparison
equal
deleted
inserted
replaced
78:af83660cff7b | 83:60c9769439b8 |
---|---|
1 ; RUN: llc < %s -march=x86-64 | 1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s |
2 | 2 |
3 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1) | 3 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1) |
4 declare <2 x i64> @llvm.ctlz.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>) | 5 declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>) |
6 | 6 |
7 define <2 x i64> @footz(<2 x i64> %a) nounwind { | 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) | 8 %c = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true) |
9 ret <2 x i64> %c | 9 ret <2 x i64> %c |
10 | |
11 ; CHECK-LABEL: footz | |
12 ; CHECK: bsfq | |
13 ; CHECK: bsfq | |
10 } | 14 } |
11 define <2 x i64> @foolz(<2 x i64> %a) nounwind { | 15 define <2 x i64> @foolz(<2 x i64> %a) nounwind { |
12 %c = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true) | 16 %c = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true) |
13 ret <2 x i64> %c | 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 | |
14 } | 24 } |
25 | |
15 define <2 x i64> @foopop(<2 x i64> %a) nounwind { | 26 define <2 x i64> @foopop(<2 x i64> %a) nounwind { |
16 %c = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %a) | 27 %c = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %a) |
17 ret <2 x i64> %c | 28 ret <2 x i64> %c |
18 } | 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 } |