1 ; Wrappers around the bit manipulation intrinsics, which use name mangling 2 ; for encoding the type in the name instead of plain "C" suffixes. 3 ; E.g., my_ctpop(unsigned long long) vs __builtin_popcountll(...) 4 ; Also, normalize the intrinsic to take a single parameter when there 5 ; can be two, as is the case for ctlz and cttz. 6 7 declare i32 @llvm.ctlz.i32(i32, i1) 8 declare i64 @llvm.ctlz.i64(i64, i1) 9 10 declare i32 @llvm.cttz.i32(i32, i1) 11 declare i64 @llvm.cttz.i64(i64, i1) 12 13 declare i32 @llvm.ctpop.i32(i32) 14 declare i64 @llvm.ctpop.i64(i64) 15 16 define i32 @_Z7my_ctlzj(i32 %a) { 17 %x = call i32 @llvm.ctlz.i32(i32 %a, i1 0) 18 ret i32 %x 19 } 20 21 define i64 @_Z7my_ctlzy(i64 %a) { 22 %x = call i64 @llvm.ctlz.i64(i64 %a, i1 0) 23 ret i64 %x 24 } 25 26 define i32 @_Z7my_cttzj(i32 %a) { 27 %x = call i32 @llvm.cttz.i32(i32 %a, i1 0) 28 ret i32 %x 29 } 30 31 define i64 @_Z7my_cttzy(i64 %a) { 32 %x = call i64 @llvm.cttz.i64(i64 %a, i1 0) 33 ret i64 %x 34 } 35 36 define i32 @_Z8my_ctpopj(i32 %a) { 37 %x = call i32 @llvm.ctpop.i32(i32 %a) 38 ret i32 %x 39 } 40 41 define i64 @_Z8my_ctpopy(i64 %a) { 42 %x = call i64 @llvm.ctpop.i64(i64 %a) 43 ret i64 %x 44 } 45