Home | History | Annotate | Download | only in crosstest
      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