blob: 0f705dc0208839ac70ac9455b4e38e4f1aeedd34 [file] [log] [blame]
Dan Gohman36a09472009-09-08 23:54:48 +00001; RUN: llc < %s -march=x86 | grep {jo} | count 2
2; RUN: llc < %s -march=x86 | grep {jb} | count 2
3; RUN: llc < %s -march=x86 -O0 | grep {jo} | count 2
4; RUN: llc < %s -march=x86 -O0 | 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)