blob: 849bf9ef75b226c737e4388ea3c85b1665a10a54 [file] [log] [blame]
Chris Lattnera5bbde82010-10-14 00:30:00 +00001; RUN: opt < %s -constprop -S | FileCheck %s
Chris Lattnere65cd402009-10-05 05:26:04 +00002
Chris Lattnere65cd402009-10-05 05:26:04 +00003
Frits van Bommel62086102011-03-27 14:26:13 +00004declare {i8, i1} @llvm.uadd.with.overflow.i8(i8, i8)
5declare {i8, i1} @llvm.usub.with.overflow.i8(i8, i8)
6declare {i8, i1} @llvm.umul.with.overflow.i8(i8, i8)
7
8declare {i8, i1} @llvm.sadd.with.overflow.i8(i8, i8)
9declare {i8, i1} @llvm.ssub.with.overflow.i8(i8, i8)
10declare {i8, i1} @llvm.smul.with.overflow.i8(i8, i8)
11
Chris Lattnere65cd402009-10-05 05:26:04 +000012;;-----------------------------
13;; uadd
14;;-----------------------------
15
16define {i8, i1} @uadd_1() nounwind {
17entry:
18 %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 42, i8 100)
19 ret {i8, i1} %t
20
21; CHECK: @uadd_1
Chris Lattner1afcace2011-07-09 17:41:24 +000022; CHECK: ret { i8, i1 } { i8 -114, i1 false }
Chris Lattnere65cd402009-10-05 05:26:04 +000023}
24
25define {i8, i1} @uadd_2() nounwind {
26entry:
27 %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 142, i8 120)
28 ret {i8, i1} %t
29
30; CHECK: @uadd_2
Chris Lattner1afcace2011-07-09 17:41:24 +000031; CHECK: ret { i8, i1 } { i8 6, i1 true }
Chris Lattnere65cd402009-10-05 05:26:04 +000032}
33
Chris Lattnere65cd402009-10-05 05:26:04 +000034;;-----------------------------
35;; usub
36;;-----------------------------
37
38define {i8, i1} @usub_1() nounwind {
39entry:
40 %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 2)
41 ret {i8, i1} %t
42
43; CHECK: @usub_1
Chris Lattner1afcace2011-07-09 17:41:24 +000044; CHECK: ret { i8, i1 } { i8 2, i1 false }
Chris Lattnere65cd402009-10-05 05:26:04 +000045}
46
47define {i8, i1} @usub_2() nounwind {
48entry:
49 %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 6)
50 ret {i8, i1} %t
51
52; CHECK: @usub_2
Chris Lattner1afcace2011-07-09 17:41:24 +000053; CHECK: ret { i8, i1 } { i8 -2, i1 true }
Chris Lattnere65cd402009-10-05 05:26:04 +000054}
55
Evan Phoenix1614e502009-10-05 22:53:52 +000056;;-----------------------------
Frits van Bommel62086102011-03-27 14:26:13 +000057;; umul
58;;-----------------------------
59
60define {i8, i1} @umul_1() nounwind {
61entry:
62 %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 100, i8 3)
63 ret {i8, i1} %t
64
65; CHECK: @umul_1
Chris Lattner1afcace2011-07-09 17:41:24 +000066; CHECK: ret { i8, i1 } { i8 44, i1 true }
Frits van Bommel62086102011-03-27 14:26:13 +000067}
68
69define {i8, i1} @umul_2() nounwind {
70entry:
71 %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 100, i8 2)
72 ret {i8, i1} %t
73
74; CHECK: @umul_2
Chris Lattner1afcace2011-07-09 17:41:24 +000075; CHECK: ret { i8, i1 } { i8 -56, i1 false }
Frits van Bommel62086102011-03-27 14:26:13 +000076}
77
78;;-----------------------------
Evan Phoenix1614e502009-10-05 22:53:52 +000079;; sadd
80;;-----------------------------
81
82define {i8, i1} @sadd_1() nounwind {
83entry:
84 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 42, i8 2)
85 ret {i8, i1} %t
86
87; CHECK: @sadd_1
Chris Lattner1afcace2011-07-09 17:41:24 +000088; CHECK: ret { i8, i1 } { i8 44, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +000089}
90
91define {i8, i1} @sadd_2() nounwind {
92entry:
93 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 120, i8 10)
94 ret {i8, i1} %t
95
96; CHECK: @sadd_2
Chris Lattner1afcace2011-07-09 17:41:24 +000097; CHECK: ret { i8, i1 } { i8 -126, i1 true }
Evan Phoenix1614e502009-10-05 22:53:52 +000098}
99
100define {i8, i1} @sadd_3() nounwind {
101entry:
102 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 10)
103 ret {i8, i1} %t
104
105; CHECK: @sadd_3
Chris Lattner1afcace2011-07-09 17:41:24 +0000106; CHECK: ret { i8, i1 } { i8 -110, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +0000107}
108
109define {i8, i1} @sadd_4() nounwind {
110entry:
111 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 -10)
112 ret {i8, i1} %t
113
114; CHECK: @sadd_4
Chris Lattner1afcace2011-07-09 17:41:24 +0000115; CHECK: ret { i8, i1 } { i8 126, i1 true }
Evan Phoenix1614e502009-10-05 22:53:52 +0000116}
117
118define {i8, i1} @sadd_5() nounwind {
119entry:
120 %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 2, i8 -10)
121 ret {i8, i1} %t
122
123; CHECK: @sadd_5
Chris Lattner1afcace2011-07-09 17:41:24 +0000124; CHECK: ret { i8, i1 } { i8 -8, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +0000125}
126
127
128;;-----------------------------
129;; ssub
130;;-----------------------------
131
132define {i8, i1} @ssub_1() nounwind {
133entry:
134 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 2)
135 ret {i8, i1} %t
136
137; CHECK: @ssub_1
Chris Lattner1afcace2011-07-09 17:41:24 +0000138; CHECK: ret { i8, i1 } { i8 2, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +0000139}
140
141define {i8, i1} @ssub_2() nounwind {
142entry:
143 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 6)
144 ret {i8, i1} %t
145
146; CHECK: @ssub_2
Chris Lattner1afcace2011-07-09 17:41:24 +0000147; CHECK: ret { i8, i1 } { i8 -2, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +0000148}
149
150define {i8, i1} @ssub_3() nounwind {
151entry:
152 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 120)
153 ret {i8, i1} %t
154
155; CHECK: @ssub_3
Chris Lattner1afcace2011-07-09 17:41:24 +0000156; CHECK: ret { i8, i1 } { i8 126, i1 true }
Evan Phoenix1614e502009-10-05 22:53:52 +0000157}
158
159define {i8, i1} @ssub_3b() nounwind {
160entry:
161 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 10)
162 ret {i8, i1} %t
163
164; CHECK: @ssub_3b
Chris Lattner1afcace2011-07-09 17:41:24 +0000165; CHECK: ret { i8, i1 } { i8 -20, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +0000166}
167
168define {i8, i1} @ssub_4() nounwind {
169entry:
170 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 120, i8 -10)
171 ret {i8, i1} %t
172
173; CHECK: @ssub_4
Chris Lattner1afcace2011-07-09 17:41:24 +0000174; CHECK: ret { i8, i1 } { i8 -126, i1 true }
Evan Phoenix1614e502009-10-05 22:53:52 +0000175}
176
177define {i8, i1} @ssub_4b() nounwind {
178entry:
179 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 20, i8 -10)
180 ret {i8, i1} %t
181
182; CHECK: @ssub_4b
Chris Lattner1afcace2011-07-09 17:41:24 +0000183; CHECK: ret { i8, i1 } { i8 30, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +0000184}
185
186define {i8, i1} @ssub_5() nounwind {
187entry:
188 %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -20, i8 -10)
189 ret {i8, i1} %t
190
191; CHECK: @ssub_5
Chris Lattner1afcace2011-07-09 17:41:24 +0000192; CHECK: ret { i8, i1 } { i8 -10, i1 false }
Evan Phoenix1614e502009-10-05 22:53:52 +0000193}
194
Frits van Bommel62086102011-03-27 14:26:13 +0000195;;-----------------------------
196;; smul
197;;-----------------------------
Chris Lattnereafc5cb2010-10-14 00:05:07 +0000198
199; rdar://8501501
200define {i8, i1} @smul_1() nounwind {
201entry:
202 %t = call {i8, i1} @llvm.smul.with.overflow.i8(i8 -20, i8 -10)
203 ret {i8, i1} %t
204
205; CHECK: @smul_1
Chris Lattner1afcace2011-07-09 17:41:24 +0000206; CHECK: ret { i8, i1 } { i8 -56, i1 true }
Chris Lattnereafc5cb2010-10-14 00:05:07 +0000207}