Skip to content

Commit 00f2c40

Browse files
committed
precommit test
1 parent 982cfae commit 00f2c40

File tree

1 file changed

+236
-0
lines changed

1 file changed

+236
-0
lines changed
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=instcombine < %s 2>&1 | FileCheck %s
3+
4+
5+
define i8 @umax_of_add_nuw(i8 %a, i8 %b, i8 %c) {
6+
; CHECK-LABEL: define i8 @umax_of_add_nuw(
7+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
8+
; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[B]], [[A]]
9+
; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[C]], [[A]]
10+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.umax.i8(i8 [[ADD1]], i8 [[ADD2]])
11+
; CHECK-NEXT: ret i8 [[MAX]]
12+
;
13+
%add1 = add nuw i8 %b, %a
14+
%add2 = add nuw i8 %c, %a
15+
%max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2)
16+
ret i8 %max
17+
}
18+
19+
define i8 @umax_of_add_nuw_comm(i8 %a, i8 %b, i8 %c) {
20+
; CHECK-LABEL: define i8 @umax_of_add_nuw_comm(
21+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
22+
; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[A]], [[B]]
23+
; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[A]], [[C]]
24+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.umax.i8(i8 [[ADD1]], i8 [[ADD2]])
25+
; CHECK-NEXT: ret i8 [[MAX]]
26+
;
27+
%add1 = add nuw i8 %a, %b
28+
%add2 = add nuw i8 %a, %c
29+
%max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2)
30+
ret i8 %max
31+
}
32+
33+
34+
; negative test
35+
define i8 @umax_of_add_nsw(i8 %a, i8 %b, i8 %c) {
36+
; CHECK-LABEL: define i8 @umax_of_add_nsw(
37+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
38+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[B]], [[A]]
39+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[C]], [[A]]
40+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.umax.i8(i8 [[ADD1]], i8 [[ADD2]])
41+
; CHECK-NEXT: ret i8 [[MAX]]
42+
;
43+
%add1 = add nsw i8 %b, %a
44+
%add2 = add nsw i8 %c, %a
45+
%max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2)
46+
ret i8 %max
47+
}
48+
49+
; negative test
50+
define i8 @umax_of_add(i8 %a, i8 %b, i8 %c) {
51+
; CHECK-LABEL: define i8 @umax_of_add(
52+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
53+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]]
54+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]]
55+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.umax.i8(i8 [[ADD1]], i8 [[ADD2]])
56+
; CHECK-NEXT: ret i8 [[MAX]]
57+
;
58+
%add1 = add i8 %b, %a
59+
%add2 = add i8 %c, %a
60+
%max = call i8 @llvm.umax.i8(i8 %add1, i8 %add2)
61+
ret i8 %max
62+
}
63+
64+
define i8 @umin_of_add_nuw(i8 %a, i8 %b, i8 %c) {
65+
; CHECK-LABEL: define i8 @umin_of_add_nuw(
66+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
67+
; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[B]], [[A]]
68+
; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[C]], [[A]]
69+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.umin.i8(i8 [[ADD1]], i8 [[ADD2]])
70+
; CHECK-NEXT: ret i8 [[MIN]]
71+
;
72+
%add1 = add nuw i8 %b, %a
73+
%add2 = add nuw i8 %c, %a
74+
%min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2)
75+
ret i8 %min
76+
}
77+
78+
define i8 @umin_of_add_nuw_comm(i8 %a, i8 %b, i8 %c) {
79+
; CHECK-LABEL: define i8 @umin_of_add_nuw_comm(
80+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
81+
; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[A]], [[B]]
82+
; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[A]], [[C]]
83+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.umin.i8(i8 [[ADD1]], i8 [[ADD2]])
84+
; CHECK-NEXT: ret i8 [[MIN]]
85+
;
86+
%add1 = add nuw i8 %a, %b
87+
%add2 = add nuw i8 %a, %c
88+
%min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2)
89+
ret i8 %min
90+
}
91+
92+
; negative test
93+
define i8 @umin_of_add_nsw(i8 %a, i8 %b, i8 %c) {
94+
; CHECK-LABEL: define i8 @umin_of_add_nsw(
95+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
96+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[B]], [[A]]
97+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[C]], [[A]]
98+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.umin.i8(i8 [[ADD1]], i8 [[ADD2]])
99+
; CHECK-NEXT: ret i8 [[MIN]]
100+
;
101+
%add1 = add nsw i8 %b, %a
102+
%add2 = add nsw i8 %c, %a
103+
%min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2)
104+
ret i8 %min
105+
}
106+
107+
; negative test
108+
define i8 @umin_of_add(i8 %a, i8 %b, i8 %c) {
109+
; CHECK-LABEL: define i8 @umin_of_add(
110+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
111+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]]
112+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]]
113+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.umin.i8(i8 [[ADD1]], i8 [[ADD2]])
114+
; CHECK-NEXT: ret i8 [[MIN]]
115+
;
116+
%add1 = add i8 %b, %a
117+
%add2 = add i8 %c, %a
118+
%min = call i8 @llvm.umin.i8(i8 %add1, i8 %add2)
119+
ret i8 %min
120+
}
121+
122+
; negative test
123+
define i8 @smax_of_add_nuw(i8 %a, i8 %b, i8 %c) {
124+
; CHECK-LABEL: define i8 @smax_of_add_nuw(
125+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
126+
; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[B]], [[A]]
127+
; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[C]], [[A]]
128+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.smax.i8(i8 [[ADD1]], i8 [[ADD2]])
129+
; CHECK-NEXT: ret i8 [[MAX]]
130+
;
131+
%add1 = add nuw i8 %b, %a
132+
%add2 = add nuw i8 %c, %a
133+
%max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2)
134+
ret i8 %max
135+
}
136+
137+
define i8 @smax_of_add_nsw(i8 %a, i8 %b, i8 %c) {
138+
; CHECK-LABEL: define i8 @smax_of_add_nsw(
139+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
140+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[B]], [[A]]
141+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[C]], [[A]]
142+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.smax.i8(i8 [[ADD1]], i8 [[ADD2]])
143+
; CHECK-NEXT: ret i8 [[MAX]]
144+
;
145+
%add1 = add nsw i8 %b, %a
146+
%add2 = add nsw i8 %c, %a
147+
%max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2)
148+
ret i8 %max
149+
}
150+
151+
define i8 @smax_of_add_nsw_comm(i8 %a, i8 %b, i8 %c) {
152+
; CHECK-LABEL: define i8 @smax_of_add_nsw_comm(
153+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
154+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[A]], [[B]]
155+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[A]], [[C]]
156+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.smax.i8(i8 [[ADD1]], i8 [[ADD2]])
157+
; CHECK-NEXT: ret i8 [[MAX]]
158+
;
159+
%add1 = add nsw i8 %a, %b
160+
%add2 = add nsw i8 %a, %c
161+
%max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2)
162+
ret i8 %max
163+
}
164+
165+
; negative test
166+
define i8 @smax_of_add(i8 %a, i8 %b, i8 %c) {
167+
; CHECK-LABEL: define i8 @smax_of_add(
168+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
169+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]]
170+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]]
171+
; CHECK-NEXT: [[MAX:%.*]] = call i8 @llvm.smax.i8(i8 [[ADD1]], i8 [[ADD2]])
172+
; CHECK-NEXT: ret i8 [[MAX]]
173+
;
174+
%add1 = add i8 %b, %a
175+
%add2 = add i8 %c, %a
176+
%max = call i8 @llvm.smax.i8(i8 %add1, i8 %add2)
177+
ret i8 %max
178+
}
179+
180+
; negative test
181+
define i8 @smin_of_add_nuw(i8 %a, i8 %b, i8 %c) {
182+
; CHECK-LABEL: define i8 @smin_of_add_nuw(
183+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
184+
; CHECK-NEXT: [[ADD1:%.*]] = add nuw i8 [[B]], [[A]]
185+
; CHECK-NEXT: [[ADD2:%.*]] = add nuw i8 [[C]], [[A]]
186+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.smin.i8(i8 [[ADD1]], i8 [[ADD2]])
187+
; CHECK-NEXT: ret i8 [[MIN]]
188+
;
189+
%add1 = add nuw i8 %b, %a
190+
%add2 = add nuw i8 %c, %a
191+
%min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2)
192+
ret i8 %min
193+
}
194+
195+
define i8 @smin_of_add_nsw(i8 %a, i8 %b, i8 %c) {
196+
; CHECK-LABEL: define i8 @smin_of_add_nsw(
197+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
198+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[B]], [[A]]
199+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[C]], [[A]]
200+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.smin.i8(i8 [[ADD1]], i8 [[ADD2]])
201+
; CHECK-NEXT: ret i8 [[MIN]]
202+
;
203+
%add1 = add nsw i8 %b, %a
204+
%add2 = add nsw i8 %c, %a
205+
%min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2)
206+
ret i8 %min
207+
}
208+
209+
define i8 @smin_of_add_nsw_comm(i8 %a, i8 %b, i8 %c) {
210+
; CHECK-LABEL: define i8 @smin_of_add_nsw_comm(
211+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
212+
; CHECK-NEXT: [[ADD1:%.*]] = add nsw i8 [[A]], [[B]]
213+
; CHECK-NEXT: [[ADD2:%.*]] = add nsw i8 [[A]], [[C]]
214+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.smin.i8(i8 [[ADD1]], i8 [[ADD2]])
215+
; CHECK-NEXT: ret i8 [[MIN]]
216+
;
217+
%add1 = add nsw i8 %a, %b
218+
%add2 = add nsw i8 %a, %c
219+
%min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2)
220+
ret i8 %min
221+
}
222+
223+
; negative test
224+
define i8 @smin_of_add(i8 %a, i8 %b, i8 %c) {
225+
; CHECK-LABEL: define i8 @smin_of_add(
226+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
227+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[B]], [[A]]
228+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[C]], [[A]]
229+
; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.smin.i8(i8 [[ADD1]], i8 [[ADD2]])
230+
; CHECK-NEXT: ret i8 [[MIN]]
231+
;
232+
%add1 = add i8 %b, %a
233+
%add2 = add i8 %c, %a
234+
%min = call i8 @llvm.smin.i8(i8 %add1, i8 %add2)
235+
ret i8 %min
236+
}

0 commit comments

Comments
 (0)