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