xref: /llvm-project/llvm/test/Transforms/InstCombine/icmp-srem.ll (revision bb59eb8ed534da2bd03117cfde594321add4d60c)
1*bb59eb8eSJacob Young; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2*bb59eb8eSJacob Young; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3*bb59eb8eSJacob Young
4*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_smin(i32 %x) {
5*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_smin(
6*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
7*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[X]], -2147483648
8*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
9*bb59eb8eSJacob Young;
10*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
11*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -2147483648
12*bb59eb8eSJacob Young  ret i1 %c
13*bb59eb8eSJacob Young}
14*bb59eb8eSJacob Young
15*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_sminp1(i32 %x) {
16*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_sminp1(
17*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
18*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], -2147483648
19*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[R]], -2147483647
20*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
21*bb59eb8eSJacob Young;
22*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
23*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -2147483647
24*bb59eb8eSJacob Young  ret i1 %c
25*bb59eb8eSJacob Young}
26*bb59eb8eSJacob Young
27*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_smaxm1(i32 %x) {
28*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_smaxm1(
29*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
30*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], -2147483648
31*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[R]], 2147483646
32*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
33*bb59eb8eSJacob Young;
34*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
35*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 2147483646
36*bb59eb8eSJacob Young  ret i1 %c
37*bb59eb8eSJacob Young}
38*bb59eb8eSJacob Young
39*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_smax(i32 %x) {
40*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_smax(
41*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
42*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[X]], -2147483648
43*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
44*bb59eb8eSJacob Young;
45*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
46*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 2147483647
47*bb59eb8eSJacob Young  ret i1 %c
48*bb59eb8eSJacob Young}
49*bb59eb8eSJacob Young
50*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_smin(i32 %x) {
51*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_smin(
52*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
53*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], -2147483648
54*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
55*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
56*bb59eb8eSJacob Young;
57*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
58*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483648
59*bb59eb8eSJacob Young  ret i1 %c
60*bb59eb8eSJacob Young}
61*bb59eb8eSJacob Young
62*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_sminp1(i32 %x) {
63*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_sminp1(
64*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
65*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], -2147483648
66*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
67*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
68*bb59eb8eSJacob Young;
69*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
70*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483647
71*bb59eb8eSJacob Young  ret i1 %c
72*bb59eb8eSJacob Young}
73*bb59eb8eSJacob Young
74*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_sminp2(i32 %x) {
75*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_sminp2(
76*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
77*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], -2147483648
78*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[R]], -2147483646
79*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
80*bb59eb8eSJacob Young;
81*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
82*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483646
83*bb59eb8eSJacob Young  ret i1 %c
84*bb59eb8eSJacob Young}
85*bb59eb8eSJacob Young
86*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_smax(i32 %x) {
87*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_smax(
88*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
89*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], -2147483648
90*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[R]], 2147483647
91*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
92*bb59eb8eSJacob Young;
93*bb59eb8eSJacob Young  %r = srem i32 %x, -2147483648
94*bb59eb8eSJacob Young  %c = icmp ult i32 %r, 2147483647
95*bb59eb8eSJacob Young  ret i1 %c
96*bb59eb8eSJacob Young}
97*bb59eb8eSJacob Young
98*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_smin(i32 %x) {
99*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_smin(
100*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
101*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
102*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
103*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
104*bb59eb8eSJacob Young;
105*bb59eb8eSJacob Young  %r = srem i32 %x, 5
106*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -2147483648
107*bb59eb8eSJacob Young  ret i1 %c
108*bb59eb8eSJacob Young}
109*bb59eb8eSJacob Young
110*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_m5(i32 %x) {
111*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_m5(
112*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
113*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
114*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
115*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
116*bb59eb8eSJacob Young;
117*bb59eb8eSJacob Young  %r = srem i32 %x, 5
118*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -5
119*bb59eb8eSJacob Young  ret i1 %c
120*bb59eb8eSJacob Young}
121*bb59eb8eSJacob Young
122*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_m4(i32 %x) {
123*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_m4(
124*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
125*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
126*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[R]], -4
127*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
128*bb59eb8eSJacob Young;
129*bb59eb8eSJacob Young  %r = srem i32 %x, 5
130*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -4
131*bb59eb8eSJacob Young  ret i1 %c
132*bb59eb8eSJacob Young}
133*bb59eb8eSJacob Young
134*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_3(i32 %x) {
135*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_3(
136*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
137*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
138*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[R]], 3
139*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
140*bb59eb8eSJacob Young;
141*bb59eb8eSJacob Young  %r = srem i32 %x, 5
142*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 3
143*bb59eb8eSJacob Young  ret i1 %c
144*bb59eb8eSJacob Young}
145*bb59eb8eSJacob Young
146*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_4(i32 %x) {
147*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_4(
148*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
149*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
150*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
151*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
152*bb59eb8eSJacob Young;
153*bb59eb8eSJacob Young  %r = srem i32 %x, 5
154*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 4
155*bb59eb8eSJacob Young  ret i1 %c
156*bb59eb8eSJacob Young}
157*bb59eb8eSJacob Young
158*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_smaxm1(i32 %x) {
159*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_smaxm1(
160*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
161*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
162*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
163*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
164*bb59eb8eSJacob Young;
165*bb59eb8eSJacob Young  %r = srem i32 %x, 5
166*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 2147483646
167*bb59eb8eSJacob Young  ret i1 %c
168*bb59eb8eSJacob Young}
169*bb59eb8eSJacob Young
170*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_sminp1(i32 %x) {
171*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_sminp1(
172*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
173*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
174*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
175*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
176*bb59eb8eSJacob Young;
177*bb59eb8eSJacob Young  %r = srem i32 %x, 5
178*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483647
179*bb59eb8eSJacob Young  ret i1 %c
180*bb59eb8eSJacob Young}
181*bb59eb8eSJacob Young
182*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_m4(i32 %x) {
183*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_m4(
184*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
185*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
186*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
187*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
188*bb59eb8eSJacob Young;
189*bb59eb8eSJacob Young  %r = srem i32 %x, 5
190*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -4
191*bb59eb8eSJacob Young  ret i1 %c
192*bb59eb8eSJacob Young}
193*bb59eb8eSJacob Young
194*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_m3(i32 %x) {
195*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_m3(
196*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
197*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
198*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[R]], -3
199*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
200*bb59eb8eSJacob Young;
201*bb59eb8eSJacob Young  %r = srem i32 %x, 5
202*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -3
203*bb59eb8eSJacob Young  ret i1 %c
204*bb59eb8eSJacob Young}
205*bb59eb8eSJacob Young
206*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_4(i32 %x) {
207*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_4(
208*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
209*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
210*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[R]], 4
211*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
212*bb59eb8eSJacob Young;
213*bb59eb8eSJacob Young  %r = srem i32 %x, 5
214*bb59eb8eSJacob Young  %c = icmp ult i32 %r, 4
215*bb59eb8eSJacob Young  ret i1 %c
216*bb59eb8eSJacob Young}
217*bb59eb8eSJacob Young
218*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_5(i32 %x) {
219*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_5(
220*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
221*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
222*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
223*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
224*bb59eb8eSJacob Young;
225*bb59eb8eSJacob Young  %r = srem i32 %x, 5
226*bb59eb8eSJacob Young  %c = icmp ult i32 %r, 5
227*bb59eb8eSJacob Young  ret i1 %c
228*bb59eb8eSJacob Young}
229*bb59eb8eSJacob Young
230*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_smax(i32 %x) {
231*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_smax(
232*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
233*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 5
234*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
235*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
236*bb59eb8eSJacob Young;
237*bb59eb8eSJacob Young  %r = srem i32 %x, 5
238*bb59eb8eSJacob Young  %c = icmp ult i32 %r, 2147483647
239*bb59eb8eSJacob Young  ret i1 %c
240*bb59eb8eSJacob Young}
241*bb59eb8eSJacob Young
242*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smin(i32 %x) {
243*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smin(
244*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
245*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
246*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
247*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
248*bb59eb8eSJacob Young;
249*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
250*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -2147483648
251*bb59eb8eSJacob Young  ret i1 %c
252*bb59eb8eSJacob Young}
253*bb59eb8eSJacob Young
254*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_sminp1(i32 %x) {
255*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_sminp1(
256*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
257*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
258*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
259*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
260*bb59eb8eSJacob Young;
261*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
262*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -2147483647
263*bb59eb8eSJacob Young  ret i1 %c
264*bb59eb8eSJacob Young}
265*bb59eb8eSJacob Young
266*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_sminp2(i32 %x) {
267*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_sminp2(
268*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
269*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
270*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[R]], -2147483646
271*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
272*bb59eb8eSJacob Young;
273*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
274*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, -2147483646
275*bb59eb8eSJacob Young  ret i1 %c
276*bb59eb8eSJacob Young}
277*bb59eb8eSJacob Young
278*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smaxm2(i32 %x) {
279*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smaxm2(
280*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
281*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
282*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[R]], 2147483645
283*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
284*bb59eb8eSJacob Young;
285*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
286*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 2147483645
287*bb59eb8eSJacob Young  ret i1 %c
288*bb59eb8eSJacob Young}
289*bb59eb8eSJacob Young
290*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smaxm1(i32 %x) {
291*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smaxm1(
292*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
293*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
294*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
295*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
296*bb59eb8eSJacob Young;
297*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
298*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 2147483646
299*bb59eb8eSJacob Young  ret i1 %c
300*bb59eb8eSJacob Young}
301*bb59eb8eSJacob Young
302*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smax(i32 %x) {
303*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smax(
304*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
305*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
306*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[R]], 0
307*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
308*bb59eb8eSJacob Young;
309*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
310*bb59eb8eSJacob Young  %c = icmp ugt i32 %r, 2147483647
311*bb59eb8eSJacob Young  ret i1 %c
312*bb59eb8eSJacob Young}
313*bb59eb8eSJacob Young
314*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_smin(i32 %x) {
315*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_smin(
316*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
317*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
318*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
319*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
320*bb59eb8eSJacob Young;
321*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
322*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483648
323*bb59eb8eSJacob Young  ret i1 %c
324*bb59eb8eSJacob Young}
325*bb59eb8eSJacob Young
326*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_sminp1(i32 %x) {
327*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_sminp1(
328*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
329*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
330*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
331*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
332*bb59eb8eSJacob Young;
333*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
334*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483647
335*bb59eb8eSJacob Young  ret i1 %c
336*bb59eb8eSJacob Young}
337*bb59eb8eSJacob Young
338*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_sminp2(i32 %x) {
339*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_sminp2(
340*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
341*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
342*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
343*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
344*bb59eb8eSJacob Young;
345*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
346*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483646
347*bb59eb8eSJacob Young  ret i1 %c
348*bb59eb8eSJacob Young}
349*bb59eb8eSJacob Young
350*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_sminp3(i32 %x) {
351*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_sminp3(
352*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
353*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
354*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[R]], -2147483645
355*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
356*bb59eb8eSJacob Young;
357*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
358*bb59eb8eSJacob Young  %c = icmp ult i32 %r, -2147483645
359*bb59eb8eSJacob Young  ret i1 %c
360*bb59eb8eSJacob Young}
361*bb59eb8eSJacob Young
362*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_smaxm1(i32 %x) {
363*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_smaxm1(
364*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
365*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
366*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[R]], 2147483646
367*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
368*bb59eb8eSJacob Young;
369*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
370*bb59eb8eSJacob Young  %c = icmp ult i32 %r, 2147483646
371*bb59eb8eSJacob Young  ret i1 %c
372*bb59eb8eSJacob Young}
373*bb59eb8eSJacob Young
374*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_smax(i32 %x) {
375*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_smax(
376*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) {
377*bb59eb8eSJacob Young; CHECK-NEXT:    [[R:%.*]] = srem i32 [[X]], 2147483647
378*bb59eb8eSJacob Young; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[R]], -1
379*bb59eb8eSJacob Young; CHECK-NEXT:    ret i1 [[C]]
380*bb59eb8eSJacob Young;
381*bb59eb8eSJacob Young  %r = srem i32 %x, 2147483647
382*bb59eb8eSJacob Young  %c = icmp ult i32 %r, 2147483647
383*bb59eb8eSJacob Young  ret i1 %c
384*bb59eb8eSJacob Young}
385