Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86-64 -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 }
     68