1 ; RUN: llc < %s -march=x86-64 -mattr=+lzcnt | FileCheck %s 2 3 declare i8 @llvm.ctlz.i8(i8, i1) nounwind readnone 4 declare i16 @llvm.ctlz.i16(i16, i1) nounwind readnone 5 declare i32 @llvm.ctlz.i32(i32, i1) nounwind readnone 6 declare i64 @llvm.ctlz.i64(i64, i1) nounwind readnone 7 8 define i8 @t1(i8 %x) nounwind { 9 %tmp = tail call i8 @llvm.ctlz.i8( i8 %x, i1 false ) 10 ret i8 %tmp 11 ; CHECK-LABEL: t1: 12 ; CHECK: lzcntl 13 } 14 15 define i16 @t2(i16 %x) nounwind { 16 %tmp = tail call i16 @llvm.ctlz.i16( i16 %x, i1 false ) 17 ret i16 %tmp 18 ; CHECK-LABEL: t2: 19 ; CHECK: lzcntw 20 } 21 22 define i32 @t3(i32 %x) nounwind { 23 %tmp = tail call i32 @llvm.ctlz.i32( i32 %x, i1 false ) 24 ret i32 %tmp 25 ; CHECK-LABEL: t3: 26 ; CHECK: lzcntl 27 } 28 29 define i64 @t4(i64 %x) nounwind { 30 %tmp = tail call i64 @llvm.ctlz.i64( i64 %x, i1 false ) 31 ret i64 %tmp 32 ; CHECK-LABEL: t4: 33 ; CHECK: lzcntq 34 } 35 36 define i8 @t5(i8 %x) nounwind { 37 %tmp = tail call i8 @llvm.ctlz.i8( i8 %x, i1 true ) 38 ret i8 %tmp 39 ; CHECK-LABEL: t5: 40 ; CHECK: lzcntl 41 } 42 43 define i16 @t6(i16 %x) nounwind { 44 %tmp = tail call i16 @llvm.ctlz.i16( i16 %x, i1 true ) 45 ret i16 %tmp 46 ; CHECK-LABEL: t6: 47 ; CHECK: lzcntw 48 } 49 50 define i32 @t7(i32 %x) nounwind { 51 %tmp = tail call i32 @llvm.ctlz.i32( i32 %x, i1 true ) 52 ret i32 %tmp 53 ; CHECK-LABEL: t7: 54 ; CHECK: lzcntl 55 } 56 57 define i64 @t8(i64 %x) nounwind { 58 %tmp = tail call i64 @llvm.ctlz.i64( i64 %x, i1 true ) 59 ret i64 %tmp 60 ; CHECK-LABEL: t8: 61 ; CHECK: lzcntq 62 } 63