Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / PowerPC / select_const.ll
blob461e0eb239c5320e355e5c73e66a9be5e64dc382
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs -mattr=+isel | FileCheck %s --check-prefix=ALL --check-prefix=ISEL
3 ; RUN: llc < %s -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs -mattr=-isel | FileCheck %s --check-prefix=ALL --check-prefix=NO_ISEL
5 ; Select of constants: control flow / conditional moves can always be replaced by logic+math (but may not be worth it?).
6 ; Test the zeroext/signext variants of each pattern to see if that makes a difference.
8 ; select Cond, 0, 1 --> zext (!Cond)
10 define i32 @select_0_or_1(i1 %cond) {
11 ; ALL-LABEL: select_0_or_1:
12 ; ALL:       # %bb.0:
13 ; ALL-NEXT:    not 3, 3
14 ; ALL-NEXT:    clrldi 3, 3, 63
15 ; ALL-NEXT:    blr
16   %sel = select i1 %cond, i32 0, i32 1
17   ret i32 %sel
20 define i32 @select_0_or_1_zeroext(i1 zeroext %cond) {
21 ; ALL-LABEL: select_0_or_1_zeroext:
22 ; ALL:       # %bb.0:
23 ; ALL-NEXT:    xori 3, 3, 1
24 ; ALL-NEXT:    blr
25   %sel = select i1 %cond, i32 0, i32 1
26   ret i32 %sel
29 define i32 @select_0_or_1_signext(i1 signext %cond) {
30 ; ALL-LABEL: select_0_or_1_signext:
31 ; ALL:       # %bb.0:
32 ; ALL-NEXT:    not 3, 3
33 ; ALL-NEXT:    clrldi 3, 3, 63
34 ; ALL-NEXT:    blr
35   %sel = select i1 %cond, i32 0, i32 1
36   ret i32 %sel
39 ; select Cond, 1, 0 --> zext (Cond)
41 define i32 @select_1_or_0(i1 %cond) {
42 ; ALL-LABEL: select_1_or_0:
43 ; ALL:       # %bb.0:
44 ; ALL-NEXT:    clrldi 3, 3, 63
45 ; ALL-NEXT:    blr
46   %sel = select i1 %cond, i32 1, i32 0
47   ret i32 %sel
50 define i32 @select_1_or_0_zeroext(i1 zeroext %cond) {
51 ; ALL-LABEL: select_1_or_0_zeroext:
52 ; ALL:       # %bb.0:
53 ; ALL-NEXT:    blr
54   %sel = select i1 %cond, i32 1, i32 0
55   ret i32 %sel
58 define i32 @select_1_or_0_signext(i1 signext %cond) {
59 ; ALL-LABEL: select_1_or_0_signext:
60 ; ALL:       # %bb.0:
61 ; ALL-NEXT:    clrldi 3, 3, 63
62 ; ALL-NEXT:    blr
63   %sel = select i1 %cond, i32 1, i32 0
64   ret i32 %sel
67 ; select Cond, 0, -1 --> sext (!Cond)
69 define i32 @select_0_or_neg1(i1 %cond) {
70 ; ISEL-LABEL: select_0_or_neg1:
71 ; ISEL:       # %bb.0:
72 ; ISEL-NEXT:    li 4, 0
73 ; ISEL-NEXT:    andi. 3, 3, 1
74 ; ISEL-NEXT:    oris 3, 4, 65535
75 ; ISEL-NEXT:    ori 3, 3, 65535
76 ; ISEL-NEXT:    isel 3, 0, 3, 1
77 ; ISEL-NEXT:    blr
79 ; NO_ISEL-LABEL: select_0_or_neg1:
80 ; NO_ISEL:       # %bb.0:
81 ; NO_ISEL-NEXT:    li 4, 0
82 ; NO_ISEL-NEXT:    andi. 3, 3, 1
83 ; NO_ISEL-NEXT:    oris 3, 4, 65535
84 ; NO_ISEL-NEXT:    ori 3, 3, 65535
85 ; NO_ISEL-NEXT:    bc 12, 1, .LBB6_1
86 ; NO_ISEL-NEXT:    blr
87 ; NO_ISEL-NEXT:  .LBB6_1:
88 ; NO_ISEL-NEXT:    addi 3, 0, 0
89 ; NO_ISEL-NEXT:    blr
90   %sel = select i1 %cond, i32 0, i32 -1
91   ret i32 %sel
94 define i32 @select_0_or_neg1_zeroext(i1 zeroext %cond) {
95 ; ISEL-LABEL: select_0_or_neg1_zeroext:
96 ; ISEL:       # %bb.0:
97 ; ISEL-NEXT:    li 4, 0
98 ; ISEL-NEXT:    andi. 3, 3, 1
99 ; ISEL-NEXT:    oris 3, 4, 65535
100 ; ISEL-NEXT:    ori 3, 3, 65535
101 ; ISEL-NEXT:    isel 3, 0, 3, 1
102 ; ISEL-NEXT:    blr
104 ; NO_ISEL-LABEL: select_0_or_neg1_zeroext:
105 ; NO_ISEL:       # %bb.0:
106 ; NO_ISEL-NEXT:    li 4, 0
107 ; NO_ISEL-NEXT:    andi. 3, 3, 1
108 ; NO_ISEL-NEXT:    oris 3, 4, 65535
109 ; NO_ISEL-NEXT:    ori 3, 3, 65535
110 ; NO_ISEL-NEXT:    bc 12, 1, .LBB7_1
111 ; NO_ISEL-NEXT:    blr
112 ; NO_ISEL-NEXT:  .LBB7_1:
113 ; NO_ISEL-NEXT:    addi 3, 0, 0
114 ; NO_ISEL-NEXT:    blr
115   %sel = select i1 %cond, i32 0, i32 -1
116   ret i32 %sel
119 define i32 @select_0_or_neg1_signext(i1 signext %cond) {
120 ; ISEL-LABEL: select_0_or_neg1_signext:
121 ; ISEL:       # %bb.0:
122 ; ISEL-NEXT:    li 4, 0
123 ; ISEL-NEXT:    andi. 3, 3, 1
124 ; ISEL-NEXT:    oris 3, 4, 65535
125 ; ISEL-NEXT:    ori 3, 3, 65535
126 ; ISEL-NEXT:    isel 3, 0, 3, 1
127 ; ISEL-NEXT:    blr
129 ; NO_ISEL-LABEL: select_0_or_neg1_signext:
130 ; NO_ISEL:       # %bb.0:
131 ; NO_ISEL-NEXT:    li 4, 0
132 ; NO_ISEL-NEXT:    andi. 3, 3, 1
133 ; NO_ISEL-NEXT:    oris 3, 4, 65535
134 ; NO_ISEL-NEXT:    ori 3, 3, 65535
135 ; NO_ISEL-NEXT:    bc 12, 1, .LBB8_1
136 ; NO_ISEL-NEXT:    blr
137 ; NO_ISEL-NEXT:  .LBB8_1:
138 ; NO_ISEL-NEXT:    addi 3, 0, 0
139 ; NO_ISEL-NEXT:    blr
140   %sel = select i1 %cond, i32 0, i32 -1
141   ret i32 %sel
144 ; select Cond, -1, 0 --> sext (Cond)
146 define i32 @select_neg1_or_0(i1 %cond) {
147 ; ISEL-LABEL: select_neg1_or_0:
148 ; ISEL:       # %bb.0:
149 ; ISEL-NEXT:    li 4, 0
150 ; ISEL-NEXT:    andi. 3, 3, 1
151 ; ISEL-NEXT:    oris 3, 4, 65535
152 ; ISEL-NEXT:    ori 3, 3, 65535
153 ; ISEL-NEXT:    isel 3, 3, 4, 1
154 ; ISEL-NEXT:    blr
156 ; NO_ISEL-LABEL: select_neg1_or_0:
157 ; NO_ISEL:       # %bb.0:
158 ; NO_ISEL-NEXT:    li 4, 0
159 ; NO_ISEL-NEXT:    andi. 3, 3, 1
160 ; NO_ISEL-NEXT:    oris 3, 4, 65535
161 ; NO_ISEL-NEXT:    ori 3, 3, 65535
162 ; NO_ISEL-NEXT:    bclr 12, 1, 0
163 ; NO_ISEL-NEXT:  # %bb.1:
164 ; NO_ISEL-NEXT:    ori 3, 4, 0
165 ; NO_ISEL-NEXT:    blr
166   %sel = select i1 %cond, i32 -1, i32 0
167   ret i32 %sel
170 define i32 @select_neg1_or_0_zeroext(i1 zeroext %cond) {
171 ; ISEL-LABEL: select_neg1_or_0_zeroext:
172 ; ISEL:       # %bb.0:
173 ; ISEL-NEXT:    li 4, 0
174 ; ISEL-NEXT:    andi. 3, 3, 1
175 ; ISEL-NEXT:    oris 3, 4, 65535
176 ; ISEL-NEXT:    ori 3, 3, 65535
177 ; ISEL-NEXT:    isel 3, 3, 4, 1
178 ; ISEL-NEXT:    blr
180 ; NO_ISEL-LABEL: select_neg1_or_0_zeroext:
181 ; NO_ISEL:       # %bb.0:
182 ; NO_ISEL-NEXT:    li 4, 0
183 ; NO_ISEL-NEXT:    andi. 3, 3, 1
184 ; NO_ISEL-NEXT:    oris 3, 4, 65535
185 ; NO_ISEL-NEXT:    ori 3, 3, 65535
186 ; NO_ISEL-NEXT:    bclr 12, 1, 0
187 ; NO_ISEL-NEXT:  # %bb.1:
188 ; NO_ISEL-NEXT:    ori 3, 4, 0
189 ; NO_ISEL-NEXT:    blr
190   %sel = select i1 %cond, i32 -1, i32 0
191   ret i32 %sel
194 define i32 @select_neg1_or_0_signext(i1 signext %cond) {
195 ; ISEL-LABEL: select_neg1_or_0_signext:
196 ; ISEL:       # %bb.0:
197 ; ISEL-NEXT:    li 4, 0
198 ; ISEL-NEXT:    andi. 3, 3, 1
199 ; ISEL-NEXT:    oris 3, 4, 65535
200 ; ISEL-NEXT:    ori 3, 3, 65535
201 ; ISEL-NEXT:    isel 3, 3, 4, 1
202 ; ISEL-NEXT:    blr
204 ; NO_ISEL-LABEL: select_neg1_or_0_signext:
205 ; NO_ISEL:       # %bb.0:
206 ; NO_ISEL-NEXT:    li 4, 0
207 ; NO_ISEL-NEXT:    andi. 3, 3, 1
208 ; NO_ISEL-NEXT:    oris 3, 4, 65535
209 ; NO_ISEL-NEXT:    ori 3, 3, 65535
210 ; NO_ISEL-NEXT:    bclr 12, 1, 0
211 ; NO_ISEL-NEXT:  # %bb.1:
212 ; NO_ISEL-NEXT:    ori 3, 4, 0
213 ; NO_ISEL-NEXT:    blr
214   %sel = select i1 %cond, i32 -1, i32 0
215   ret i32 %sel
218 ; select Cond, C+1, C --> add (zext Cond), C
220 define i32 @select_Cplus1_C(i1 %cond) {
221 ; ALL-LABEL: select_Cplus1_C:
222 ; ALL:       # %bb.0:
223 ; ALL-NEXT:    clrldi 3, 3, 63
224 ; ALL-NEXT:    addi 3, 3, 41
225 ; ALL-NEXT:    blr
226   %sel = select i1 %cond, i32 42, i32 41
227   ret i32 %sel
230 define i32 @select_Cplus1_C_zeroext(i1 zeroext %cond) {
231 ; ALL-LABEL: select_Cplus1_C_zeroext:
232 ; ALL:       # %bb.0:
233 ; ALL-NEXT:    addi 3, 3, 41
234 ; ALL-NEXT:    blr
235   %sel = select i1 %cond, i32 42, i32 41
236   ret i32 %sel
239 define i32 @select_Cplus1_C_signext(i1 signext %cond) {
240 ; ALL-LABEL: select_Cplus1_C_signext:
241 ; ALL:       # %bb.0:
242 ; ALL-NEXT:    subfic 3, 3, 41
243 ; ALL-NEXT:    blr
244   %sel = select i1 %cond, i32 42, i32 41
245   ret i32 %sel
248 ; select Cond, C, C+1 --> add (sext Cond), C
250 define i32 @select_C_Cplus1(i1 %cond) {
251 ; ALL-LABEL: select_C_Cplus1:
252 ; ALL:       # %bb.0:
253 ; ALL-NEXT:    clrldi 3, 3, 63
254 ; ALL-NEXT:    subfic 3, 3, 42
255 ; ALL-NEXT:    blr
256   %sel = select i1 %cond, i32 41, i32 42
257   ret i32 %sel
260 define i32 @select_C_Cplus1_zeroext(i1 zeroext %cond) {
261 ; ALL-LABEL: select_C_Cplus1_zeroext:
262 ; ALL:       # %bb.0:
263 ; ALL-NEXT:    subfic 3, 3, 42
264 ; ALL-NEXT:    blr
265   %sel = select i1 %cond, i32 41, i32 42
266   ret i32 %sel
269 define i32 @select_C_Cplus1_signext(i1 signext %cond) {
270 ; ALL-LABEL: select_C_Cplus1_signext:
271 ; ALL:       # %bb.0:
272 ; ALL-NEXT:    addi 3, 3, 42
273 ; ALL-NEXT:    blr
274   %sel = select i1 %cond, i32 41, i32 42
275   ret i32 %sel
278 ; In general, select of 2 constants could be:
279 ; select Cond, C1, C2 --> add (mul (zext Cond), C1-C2), C2 --> add (and (sext Cond), C1-C2), C2
281 define i32 @select_C1_C2(i1 %cond) {
282 ; ISEL-LABEL: select_C1_C2:
283 ; ISEL:       # %bb.0:
284 ; ISEL-NEXT:    andi. 3, 3, 1
285 ; ISEL-NEXT:    li 4, 421
286 ; ISEL-NEXT:    li 3, 42
287 ; ISEL-NEXT:    isel 3, 4, 3, 1
288 ; ISEL-NEXT:    blr
290 ; NO_ISEL-LABEL: select_C1_C2:
291 ; NO_ISEL:       # %bb.0:
292 ; NO_ISEL-NEXT:    andi. 3, 3, 1
293 ; NO_ISEL-NEXT:    li 4, 421
294 ; NO_ISEL-NEXT:    li 3, 42
295 ; NO_ISEL-NEXT:    bc 12, 1, .LBB18_1
296 ; NO_ISEL-NEXT:    blr
297 ; NO_ISEL-NEXT:  .LBB18_1:
298 ; NO_ISEL-NEXT:    addi 3, 4, 0
299 ; NO_ISEL-NEXT:    blr
300   %sel = select i1 %cond, i32 421, i32 42
301   ret i32 %sel
304 define i32 @select_C1_C2_zeroext(i1 zeroext %cond) {
305 ; ISEL-LABEL: select_C1_C2_zeroext:
306 ; ISEL:       # %bb.0:
307 ; ISEL-NEXT:    andi. 3, 3, 1
308 ; ISEL-NEXT:    li 4, 421
309 ; ISEL-NEXT:    li 3, 42
310 ; ISEL-NEXT:    isel 3, 4, 3, 1
311 ; ISEL-NEXT:    blr
313 ; NO_ISEL-LABEL: select_C1_C2_zeroext:
314 ; NO_ISEL:       # %bb.0:
315 ; NO_ISEL-NEXT:    andi. 3, 3, 1
316 ; NO_ISEL-NEXT:    li 4, 421
317 ; NO_ISEL-NEXT:    li 3, 42
318 ; NO_ISEL-NEXT:    bc 12, 1, .LBB19_1
319 ; NO_ISEL-NEXT:    blr
320 ; NO_ISEL-NEXT:  .LBB19_1:
321 ; NO_ISEL-NEXT:    addi 3, 4, 0
322 ; NO_ISEL-NEXT:    blr
323   %sel = select i1 %cond, i32 421, i32 42
324   ret i32 %sel
327 define i32 @select_C1_C2_signext(i1 signext %cond) {
328 ; ISEL-LABEL: select_C1_C2_signext:
329 ; ISEL:       # %bb.0:
330 ; ISEL-NEXT:    andi. 3, 3, 1
331 ; ISEL-NEXT:    li 4, 421
332 ; ISEL-NEXT:    li 3, 42
333 ; ISEL-NEXT:    isel 3, 4, 3, 1
334 ; ISEL-NEXT:    blr
336 ; NO_ISEL-LABEL: select_C1_C2_signext:
337 ; NO_ISEL:       # %bb.0:
338 ; NO_ISEL-NEXT:    andi. 3, 3, 1
339 ; NO_ISEL-NEXT:    li 4, 421
340 ; NO_ISEL-NEXT:    li 3, 42
341 ; NO_ISEL-NEXT:    bc 12, 1, .LBB20_1
342 ; NO_ISEL-NEXT:    blr
343 ; NO_ISEL-NEXT:  .LBB20_1:
344 ; NO_ISEL-NEXT:    addi 3, 4, 0
345 ; NO_ISEL-NEXT:    blr
346   %sel = select i1 %cond, i32 421, i32 42
347   ret i32 %sel
350 ; A binary operator with constant after the select should always get folded into the select.
352 define i8 @sel_constants_add_constant(i1 %cond) {
353 ; ISEL-LABEL: sel_constants_add_constant:
354 ; ISEL:       # %bb.0:
355 ; ISEL-NEXT:    andi. 3, 3, 1
356 ; ISEL-NEXT:    li 4, 1
357 ; ISEL-NEXT:    li 3, 28
358 ; ISEL-NEXT:    isel 3, 4, 3, 1
359 ; ISEL-NEXT:    blr
361 ; NO_ISEL-LABEL: sel_constants_add_constant:
362 ; NO_ISEL:       # %bb.0:
363 ; NO_ISEL-NEXT:    andi. 3, 3, 1
364 ; NO_ISEL-NEXT:    li 4, 1
365 ; NO_ISEL-NEXT:    li 3, 28
366 ; NO_ISEL-NEXT:    bc 12, 1, .LBB21_1
367 ; NO_ISEL-NEXT:    blr
368 ; NO_ISEL-NEXT:  .LBB21_1:
369 ; NO_ISEL-NEXT:    addi 3, 4, 0
370 ; NO_ISEL-NEXT:    blr
371   %sel = select i1 %cond, i8 -4, i8 23
372   %bo = add i8 %sel, 5
373   ret i8 %bo
376 define i8 @sel_constants_sub_constant(i1 %cond) {
377 ; ISEL-LABEL: sel_constants_sub_constant:
378 ; ISEL:       # %bb.0:
379 ; ISEL-NEXT:    li 4, 0
380 ; ISEL-NEXT:    andi. 3, 3, 1
381 ; ISEL-NEXT:    oris 3, 4, 65535
382 ; ISEL-NEXT:    li 4, 18
383 ; ISEL-NEXT:    ori 3, 3, 65527
384 ; ISEL-NEXT:    isel 3, 3, 4, 1
385 ; ISEL-NEXT:    blr
387 ; NO_ISEL-LABEL: sel_constants_sub_constant:
388 ; NO_ISEL:       # %bb.0:
389 ; NO_ISEL-NEXT:    li 4, 0
390 ; NO_ISEL-NEXT:    andi. 3, 3, 1
391 ; NO_ISEL-NEXT:    oris 3, 4, 65535
392 ; NO_ISEL-NEXT:    li 4, 18
393 ; NO_ISEL-NEXT:    ori 3, 3, 65527
394 ; NO_ISEL-NEXT:    bclr 12, 1, 0
395 ; NO_ISEL-NEXT:  # %bb.1:
396 ; NO_ISEL-NEXT:    ori 3, 4, 0
397 ; NO_ISEL-NEXT:    blr
398   %sel = select i1 %cond, i8 -4, i8 23
399   %bo = sub i8 %sel, 5
400   ret i8 %bo
403 define i8 @sel_constants_sub_constant_sel_constants(i1 %cond) {
404 ; ISEL-LABEL: sel_constants_sub_constant_sel_constants:
405 ; ISEL:       # %bb.0:
406 ; ISEL-NEXT:    andi. 3, 3, 1
407 ; ISEL-NEXT:    li 4, 9
408 ; ISEL-NEXT:    li 3, 2
409 ; ISEL-NEXT:    isel 3, 4, 3, 1
410 ; ISEL-NEXT:    blr
412 ; NO_ISEL-LABEL: sel_constants_sub_constant_sel_constants:
413 ; NO_ISEL:       # %bb.0:
414 ; NO_ISEL-NEXT:    andi. 3, 3, 1
415 ; NO_ISEL-NEXT:    li 4, 9
416 ; NO_ISEL-NEXT:    li 3, 2
417 ; NO_ISEL-NEXT:    bc 12, 1, .LBB23_1
418 ; NO_ISEL-NEXT:    blr
419 ; NO_ISEL-NEXT:  .LBB23_1:
420 ; NO_ISEL-NEXT:    addi 3, 4, 0
421 ; NO_ISEL-NEXT:    blr
422   %sel = select i1 %cond, i8 -4, i8 3
423   %bo = sub i8 5, %sel
424   ret i8 %bo
427 define i8 @sel_constants_mul_constant(i1 %cond) {
428 ; ISEL-LABEL: sel_constants_mul_constant:
429 ; ISEL:       # %bb.0:
430 ; ISEL-NEXT:    lis 4, 16383
431 ; ISEL-NEXT:    andi. 3, 3, 1
432 ; ISEL-NEXT:    ori 3, 4, 65531
433 ; ISEL-NEXT:    li 4, 115
434 ; ISEL-NEXT:    sldi 3, 3, 2
435 ; ISEL-NEXT:    isel 3, 3, 4, 1
436 ; ISEL-NEXT:    blr
438 ; NO_ISEL-LABEL: sel_constants_mul_constant:
439 ; NO_ISEL:       # %bb.0:
440 ; NO_ISEL-NEXT:    lis 4, 16383
441 ; NO_ISEL-NEXT:    andi. 3, 3, 1
442 ; NO_ISEL-NEXT:    ori 3, 4, 65531
443 ; NO_ISEL-NEXT:    li 4, 115
444 ; NO_ISEL-NEXT:    sldi 3, 3, 2
445 ; NO_ISEL-NEXT:    bclr 12, 1, 0
446 ; NO_ISEL-NEXT:  # %bb.1:
447 ; NO_ISEL-NEXT:    ori 3, 4, 0
448 ; NO_ISEL-NEXT:    blr
449   %sel = select i1 %cond, i8 -4, i8 23
450   %bo = mul i8 %sel, 5
451   ret i8 %bo
454 define i8 @sel_constants_sdiv_constant(i1 %cond) {
455 ; ISEL-LABEL: sel_constants_sdiv_constant:
456 ; ISEL:       # %bb.0:
457 ; ISEL-NEXT:    andi. 3, 3, 1
458 ; ISEL-NEXT:    li 3, 4
459 ; ISEL-NEXT:    isel 3, 0, 3, 1
460 ; ISEL-NEXT:    blr
462 ; NO_ISEL-LABEL: sel_constants_sdiv_constant:
463 ; NO_ISEL:       # %bb.0:
464 ; NO_ISEL-NEXT:    andi. 3, 3, 1
465 ; NO_ISEL-NEXT:    li 3, 4
466 ; NO_ISEL-NEXT:    bc 12, 1, .LBB25_1
467 ; NO_ISEL-NEXT:    blr
468 ; NO_ISEL-NEXT:  .LBB25_1:
469 ; NO_ISEL-NEXT:    addi 3, 0, 0
470 ; NO_ISEL-NEXT:    blr
471   %sel = select i1 %cond, i8 -4, i8 23
472   %bo = sdiv i8 %sel, 5
473   ret i8 %bo
476 define i8 @sdiv_constant_sel_constants(i1 %cond) {
477 ; ISEL-LABEL: sdiv_constant_sel_constants:
478 ; ISEL:       # %bb.0:
479 ; ISEL-NEXT:    andi. 3, 3, 1
480 ; ISEL-NEXT:    li 3, 5
481 ; ISEL-NEXT:    isel 3, 0, 3, 1
482 ; ISEL-NEXT:    blr
484 ; NO_ISEL-LABEL: sdiv_constant_sel_constants:
485 ; NO_ISEL:       # %bb.0:
486 ; NO_ISEL-NEXT:    andi. 3, 3, 1
487 ; NO_ISEL-NEXT:    li 3, 5
488 ; NO_ISEL-NEXT:    bc 12, 1, .LBB26_1
489 ; NO_ISEL-NEXT:    blr
490 ; NO_ISEL-NEXT:  .LBB26_1:
491 ; NO_ISEL-NEXT:    addi 3, 0, 0
492 ; NO_ISEL-NEXT:    blr
493   %sel = select i1 %cond, i8 121, i8 23
494   %bo = sdiv i8 120, %sel
495   ret i8 %bo
498 define i8 @sel_constants_udiv_constant(i1 %cond) {
499 ; ISEL-LABEL: sel_constants_udiv_constant:
500 ; ISEL:       # %bb.0:
501 ; ISEL-NEXT:    andi. 3, 3, 1
502 ; ISEL-NEXT:    li 4, 50
503 ; ISEL-NEXT:    li 3, 4
504 ; ISEL-NEXT:    isel 3, 4, 3, 1
505 ; ISEL-NEXT:    blr
507 ; NO_ISEL-LABEL: sel_constants_udiv_constant:
508 ; NO_ISEL:       # %bb.0:
509 ; NO_ISEL-NEXT:    andi. 3, 3, 1
510 ; NO_ISEL-NEXT:    li 4, 50
511 ; NO_ISEL-NEXT:    li 3, 4
512 ; NO_ISEL-NEXT:    bc 12, 1, .LBB27_1
513 ; NO_ISEL-NEXT:    blr
514 ; NO_ISEL-NEXT:  .LBB27_1:
515 ; NO_ISEL-NEXT:    addi 3, 4, 0
516 ; NO_ISEL-NEXT:    blr
517   %sel = select i1 %cond, i8 -4, i8 23
518   %bo = udiv i8 %sel, 5
519   ret i8 %bo
522 define i8 @udiv_constant_sel_constants(i1 %cond) {
523 ; ISEL-LABEL: udiv_constant_sel_constants:
524 ; ISEL:       # %bb.0:
525 ; ISEL-NEXT:    andi. 3, 3, 1
526 ; ISEL-NEXT:    li 3, 5
527 ; ISEL-NEXT:    isel 3, 0, 3, 1
528 ; ISEL-NEXT:    blr
530 ; NO_ISEL-LABEL: udiv_constant_sel_constants:
531 ; NO_ISEL:       # %bb.0:
532 ; NO_ISEL-NEXT:    andi. 3, 3, 1
533 ; NO_ISEL-NEXT:    li 3, 5
534 ; NO_ISEL-NEXT:    bc 12, 1, .LBB28_1
535 ; NO_ISEL-NEXT:    blr
536 ; NO_ISEL-NEXT:  .LBB28_1:
537 ; NO_ISEL-NEXT:    addi 3, 0, 0
538 ; NO_ISEL-NEXT:    blr
539   %sel = select i1 %cond, i8 -4, i8 23
540   %bo = udiv i8 120, %sel
541   ret i8 %bo
544 define i8 @sel_constants_srem_constant(i1 %cond) {
545 ; ISEL-LABEL: sel_constants_srem_constant:
546 ; ISEL:       # %bb.0:
547 ; ISEL-NEXT:    lis 4, 16383
548 ; ISEL-NEXT:    andi. 3, 3, 1
549 ; ISEL-NEXT:    ori 3, 4, 65535
550 ; ISEL-NEXT:    li 4, 3
551 ; ISEL-NEXT:    sldi 3, 3, 2
552 ; ISEL-NEXT:    isel 3, 3, 4, 1
553 ; ISEL-NEXT:    blr
555 ; NO_ISEL-LABEL: sel_constants_srem_constant:
556 ; NO_ISEL:       # %bb.0:
557 ; NO_ISEL-NEXT:    lis 4, 16383
558 ; NO_ISEL-NEXT:    andi. 3, 3, 1
559 ; NO_ISEL-NEXT:    ori 3, 4, 65535
560 ; NO_ISEL-NEXT:    li 4, 3
561 ; NO_ISEL-NEXT:    sldi 3, 3, 2
562 ; NO_ISEL-NEXT:    bclr 12, 1, 0
563 ; NO_ISEL-NEXT:  # %bb.1:
564 ; NO_ISEL-NEXT:    ori 3, 4, 0
565 ; NO_ISEL-NEXT:    blr
566   %sel = select i1 %cond, i8 -4, i8 23
567   %bo = srem i8 %sel, 5
568   ret i8 %bo
571 define i8 @srem_constant_sel_constants(i1 %cond) {
572 ; ISEL-LABEL: srem_constant_sel_constants:
573 ; ISEL:       # %bb.0:
574 ; ISEL-NEXT:    andi. 3, 3, 1
575 ; ISEL-NEXT:    li 4, 120
576 ; ISEL-NEXT:    li 3, 5
577 ; ISEL-NEXT:    isel 3, 4, 3, 1
578 ; ISEL-NEXT:    blr
580 ; NO_ISEL-LABEL: srem_constant_sel_constants:
581 ; NO_ISEL:       # %bb.0:
582 ; NO_ISEL-NEXT:    andi. 3, 3, 1
583 ; NO_ISEL-NEXT:    li 4, 120
584 ; NO_ISEL-NEXT:    li 3, 5
585 ; NO_ISEL-NEXT:    bc 12, 1, .LBB30_1
586 ; NO_ISEL-NEXT:    blr
587 ; NO_ISEL-NEXT:  .LBB30_1:
588 ; NO_ISEL-NEXT:    addi 3, 4, 0
589 ; NO_ISEL-NEXT:    blr
590   %sel = select i1 %cond, i8 121, i8 23
591   %bo = srem i8 120, %sel
592   ret i8 %bo
595 define i8 @sel_constants_urem_constant(i1 %cond) {
596 ; ALL-LABEL: sel_constants_urem_constant:
597 ; ALL:       # %bb.0:
598 ; ALL-NEXT:    rlwinm 3, 3, 0, 31, 31
599 ; ALL-NEXT:    subfic 3, 3, 3
600 ; ALL-NEXT:    blr
601   %sel = select i1 %cond, i8 -4, i8 23
602   %bo = urem i8 %sel, 5
603   ret i8 %bo
606 define i8 @urem_constant_sel_constants(i1 %cond) {
607 ; ISEL-LABEL: urem_constant_sel_constants:
608 ; ISEL:       # %bb.0:
609 ; ISEL-NEXT:    andi. 3, 3, 1
610 ; ISEL-NEXT:    li 4, 120
611 ; ISEL-NEXT:    li 3, 5
612 ; ISEL-NEXT:    isel 3, 4, 3, 1
613 ; ISEL-NEXT:    blr
615 ; NO_ISEL-LABEL: urem_constant_sel_constants:
616 ; NO_ISEL:       # %bb.0:
617 ; NO_ISEL-NEXT:    andi. 3, 3, 1
618 ; NO_ISEL-NEXT:    li 4, 120
619 ; NO_ISEL-NEXT:    li 3, 5
620 ; NO_ISEL-NEXT:    bc 12, 1, .LBB32_1
621 ; NO_ISEL-NEXT:    blr
622 ; NO_ISEL-NEXT:  .LBB32_1:
623 ; NO_ISEL-NEXT:    addi 3, 4, 0
624 ; NO_ISEL-NEXT:    blr
625   %sel = select i1 %cond, i8 -4, i8 23
626   %bo = urem i8 120, %sel
627   ret i8 %bo
630 define i8 @sel_constants_and_constant(i1 %cond) {
631 ; ALL-LABEL: sel_constants_and_constant:
632 ; ALL:       # %bb.0:
633 ; ALL-NEXT:    rlwinm 3, 3, 0, 31, 31
634 ; ALL-NEXT:    subfic 3, 3, 5
635 ; ALL-NEXT:    blr
636   %sel = select i1 %cond, i8 -4, i8 23
637   %bo = and i8 %sel, 5
638   ret i8 %bo
641 define i8 @sel_constants_or_constant(i1 %cond) {
642 ; ISEL-LABEL: sel_constants_or_constant:
643 ; ISEL:       # %bb.0:
644 ; ISEL-NEXT:    li 4, 0
645 ; ISEL-NEXT:    andi. 3, 3, 1
646 ; ISEL-NEXT:    oris 3, 4, 65535
647 ; ISEL-NEXT:    li 4, 23
648 ; ISEL-NEXT:    ori 3, 3, 65533
649 ; ISEL-NEXT:    isel 3, 3, 4, 1
650 ; ISEL-NEXT:    blr
652 ; NO_ISEL-LABEL: sel_constants_or_constant:
653 ; NO_ISEL:       # %bb.0:
654 ; NO_ISEL-NEXT:    li 4, 0
655 ; NO_ISEL-NEXT:    andi. 3, 3, 1
656 ; NO_ISEL-NEXT:    oris 3, 4, 65535
657 ; NO_ISEL-NEXT:    li 4, 23
658 ; NO_ISEL-NEXT:    ori 3, 3, 65533
659 ; NO_ISEL-NEXT:    bclr 12, 1, 0
660 ; NO_ISEL-NEXT:  # %bb.1:
661 ; NO_ISEL-NEXT:    ori 3, 4, 0
662 ; NO_ISEL-NEXT:    blr
663   %sel = select i1 %cond, i8 -4, i8 23
664   %bo = or i8 %sel, 5
665   ret i8 %bo
668 define i8 @sel_constants_xor_constant(i1 %cond) {
669 ; ISEL-LABEL: sel_constants_xor_constant:
670 ; ISEL:       # %bb.0:
671 ; ISEL-NEXT:    li 4, 0
672 ; ISEL-NEXT:    andi. 3, 3, 1
673 ; ISEL-NEXT:    oris 3, 4, 65535
674 ; ISEL-NEXT:    li 4, 18
675 ; ISEL-NEXT:    ori 3, 3, 65529
676 ; ISEL-NEXT:    isel 3, 3, 4, 1
677 ; ISEL-NEXT:    blr
679 ; NO_ISEL-LABEL: sel_constants_xor_constant:
680 ; NO_ISEL:       # %bb.0:
681 ; NO_ISEL-NEXT:    li 4, 0
682 ; NO_ISEL-NEXT:    andi. 3, 3, 1
683 ; NO_ISEL-NEXT:    oris 3, 4, 65535
684 ; NO_ISEL-NEXT:    li 4, 18
685 ; NO_ISEL-NEXT:    ori 3, 3, 65529
686 ; NO_ISEL-NEXT:    bclr 12, 1, 0
687 ; NO_ISEL-NEXT:  # %bb.1:
688 ; NO_ISEL-NEXT:    ori 3, 4, 0
689 ; NO_ISEL-NEXT:    blr
690   %sel = select i1 %cond, i8 -4, i8 23
691   %bo = xor i8 %sel, 5
692   ret i8 %bo
695 define i8 @sel_constants_shl_constant(i1 %cond) {
696 ; ISEL-LABEL: sel_constants_shl_constant:
697 ; ISEL:       # %bb.0:
698 ; ISEL-NEXT:    lis 4, 2047
699 ; ISEL-NEXT:    lis 5, 511
700 ; ISEL-NEXT:    andi. 3, 3, 1
701 ; ISEL-NEXT:    ori 3, 4, 65535
702 ; ISEL-NEXT:    ori 4, 5, 65535
703 ; ISEL-NEXT:    sldi 3, 3, 5
704 ; ISEL-NEXT:    sldi 4, 4, 7
705 ; ISEL-NEXT:    isel 3, 4, 3, 1
706 ; ISEL-NEXT:    blr
708 ; NO_ISEL-LABEL: sel_constants_shl_constant:
709 ; NO_ISEL:       # %bb.0:
710 ; NO_ISEL-NEXT:    lis 4, 2047
711 ; NO_ISEL-NEXT:    lis 5, 511
712 ; NO_ISEL-NEXT:    andi. 3, 3, 1
713 ; NO_ISEL-NEXT:    ori 3, 4, 65535
714 ; NO_ISEL-NEXT:    ori 4, 5, 65535
715 ; NO_ISEL-NEXT:    sldi 3, 3, 5
716 ; NO_ISEL-NEXT:    sldi 4, 4, 7
717 ; NO_ISEL-NEXT:    bc 12, 1, .LBB36_1
718 ; NO_ISEL-NEXT:    blr
719 ; NO_ISEL-NEXT:  .LBB36_1:
720 ; NO_ISEL-NEXT:    addi 3, 4, 0
721 ; NO_ISEL-NEXT:    blr
722   %sel = select i1 %cond, i8 -4, i8 23
723   %bo = shl i8 %sel, 5
724   ret i8 %bo
727 define i8 @shl_constant_sel_constants(i1 %cond) {
728 ; ALL-LABEL: shl_constant_sel_constants:
729 ; ALL:       # %bb.0:
730 ; ALL-NEXT:    rlwinm 3, 3, 0, 31, 31
731 ; ALL-NEXT:    li 4, 1
732 ; ALL-NEXT:    subfic 3, 3, 3
733 ; ALL-NEXT:    slw 3, 4, 3
734 ; ALL-NEXT:    blr
735   %sel = select i1 %cond, i8 2, i8 3
736   %bo = shl i8 1, %sel
737   ret i8 %bo
740 define i8 @sel_constants_lshr_constant(i1 %cond) {
741 ; ISEL-LABEL: sel_constants_lshr_constant:
742 ; ISEL:       # %bb.0:
743 ; ISEL-NEXT:    andi. 3, 3, 1
744 ; ISEL-NEXT:    li 4, 7
745 ; ISEL-NEXT:    li 3, 0
746 ; ISEL-NEXT:    isel 3, 4, 3, 1
747 ; ISEL-NEXT:    blr
749 ; NO_ISEL-LABEL: sel_constants_lshr_constant:
750 ; NO_ISEL:       # %bb.0:
751 ; NO_ISEL-NEXT:    andi. 3, 3, 1
752 ; NO_ISEL-NEXT:    li 4, 7
753 ; NO_ISEL-NEXT:    li 3, 0
754 ; NO_ISEL-NEXT:    bc 12, 1, .LBB38_1
755 ; NO_ISEL-NEXT:    blr
756 ; NO_ISEL-NEXT:  .LBB38_1:
757 ; NO_ISEL-NEXT:    addi 3, 4, 0
758 ; NO_ISEL-NEXT:    blr
759   %sel = select i1 %cond, i8 -4, i8 23
760   %bo = lshr i8 %sel, 5
761   ret i8 %bo
764 define i8 @lshr_constant_sel_constants(i1 %cond) {
765 ; ALL-LABEL: lshr_constant_sel_constants:
766 ; ALL:       # %bb.0:
767 ; ALL-NEXT:    rlwinm 3, 3, 0, 31, 31
768 ; ALL-NEXT:    li 4, 64
769 ; ALL-NEXT:    subfic 3, 3, 3
770 ; ALL-NEXT:    srw 3, 4, 3
771 ; ALL-NEXT:    blr
772   %sel = select i1 %cond, i8 2, i8 3
773   %bo = lshr i8 64, %sel
774   ret i8 %bo
778 define i8 @sel_constants_ashr_constant(i1 %cond) {
779 ; ALL-LABEL: sel_constants_ashr_constant:
780 ; ALL:       # %bb.0:
781 ; ALL-NEXT:    clrldi 3, 3, 63
782 ; ALL-NEXT:    neg 3, 3
783 ; ALL-NEXT:    blr
784   %sel = select i1 %cond, i8 -4, i8 23
785   %bo = ashr i8 %sel, 5
786   ret i8 %bo
789 define i8 @ashr_constant_sel_constants(i1 %cond) {
790 ; ALL-LABEL: ashr_constant_sel_constants:
791 ; ALL:       # %bb.0:
792 ; ALL-NEXT:    rlwinm 3, 3, 0, 31, 31
793 ; ALL-NEXT:    li 4, -128
794 ; ALL-NEXT:    subfic 3, 3, 3
795 ; ALL-NEXT:    sraw 3, 4, 3
796 ; ALL-NEXT:    blr
797   %sel = select i1 %cond, i8 2, i8 3
798   %bo = ashr i8 128, %sel
799   ret i8 %bo
802 define double @sel_constants_fadd_constant(i1 %cond) {
803 ; ISEL-LABEL: sel_constants_fadd_constant:
804 ; ISEL:       # %bb.0:
805 ; ISEL-NEXT:    andi. 3, 3, 1
806 ; ISEL-NEXT:    addis 4, 2, .LCPI42_0@toc@ha
807 ; ISEL-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
808 ; ISEL-NEXT:    addi 4, 4, .LCPI42_0@toc@l
809 ; ISEL-NEXT:    addi 3, 3, .LCPI42_1@toc@l
810 ; ISEL-NEXT:    isel 3, 3, 4, 1
811 ; ISEL-NEXT:    lfdx 1, 0, 3
812 ; ISEL-NEXT:    blr
814 ; NO_ISEL-LABEL: sel_constants_fadd_constant:
815 ; NO_ISEL:       # %bb.0:
816 ; NO_ISEL-NEXT:    andi. 3, 3, 1
817 ; NO_ISEL-NEXT:    addis 4, 2, .LCPI42_0@toc@ha
818 ; NO_ISEL-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
819 ; NO_ISEL-NEXT:    addi 4, 4, .LCPI42_0@toc@l
820 ; NO_ISEL-NEXT:    addi 3, 3, .LCPI42_1@toc@l
821 ; NO_ISEL-NEXT:    bc 12, 1, .LBB42_2
822 ; NO_ISEL-NEXT:  # %bb.1:
823 ; NO_ISEL-NEXT:    ori 3, 4, 0
824 ; NO_ISEL-NEXT:    b .LBB42_2
825 ; NO_ISEL-NEXT:  .LBB42_2:
826 ; NO_ISEL-NEXT:    lfdx 1, 0, 3
827 ; NO_ISEL-NEXT:    blr
828   %sel = select i1 %cond, double -4.0, double 23.3
829   %bo = fadd double %sel, 5.1
830   ret double %bo
833 define double @sel_constants_fsub_constant(i1 %cond) {
834 ; ISEL-LABEL: sel_constants_fsub_constant:
835 ; ISEL:       # %bb.0:
836 ; ISEL-NEXT:    andi. 3, 3, 1
837 ; ISEL-NEXT:    addis 4, 2, .LCPI43_0@toc@ha
838 ; ISEL-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
839 ; ISEL-NEXT:    addi 4, 4, .LCPI43_0@toc@l
840 ; ISEL-NEXT:    addi 3, 3, .LCPI43_1@toc@l
841 ; ISEL-NEXT:    isel 3, 3, 4, 1
842 ; ISEL-NEXT:    lfdx 1, 0, 3
843 ; ISEL-NEXT:    blr
845 ; NO_ISEL-LABEL: sel_constants_fsub_constant:
846 ; NO_ISEL:       # %bb.0:
847 ; NO_ISEL-NEXT:    andi. 3, 3, 1
848 ; NO_ISEL-NEXT:    addis 4, 2, .LCPI43_0@toc@ha
849 ; NO_ISEL-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
850 ; NO_ISEL-NEXT:    addi 4, 4, .LCPI43_0@toc@l
851 ; NO_ISEL-NEXT:    addi 3, 3, .LCPI43_1@toc@l
852 ; NO_ISEL-NEXT:    bc 12, 1, .LBB43_2
853 ; NO_ISEL-NEXT:  # %bb.1:
854 ; NO_ISEL-NEXT:    ori 3, 4, 0
855 ; NO_ISEL-NEXT:    b .LBB43_2
856 ; NO_ISEL-NEXT:  .LBB43_2:
857 ; NO_ISEL-NEXT:    lfdx 1, 0, 3
858 ; NO_ISEL-NEXT:    blr
859   %sel = select i1 %cond, double -4.0, double 23.3
860   %bo = fsub double %sel, 5.1
861   ret double %bo
864 define double @fsub_constant_sel_constants(i1 %cond) {
865 ; ISEL-LABEL: fsub_constant_sel_constants:
866 ; ISEL:       # %bb.0:
867 ; ISEL-NEXT:    andi. 3, 3, 1
868 ; ISEL-NEXT:    addis 4, 2, .LCPI44_0@toc@ha
869 ; ISEL-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
870 ; ISEL-NEXT:    addi 4, 4, .LCPI44_0@toc@l
871 ; ISEL-NEXT:    addi 3, 3, .LCPI44_1@toc@l
872 ; ISEL-NEXT:    isel 3, 3, 4, 1
873 ; ISEL-NEXT:    lfdx 1, 0, 3
874 ; ISEL-NEXT:    blr
876 ; NO_ISEL-LABEL: fsub_constant_sel_constants:
877 ; NO_ISEL:       # %bb.0:
878 ; NO_ISEL-NEXT:    andi. 3, 3, 1
879 ; NO_ISEL-NEXT:    addis 4, 2, .LCPI44_0@toc@ha
880 ; NO_ISEL-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
881 ; NO_ISEL-NEXT:    addi 4, 4, .LCPI44_0@toc@l
882 ; NO_ISEL-NEXT:    addi 3, 3, .LCPI44_1@toc@l
883 ; NO_ISEL-NEXT:    bc 12, 1, .LBB44_2
884 ; NO_ISEL-NEXT:  # %bb.1:
885 ; NO_ISEL-NEXT:    ori 3, 4, 0
886 ; NO_ISEL-NEXT:    b .LBB44_2
887 ; NO_ISEL-NEXT:  .LBB44_2:
888 ; NO_ISEL-NEXT:    lfdx 1, 0, 3
889 ; NO_ISEL-NEXT:    blr
890   %sel = select i1 %cond, double -4.0, double 23.3
891   %bo = fsub double 5.1, %sel
892   ret double %bo
895 define double @sel_constants_fmul_constant(i1 %cond) {
896 ; ISEL-LABEL: sel_constants_fmul_constant:
897 ; ISEL:       # %bb.0:
898 ; ISEL-NEXT:    andi. 3, 3, 1
899 ; ISEL-NEXT:    addis 4, 2, .LCPI45_0@toc@ha
900 ; ISEL-NEXT:    addis 3, 2, .LCPI45_1@toc@ha
901 ; ISEL-NEXT:    addi 4, 4, .LCPI45_0@toc@l
902 ; ISEL-NEXT:    addi 3, 3, .LCPI45_1@toc@l
903 ; ISEL-NEXT:    isel 3, 3, 4, 1
904 ; ISEL-NEXT:    lfdx 1, 0, 3
905 ; ISEL-NEXT:    blr
907 ; NO_ISEL-LABEL: sel_constants_fmul_constant:
908 ; NO_ISEL:       # %bb.0:
909 ; NO_ISEL-NEXT:    andi. 3, 3, 1
910 ; NO_ISEL-NEXT:    addis 4, 2, .LCPI45_0@toc@ha
911 ; NO_ISEL-NEXT:    addis 3, 2, .LCPI45_1@toc@ha
912 ; NO_ISEL-NEXT:    addi 4, 4, .LCPI45_0@toc@l
913 ; NO_ISEL-NEXT:    addi 3, 3, .LCPI45_1@toc@l
914 ; NO_ISEL-NEXT:    bc 12, 1, .LBB45_2
915 ; NO_ISEL-NEXT:  # %bb.1:
916 ; NO_ISEL-NEXT:    ori 3, 4, 0
917 ; NO_ISEL-NEXT:    b .LBB45_2
918 ; NO_ISEL-NEXT:  .LBB45_2:
919 ; NO_ISEL-NEXT:    lfdx 1, 0, 3
920 ; NO_ISEL-NEXT:    blr
921   %sel = select i1 %cond, double -4.0, double 23.3
922   %bo = fmul double %sel, 5.1
923   ret double %bo
926 define double @sel_constants_fdiv_constant(i1 %cond) {
927 ; ISEL-LABEL: sel_constants_fdiv_constant:
928 ; ISEL:       # %bb.0:
929 ; ISEL-NEXT:    andi. 3, 3, 1
930 ; ISEL-NEXT:    addis 4, 2, .LCPI46_0@toc@ha
931 ; ISEL-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
932 ; ISEL-NEXT:    addi 4, 4, .LCPI46_0@toc@l
933 ; ISEL-NEXT:    addi 3, 3, .LCPI46_1@toc@l
934 ; ISEL-NEXT:    isel 3, 3, 4, 1
935 ; ISEL-NEXT:    lfdx 1, 0, 3
936 ; ISEL-NEXT:    blr
938 ; NO_ISEL-LABEL: sel_constants_fdiv_constant:
939 ; NO_ISEL:       # %bb.0:
940 ; NO_ISEL-NEXT:    andi. 3, 3, 1
941 ; NO_ISEL-NEXT:    addis 4, 2, .LCPI46_0@toc@ha
942 ; NO_ISEL-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
943 ; NO_ISEL-NEXT:    addi 4, 4, .LCPI46_0@toc@l
944 ; NO_ISEL-NEXT:    addi 3, 3, .LCPI46_1@toc@l
945 ; NO_ISEL-NEXT:    bc 12, 1, .LBB46_2
946 ; NO_ISEL-NEXT:  # %bb.1:
947 ; NO_ISEL-NEXT:    ori 3, 4, 0
948 ; NO_ISEL-NEXT:    b .LBB46_2
949 ; NO_ISEL-NEXT:  .LBB46_2:
950 ; NO_ISEL-NEXT:    lfdx 1, 0, 3
951 ; NO_ISEL-NEXT:    blr
952   %sel = select i1 %cond, double -4.0, double 23.3
953   %bo = fdiv double %sel, 5.1
954   ret double %bo
957 define double @fdiv_constant_sel_constants(i1 %cond) {
958 ; ISEL-LABEL: fdiv_constant_sel_constants:
959 ; ISEL:       # %bb.0:
960 ; ISEL-NEXT:    andi. 3, 3, 1
961 ; ISEL-NEXT:    addis 4, 2, .LCPI47_0@toc@ha
962 ; ISEL-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
963 ; ISEL-NEXT:    addi 4, 4, .LCPI47_0@toc@l
964 ; ISEL-NEXT:    addi 3, 3, .LCPI47_1@toc@l
965 ; ISEL-NEXT:    isel 3, 3, 4, 1
966 ; ISEL-NEXT:    lfdx 1, 0, 3
967 ; ISEL-NEXT:    blr
969 ; NO_ISEL-LABEL: fdiv_constant_sel_constants:
970 ; NO_ISEL:       # %bb.0:
971 ; NO_ISEL-NEXT:    andi. 3, 3, 1
972 ; NO_ISEL-NEXT:    addis 4, 2, .LCPI47_0@toc@ha
973 ; NO_ISEL-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
974 ; NO_ISEL-NEXT:    addi 4, 4, .LCPI47_0@toc@l
975 ; NO_ISEL-NEXT:    addi 3, 3, .LCPI47_1@toc@l
976 ; NO_ISEL-NEXT:    bc 12, 1, .LBB47_2
977 ; NO_ISEL-NEXT:  # %bb.1:
978 ; NO_ISEL-NEXT:    ori 3, 4, 0
979 ; NO_ISEL-NEXT:    b .LBB47_2
980 ; NO_ISEL-NEXT:  .LBB47_2:
981 ; NO_ISEL-NEXT:    lfdx 1, 0, 3
982 ; NO_ISEL-NEXT:    blr
983   %sel = select i1 %cond, double -4.0, double 23.3
984   %bo = fdiv double 5.1, %sel
985   ret double %bo
988 define double @sel_constants_frem_constant(i1 %cond) {
989 ; ALL-LABEL: sel_constants_frem_constant:
990 ; ALL:       # %bb.0:
991 ; ALL-NEXT:    andi. 3, 3, 1
992 ; ALL-NEXT:    bc 12, 1, .LBB48_2
993 ; ALL-NEXT:  # %bb.1:
994 ; ALL-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
995 ; ALL-NEXT:    lfd 1, .LCPI48_0@toc@l(3)
996 ; ALL-NEXT:    blr
997 ; ALL-NEXT:  .LBB48_2:
998 ; ALL-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
999 ; ALL-NEXT:    lfs 1, .LCPI48_1@toc@l(3)
1000 ; ALL-NEXT:    blr
1001   %sel = select i1 %cond, double -4.0, double 23.3
1002   %bo = frem double %sel, 5.1
1003   ret double %bo
1006 define double @frem_constant_sel_constants(i1 %cond) {
1007 ; ISEL-LABEL: frem_constant_sel_constants:
1008 ; ISEL:       # %bb.0:
1009 ; ISEL-NEXT:    andi. 3, 3, 1
1010 ; ISEL-NEXT:    addis 4, 2, .LCPI49_0@toc@ha
1011 ; ISEL-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
1012 ; ISEL-NEXT:    addi 4, 4, .LCPI49_0@toc@l
1013 ; ISEL-NEXT:    addi 3, 3, .LCPI49_1@toc@l
1014 ; ISEL-NEXT:    isel 3, 3, 4, 1
1015 ; ISEL-NEXT:    lfdx 1, 0, 3
1016 ; ISEL-NEXT:    blr
1018 ; NO_ISEL-LABEL: frem_constant_sel_constants:
1019 ; NO_ISEL:       # %bb.0:
1020 ; NO_ISEL-NEXT:    andi. 3, 3, 1
1021 ; NO_ISEL-NEXT:    addis 4, 2, .LCPI49_0@toc@ha
1022 ; NO_ISEL-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
1023 ; NO_ISEL-NEXT:    addi 4, 4, .LCPI49_0@toc@l
1024 ; NO_ISEL-NEXT:    addi 3, 3, .LCPI49_1@toc@l
1025 ; NO_ISEL-NEXT:    bc 12, 1, .LBB49_2
1026 ; NO_ISEL-NEXT:  # %bb.1:
1027 ; NO_ISEL-NEXT:    ori 3, 4, 0
1028 ; NO_ISEL-NEXT:    b .LBB49_2
1029 ; NO_ISEL-NEXT:  .LBB49_2:
1030 ; NO_ISEL-NEXT:    lfdx 1, 0, 3
1031 ; NO_ISEL-NEXT:    blr
1032   %sel = select i1 %cond, double -4.0, double 23.3
1033   %bo = frem double 5.1, %sel
1034   ret double %bo