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 }