blob: 1547a4d0f5b81b867444adf8e778b4a0975fe495 [file] [log] [blame]
Chris Lattnere65cd402009-10-05 05:26:04 +00001; RUN: opt < %s -constprop -S | FileCheck %s
2
3%i8i1 = type {i8, i1}
4
5;;-----------------------------
6;; uadd
7;;-----------------------------
8
9define {i8, i1} @uadd_1() nounwind {
10entry:
11 %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 42, i8 100)
12 ret {i8, i1} %t
13
14; CHECK: @uadd_1
15; CHECK: ret %i8i1 { i8 -114, i1 false }
16}
17
18define {i8, i1} @uadd_2() nounwind {
19entry:
20 %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 142, i8 120)
21 ret {i8, i1} %t
22
23; CHECK: @uadd_2
24; CHECK: ret %i8i1 { i8 6, i1 true }
25}
26
Chris Lattnere65cd402009-10-05 05:26:04 +000027;;-----------------------------
28;; usub
29;;-----------------------------
30
31define {i8, i1} @usub_1() nounwind {
32entry:
33 %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 2)
34 ret {i8, i1} %t
35
36; CHECK: @usub_1
37; CHECK: ret %i8i1 { i8 2, i1 false }
38}
39
40define {i8, i1} @usub_2() nounwind {
41entry:
42 %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 6)
43 ret {i8, i1} %t
44
45; CHECK: @usub_2
46; CHECK: ret %i8i1 { i8 -2, i1 true }
47}
48
Evan Phoenix1614e502009-10-05 22:53:52 +000049;;-----------------------------
50;; sadd
51;;-----------------------------
52
53define {i8, i1} @sadd_1() nounwind {
54entry:
55 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 42, i8 2)
56 ret {i8, i1} %t
57
58; CHECK: @sadd_1
59; CHECK: ret %i8i1 { i8 44, i1 false }
60}
61
62define {i8, i1} @sadd_2() nounwind {
63entry:
64 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 120, i8 10)
65 ret {i8, i1} %t
66
67; CHECK: @sadd_2
68; CHECK: ret %i8i1 { i8 -126, i1 true }
69}
70
71define {i8, i1} @sadd_3() nounwind {
72entry:
73 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 10)
74 ret {i8, i1} %t
75
76; CHECK: @sadd_3
77; CHECK: ret %i8i1 { i8 -110, i1 false }
78}
79
80define {i8, i1} @sadd_4() nounwind {
81entry:
82 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 -10)
83 ret {i8, i1} %t
84
85; CHECK: @sadd_4
86; CHECK: ret %i8i1 { i8 126, i1 true }
87}
88
89define {i8, i1} @sadd_5() nounwind {
90entry:
91 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 2, i8 -10)
92 ret {i8, i1} %t
93
94; CHECK: @sadd_5
95; CHECK: ret %i8i1 { i8 -8, i1 false }
96}
97
98
99;;-----------------------------
100;; ssub
101;;-----------------------------
102
103define {i8, i1} @ssub_1() nounwind {
104entry:
105 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 2)
106 ret {i8, i1} %t
107
108; CHECK: @ssub_1
109; CHECK: ret %i8i1 { i8 2, i1 false }
110}
111
112define {i8, i1} @ssub_2() nounwind {
113entry:
114 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 6)
115 ret {i8, i1} %t
116
117; CHECK: @ssub_2
118; CHECK: ret %i8i1 { i8 -2, i1 false }
119}
120
121define {i8, i1} @ssub_3() nounwind {
122entry:
123 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 120)
124 ret {i8, i1} %t
125
126; CHECK: @ssub_3
127; CHECK: ret %i8i1 { i8 126, i1 true }
128}
129
130define {i8, i1} @ssub_3b() nounwind {
131entry:
132 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 10)
133 ret {i8, i1} %t
134
135; CHECK: @ssub_3b
136; CHECK: ret %i8i1 { i8 -20, i1 false }
137}
138
139define {i8, i1} @ssub_4() nounwind {
140entry:
141 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 120, i8 -10)
142 ret {i8, i1} %t
143
144; CHECK: @ssub_4
145; CHECK: ret %i8i1 { i8 -126, i1 true }
146}
147
148define {i8, i1} @ssub_4b() nounwind {
149entry:
150 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 20, i8 -10)
151 ret {i8, i1} %t
152
153; CHECK: @ssub_4b
154; CHECK: ret %i8i1 { i8 30, i1 false }
155}
156
157define {i8, i1} @ssub_5() nounwind {
158entry:
159 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -20, i8 -10)
160 ret {i8, i1} %t
161
162; CHECK: @ssub_5
163; CHECK: ret %i8i1 { i8 -10, i1 false }
164}
165
Chris Lattnere65cd402009-10-05 05:26:04 +0000166
167
168declare {i8, i1} @llvm.uadd.with.overflow.i8(i8, i8)
169declare {i8, i1} @llvm.usub.with.overflow.i8(i8, i8)
Evan Phoenix1614e502009-10-05 22:53:52 +0000170
171declare {i8, i1} @llvm.sadd.with.overflow.i8(i8, i8)
172declare {i8, i1} @llvm.ssub.with.overflow.i8(i8, i8)