Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86 -mcpu=yonah | FileCheck %s
      2 
      3 define i32 @t1(i32 %x) nounwind  {
      4 	%tmp = tail call i32 @llvm.ctlz.i32( i32 %x )
      5 	ret i32 %tmp
      6 ; CHECK: t1:
      7 ; CHECK: bsrl
      8 ; CHECK: cmov
      9 }
     10 
     11 declare i32 @llvm.ctlz.i32(i32) nounwind readnone 
     12 
     13 define i32 @t2(i32 %x) nounwind  {
     14 	%tmp = tail call i32 @llvm.cttz.i32( i32 %x )
     15 	ret i32 %tmp
     16 ; CHECK: t2:
     17 ; CHECK: bsfl
     18 ; CHECK: cmov
     19 }
     20 
     21 declare i32 @llvm.cttz.i32(i32) nounwind readnone 
     22 
     23 define i16 @t3(i16 %x, i16 %y) nounwind  {
     24 entry:
     25         %tmp1 = add i16 %x, %y
     26 	%tmp2 = tail call i16 @llvm.ctlz.i16( i16 %tmp1 )		; <i16> [#uses=1]
     27 	ret i16 %tmp2
     28 ; CHECK: t3:
     29 ; CHECK: bsrw
     30 ; CHECK: cmov
     31 }
     32 
     33 declare i16 @llvm.ctlz.i16(i16) nounwind readnone 
     34 
     35 ; Don't generate the cmovne when the source is known non-zero (and bsr would
     36 ; not set ZF).
     37 ; rdar://9490949
     38 
     39 define i32 @t4(i32 %n) nounwind {
     40 entry:
     41 ; CHECK: t4:
     42 ; CHECK: bsrl
     43 ; CHECK-NOT: cmov
     44 ; CHECK: ret
     45   %or = or i32 %n, 1
     46   %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %or)
     47   ret i32 %tmp1
     48 }
     49