blob: bfb86fd9e60a39e557b08b2dd9b164f52b71f2a4 [file] [log] [blame]
Bill Wendling2476e5d2008-12-10 22:36:00 +00001; RUN: llvm-as < %s | llc -march=x86 | grep {jo} | count 2
Dan Gohman653456c2009-01-07 00:15:08 +00002; RUN: llvm-as < %s | llc -march=x86 | grep {jb} | count 2
Bill Wendlingc69d56f2009-04-28 01:04:53 +00003; RUN: llvm-as < %s | llc -march=x86 -fast | grep {jo} | count 2
4; RUN: llvm-as < %s | llc -march=x86 -fast | grep {jb} | count 2
Bill Wendlinge21815f2008-11-26 22:42:19 +00005
6@ok = internal constant [4 x i8] c"%d\0A\00"
7@no = internal constant [4 x i8] c"no\0A\00"
8
9define i1 @func1(i32 %v1, i32 %v2) nounwind {
10entry:
11 %t = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %v1, i32 %v2)
12 %sum = extractvalue {i32, i1} %t, 0
13 %obit = extractvalue {i32, i1} %t, 1
14 br i1 %obit, label %overflow, label %normal
15
16normal:
17 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
18 ret i1 true
19
20overflow:
21 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind
22 ret i1 false
23}
24
25define i1 @func2(i32 %v1, i32 %v2) nounwind {
26entry:
27 %t = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %v1, i32 %v2)
28 %sum = extractvalue {i32, i1} %t, 0
29 %obit = extractvalue {i32, i1} %t, 1
Bill Wendlingb3cf03c2008-12-03 02:43:12 +000030 br i1 %obit, label %carry, label %normal
Bill Wendlinge21815f2008-11-26 22:42:19 +000031
32normal:
33 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
34 ret i1 true
35
Bill Wendlingb3cf03c2008-12-03 02:43:12 +000036carry:
Bill Wendlinge21815f2008-11-26 22:42:19 +000037 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind
38 ret i1 false
39}
40
Bill Wendling2476e5d2008-12-10 22:36:00 +000041define i1 @func3() nounwind {
42entry:
43 %t = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 0, i32 0)
44 %sum = extractvalue {i32, i1} %t, 0
45 %obit = extractvalue {i32, i1} %t, 1
46 br i1 %obit, label %carry, label %normal
47
48normal:
49 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
50 ret i1 true
51
52carry:
53 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind
54 ret i1 false
55}
56
57define i1 @func4() nounwind {
58entry:
59 %t = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 0, i32 0)
60 %sum = extractvalue {i32, i1} %t, 0
61 %obit = extractvalue {i32, i1} %t, 1
62 br i1 %obit, label %carry, label %normal
63
64normal:
65 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
66 ret i1 true
67
68carry:
69 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind
70 ret i1 false
71}
72
Bill Wendlinge21815f2008-11-26 22:42:19 +000073declare i32 @printf(i8*, ...) nounwind
74declare {i32, i1} @llvm.sadd.with.overflow.i32(i32, i32)
75declare {i32, i1} @llvm.uadd.with.overflow.i32(i32, i32)