blob: 23df5382885ad720da478d12906847a26d8058fc [file] [log] [blame]
Jan Vounge4da26f2014-07-15 17:52:39 -07001; 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
7target triple = "i686-pc-linux-gnu"
8
9declare i32 @llvm.ctlz.i32(i32, i1)
10declare i64 @llvm.ctlz.i64(i64, i1)
11
12declare i32 @llvm.cttz.i32(i32, i1)
13declare i64 @llvm.cttz.i64(i64, i1)
14
15declare i32 @llvm.ctpop.i32(i32)
16declare i64 @llvm.ctpop.i64(i64)
17
18define i32 @_Z7my_ctlzj(i32 %a) {
19 %x = call i32 @llvm.ctlz.i32(i32 %a, i1 0)
20 ret i32 %x
21}
22
23define i64 @_Z7my_ctlzy(i64 %a) {
24 %x = call i64 @llvm.ctlz.i64(i64 %a, i1 0)
25 ret i64 %x
26}
27
28define i32 @_Z7my_cttzj(i32 %a) {
29 %x = call i32 @llvm.cttz.i32(i32 %a, i1 0)
30 ret i32 %x
31}
32
33define i64 @_Z7my_cttzy(i64 %a) {
34 %x = call i64 @llvm.cttz.i64(i64 %a, i1 0)
35 ret i64 %x
36}
37
38define i32 @_Z8my_ctpopj(i32 %a) {
39 %x = call i32 @llvm.ctpop.i32(i32 %a)
40 ret i32 %x
41}
42
43define i64 @_Z8my_ctpopy(i64 %a) {
44 %x = call i64 @llvm.ctpop.i64(i64 %a)
45 ret i64 %x
46}