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