blob: d1cc2eb90a8e6b4578d675ab7d22274759bad1ec [file] [log] [blame]
Chris Lattnerb9681ad2010-10-14 00:30:00 +00001; RUN: opt < %s -constprop -S | FileCheck %s
Chris Lattner59d93982009-10-05 05:26:04 +00002
3%i8i1 = type {i8, i1}
4
Frits van Bommel0bb2ad22011-03-27 14:26:13 +00005declare {i8, i1} @llvm.uadd.with.overflow.i8(i8, i8)
6declare {i8, i1} @llvm.usub.with.overflow.i8(i8, i8)
7declare {i8, i1} @llvm.umul.with.overflow.i8(i8, i8)
8
9declare {i8, i1} @llvm.sadd.with.overflow.i8(i8, i8)
10declare {i8, i1} @llvm.ssub.with.overflow.i8(i8, i8)
11declare {i8, i1} @llvm.smul.with.overflow.i8(i8, i8)
12
Chris Lattner59d93982009-10-05 05:26:04 +000013;;-----------------------------
14;; uadd
15;;-----------------------------
16
17define {i8, i1} @uadd_1() nounwind {
18entry:
19 %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 42, i8 100)
20 ret {i8, i1} %t
21
22; CHECK: @uadd_1
23; CHECK: ret %i8i1 { i8 -114, i1 false }
24}
25
26define {i8, i1} @uadd_2() nounwind {
27entry:
28 %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 142, i8 120)
29 ret {i8, i1} %t
30
31; CHECK: @uadd_2
32; CHECK: ret %i8i1 { i8 6, i1 true }
33}
34
Chris Lattner59d93982009-10-05 05:26:04 +000035;;-----------------------------
36;; usub
37;;-----------------------------
38
39define {i8, i1} @usub_1() nounwind {
40entry:
41 %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 2)
42 ret {i8, i1} %t
43
44; CHECK: @usub_1
45; CHECK: ret %i8i1 { i8 2, i1 false }
46}
47
48define {i8, i1} @usub_2() nounwind {
49entry:
50 %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 6)
51 ret {i8, i1} %t
52
53; CHECK: @usub_2
54; CHECK: ret %i8i1 { i8 -2, i1 true }
55}
56
Evan Phoenix44e5dbc2009-10-05 22:53:52 +000057;;-----------------------------
Frits van Bommel0bb2ad22011-03-27 14:26:13 +000058;; umul
59;;-----------------------------
60
61define {i8, i1} @umul_1() nounwind {
62entry:
63 %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 100, i8 3)
64 ret {i8, i1} %t
65
66; CHECK: @umul_1
67; CHECK: ret %i8i1 { i8 44, i1 true }
68}
69
70define {i8, i1} @umul_2() nounwind {
71entry:
72 %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 100, i8 2)
73 ret {i8, i1} %t
74
75; CHECK: @umul_2
76; CHECK: ret %i8i1 { i8 -56, i1 false }
77}
78
79;;-----------------------------
Evan Phoenix44e5dbc2009-10-05 22:53:52 +000080;; sadd
81;;-----------------------------
82
83define {i8, i1} @sadd_1() nounwind {
84entry:
85 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 42, i8 2)
86 ret {i8, i1} %t
87
88; CHECK: @sadd_1
89; CHECK: ret %i8i1 { i8 44, i1 false }
90}
91
92define {i8, i1} @sadd_2() nounwind {
93entry:
94 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 120, i8 10)
95 ret {i8, i1} %t
96
97; CHECK: @sadd_2
98; CHECK: ret %i8i1 { i8 -126, i1 true }
99}
100
101define {i8, i1} @sadd_3() nounwind {
102entry:
103 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 10)
104 ret {i8, i1} %t
105
106; CHECK: @sadd_3
107; CHECK: ret %i8i1 { i8 -110, i1 false }
108}
109
110define {i8, i1} @sadd_4() nounwind {
111entry:
112 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 -10)
113 ret {i8, i1} %t
114
115; CHECK: @sadd_4
116; CHECK: ret %i8i1 { i8 126, i1 true }
117}
118
119define {i8, i1} @sadd_5() nounwind {
120entry:
121 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 2, i8 -10)
122 ret {i8, i1} %t
123
124; CHECK: @sadd_5
125; CHECK: ret %i8i1 { i8 -8, i1 false }
126}
127
128
129;;-----------------------------
130;; ssub
131;;-----------------------------
132
133define {i8, i1} @ssub_1() nounwind {
134entry:
135 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 2)
136 ret {i8, i1} %t
137
138; CHECK: @ssub_1
139; CHECK: ret %i8i1 { i8 2, i1 false }
140}
141
142define {i8, i1} @ssub_2() nounwind {
143entry:
144 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 6)
145 ret {i8, i1} %t
146
147; CHECK: @ssub_2
148; CHECK: ret %i8i1 { i8 -2, i1 false }
149}
150
151define {i8, i1} @ssub_3() nounwind {
152entry:
153 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 120)
154 ret {i8, i1} %t
155
156; CHECK: @ssub_3
157; CHECK: ret %i8i1 { i8 126, i1 true }
158}
159
160define {i8, i1} @ssub_3b() nounwind {
161entry:
162 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 10)
163 ret {i8, i1} %t
164
165; CHECK: @ssub_3b
166; CHECK: ret %i8i1 { i8 -20, i1 false }
167}
168
169define {i8, i1} @ssub_4() nounwind {
170entry:
171 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 120, i8 -10)
172 ret {i8, i1} %t
173
174; CHECK: @ssub_4
175; CHECK: ret %i8i1 { i8 -126, i1 true }
176}
177
178define {i8, i1} @ssub_4b() nounwind {
179entry:
180 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 20, i8 -10)
181 ret {i8, i1} %t
182
183; CHECK: @ssub_4b
184; CHECK: ret %i8i1 { i8 30, i1 false }
185}
186
187define {i8, i1} @ssub_5() nounwind {
188entry:
189 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -20, i8 -10)
190 ret {i8, i1} %t
191
192; CHECK: @ssub_5
193; CHECK: ret %i8i1 { i8 -10, i1 false }
194}
195
Frits van Bommel0bb2ad22011-03-27 14:26:13 +0000196;;-----------------------------
197;; smul
198;;-----------------------------
Chris Lattner698661c2010-10-14 00:05:07 +0000199
200; rdar://8501501
201define {i8, i1} @smul_1() nounwind {
202entry:
203 %t = call {i8, i1} @llvm.smul.with.overflow.i8(i8 -20, i8 -10)
204 ret {i8, i1} %t
205
206; CHECK: @smul_1
207; CHECK: ret %i8i1 { i8 -56, i1 true }
208}