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 7declare i32 @llvm.ctlz.i32(i32, i1) 8declare i64 @llvm.ctlz.i64(i64, i1) 9 10declare i32 @llvm.cttz.i32(i32, i1) 11declare i64 @llvm.cttz.i64(i64, i1) 12 13declare i32 @llvm.ctpop.i32(i32) 14declare i64 @llvm.ctpop.i64(i64) 15 16define i32 @_Z7my_ctlzj(i32 %a) { 17 %x = call i32 @llvm.ctlz.i32(i32 %a, i1 0) 18 ret i32 %x 19} 20 21define i64 @_Z7my_ctlzy(i64 %a) { 22 %x = call i64 @llvm.ctlz.i64(i64 %a, i1 0) 23 ret i64 %x 24} 25 26define i32 @_Z7my_cttzj(i32 %a) { 27 %x = call i32 @llvm.cttz.i32(i32 %a, i1 0) 28 ret i32 %x 29} 30 31define i64 @_Z7my_cttzy(i64 %a) { 32 %x = call i64 @llvm.cttz.i64(i64 %a, i1 0) 33 ret i64 %x 34} 35 36define i32 @_Z8my_ctpopj(i32 %a) { 37 %x = call i32 @llvm.ctpop.i32(i32 %a) 38 ret i32 %x 39} 40 41define i64 @_Z8my_ctpopy(i64 %a) { 42 %x = call i64 @llvm.ctpop.i64(i64 %a) 43 ret i64 %x 44} 45