Initial revision.
[cl-llvm.git] / examples / test.ll
blobeceaca6481f64340b4e370dd52142202f9975a66
1 declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
3 define i32 @add(i32, i32) {
4   %l = and i32 %0, 3
5   %l0 = icmp ne i32 %l, 0
6   br i1 %l0, label %undef, label %go1
7 go1:
8   %r = and i32 %1, 3
9   %r0 = icmp ne i32 %r, 0
10   br i1 %r0, label %undef, label %go2
11 go2:
12   %3 = lshr i32 %0, 2
13   %4 = lshr i32 %1, 2
14   %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %3, i32 %4)
15   %5 = extractvalue {i32, i1} %res, 0
16   %ov = extractvalue {i32, i1} %res, 1
17   br i1 %ov, label %undef, label %go3
18 go3:
19   %6 = shl i32 %5, 2
20   ret i32 %6
21 undef:
22   unreachable
26 define i32 @add3(i32, i32, i32) {
27   %4 = call i32 @add(i32 %0, i32 %1)
28   %5 = call i32 @add(i32 %4, i32 %2)
29   ret i32 %5