Jan Voung | e4da26f | 2014-07-15 17:52:39 -0700 | [diff] [blame] | 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 | |
Jan Voung | e4da26f | 2014-07-15 17:52:39 -0700 | [diff] [blame] | 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 | } |