@@ -301,26 +301,44 @@ define <4 x float> @v4f32_minimum(<4 x float> %a, <4 x float> %b) {
301
301
; VSX-NEXT: xvcmpeqsp 1, 35, 35
302
302
; VSX-NEXT: xvcmpeqsp 2, 34, 34
303
303
; VSX-NEXT: addis 3, 2, .LCPI4_0@toc@ha
304
+ ; VSX-NEXT: xxleqv 36, 36, 36
305
+ ; VSX-NEXT: xvminsp 0, 34, 35
306
+ ; VSX-NEXT: vslw 4, 4, 4
304
307
; VSX-NEXT: addi 3, 3, .LCPI4_0@toc@l
305
308
; VSX-NEXT: xxlnor 1, 1, 1
306
309
; VSX-NEXT: xxlnor 2, 2, 2
307
- ; VSX-NEXT: xvminsp 0, 34, 35
310
+ ; VSX-NEXT: vcmpequw 5, 2, 4
308
311
; VSX-NEXT: xxlor 1, 2, 1
309
312
; VSX-NEXT: lxvd2x 2, 0, 3
310
- ; VSX-NEXT: xxsel 34, 0, 2, 1
313
+ ; VSX-NEXT: xxsel 0, 0, 2, 1
314
+ ; VSX-NEXT: xxlxor 2, 2, 2
315
+ ; VSX-NEXT: xvcmpeqsp 2, 0, 2
316
+ ; VSX-NEXT: xxsel 1, 0, 34, 37
317
+ ; VSX-NEXT: vcmpequw 2, 3, 4
318
+ ; VSX-NEXT: xxsel 1, 1, 35, 34
319
+ ; VSX-NEXT: xxsel 34, 0, 1, 2
311
320
; VSX-NEXT: blr
312
321
;
313
322
; AIX-LABEL: v4f32_minimum:
314
323
; AIX: # %bb.0: # %entry
315
324
; AIX-NEXT: xvcmpeqsp 1, 35, 35
316
325
; AIX-NEXT: xvcmpeqsp 2, 34, 34
317
326
; AIX-NEXT: ld 3, L..C4(2) # %const.0
327
+ ; AIX-NEXT: xxleqv 36, 36, 36
318
328
; AIX-NEXT: xvminsp 0, 34, 35
329
+ ; AIX-NEXT: vslw 4, 4, 4
319
330
; AIX-NEXT: xxlnor 1, 1, 1
320
331
; AIX-NEXT: xxlnor 2, 2, 2
332
+ ; AIX-NEXT: vcmpequw 5, 2, 4
321
333
; AIX-NEXT: xxlor 1, 2, 1
322
334
; AIX-NEXT: lxvw4x 2, 0, 3
323
- ; AIX-NEXT: xxsel 34, 0, 2, 1
335
+ ; AIX-NEXT: xxsel 0, 0, 2, 1
336
+ ; AIX-NEXT: xxlxor 2, 2, 2
337
+ ; AIX-NEXT: xvcmpeqsp 2, 0, 2
338
+ ; AIX-NEXT: xxsel 1, 0, 34, 37
339
+ ; AIX-NEXT: vcmpequw 2, 3, 4
340
+ ; AIX-NEXT: xxsel 1, 1, 35, 34
341
+ ; AIX-NEXT: xxsel 34, 0, 1, 2
324
342
; AIX-NEXT: blr
325
343
entry:
326
344
%m = call <4 x float > @llvm.minimum.v4f32 (<4 x float > %a , <4 x float > %b )
@@ -359,9 +377,16 @@ define <4 x float> @v4f32_maximum(<4 x float> %a, <4 x float> %b) {
359
377
; VSX-NEXT: xxlnor 1, 1, 1
360
378
; VSX-NEXT: xxlnor 2, 2, 2
361
379
; VSX-NEXT: xvmaxsp 0, 34, 35
380
+ ; VSX-NEXT: xxlxor 36, 36, 36
381
+ ; VSX-NEXT: vcmpequw 5, 2, 4
362
382
; VSX-NEXT: xxlor 1, 2, 1
363
383
; VSX-NEXT: lxvd2x 2, 0, 3
364
- ; VSX-NEXT: xxsel 34, 0, 2, 1
384
+ ; VSX-NEXT: xxsel 0, 0, 2, 1
385
+ ; VSX-NEXT: xvcmpeqsp 2, 0, 36
386
+ ; VSX-NEXT: xxsel 1, 0, 34, 37
387
+ ; VSX-NEXT: vcmpequw 2, 3, 4
388
+ ; VSX-NEXT: xxsel 1, 1, 35, 34
389
+ ; VSX-NEXT: xxsel 34, 0, 1, 2
365
390
; VSX-NEXT: blr
366
391
;
367
392
; AIX-LABEL: v4f32_maximum:
@@ -370,11 +395,18 @@ define <4 x float> @v4f32_maximum(<4 x float> %a, <4 x float> %b) {
370
395
; AIX-NEXT: xvcmpeqsp 2, 34, 34
371
396
; AIX-NEXT: ld 3, L..C5(2) # %const.0
372
397
; AIX-NEXT: xvmaxsp 0, 34, 35
398
+ ; AIX-NEXT: xxlxor 36, 36, 36
373
399
; AIX-NEXT: xxlnor 1, 1, 1
374
400
; AIX-NEXT: xxlnor 2, 2, 2
401
+ ; AIX-NEXT: vcmpequw 5, 2, 4
375
402
; AIX-NEXT: xxlor 1, 2, 1
376
403
; AIX-NEXT: lxvw4x 2, 0, 3
377
- ; AIX-NEXT: xxsel 34, 0, 2, 1
404
+ ; AIX-NEXT: xxsel 0, 0, 2, 1
405
+ ; AIX-NEXT: xvcmpeqsp 2, 0, 36
406
+ ; AIX-NEXT: xxsel 1, 0, 34, 37
407
+ ; AIX-NEXT: vcmpequw 2, 3, 4
408
+ ; AIX-NEXT: xxsel 1, 1, 35, 34
409
+ ; AIX-NEXT: xxsel 34, 0, 1, 2
378
410
; AIX-NEXT: blr
379
411
entry:
380
412
%m = call <4 x float > @llvm.maximum.v4f32 (<4 x float > %a , <4 x float > %b )
@@ -461,28 +493,47 @@ define <2 x double> @v2f64_minimum(<2 x double> %a, <2 x double> %b) {
461
493
; VSX-LABEL: v2f64_minimum:
462
494
; VSX: # %bb.0: # %entry
463
495
; VSX-NEXT: addis 3, 2, .LCPI6_0@toc@ha
464
- ; VSX-NEXT: xvmindp 0, 34 , 35
465
- ; VSX-NEXT: xvcmpeqdp 35, 35, 35
496
+ ; VSX-NEXT: xvcmpeqdp 36, 35 , 35
497
+ ; VSX-NEXT: xvcmpeqdp 37, 34, 34
466
498
; VSX-NEXT: addi 3, 3, .LCPI6_0@toc@l
467
- ; VSX-NEXT: xvcmpeqdp 34, 34, 34
468
- ; VSX-NEXT: xxlnor 35, 35, 35
469
- ; VSX-NEXT: xxlnor 34 , 34, 34
499
+ ; VSX-NEXT: xxlnor 36, 36, 36
500
+ ; VSX-NEXT: xxlnor 37, 37, 37
501
+ ; VSX-NEXT: xvmindp 0 , 34, 35
470
502
; VSX-NEXT: lxvd2x 2, 0, 3
471
- ; VSX-NEXT: xxlor 1, 34, 35
472
- ; VSX-NEXT: xxsel 34, 0, 2, 1
503
+ ; VSX-NEXT: addis 3, 2, .LCPI6_1@toc@ha
504
+ ; VSX-NEXT: xxlor 1, 37, 36
505
+ ; VSX-NEXT: addi 3, 3, .LCPI6_1@toc@l
506
+ ; VSX-NEXT: lxvd2x 36, 0, 3
507
+ ; VSX-NEXT: vcmpequd 5, 2, 4
508
+ ; VSX-NEXT: xxsel 0, 0, 2, 1
509
+ ; VSX-NEXT: xxlxor 2, 2, 2
510
+ ; VSX-NEXT: xxsel 1, 0, 34, 37
511
+ ; VSX-NEXT: vcmpequd 2, 3, 4
512
+ ; VSX-NEXT: xxsel 1, 1, 35, 34
513
+ ; VSX-NEXT: xvcmpeqdp 34, 0, 2
514
+ ; VSX-NEXT: xxsel 34, 0, 1, 34
473
515
; VSX-NEXT: blr
474
516
;
475
517
; AIX-LABEL: v2f64_minimum:
476
518
; AIX: # %bb.0: # %entry
477
519
; AIX-NEXT: ld 3, L..C6(2) # %const.0
478
- ; AIX-NEXT: xvmindp 0, 34 , 35
479
- ; AIX-NEXT: xvcmpeqdp 35, 35, 35
520
+ ; AIX-NEXT: xvcmpeqdp 36, 35 , 35
521
+ ; AIX-NEXT: xvcmpeqdp 37, 34, 34
480
522
; AIX-NEXT: lxvd2x 2, 0, 3
481
- ; AIX-NEXT: xvcmpeqdp 34, 34, 34
482
- ; AIX-NEXT: xxlnor 35, 35, 35
483
- ; AIX-NEXT: xxlnor 34, 34, 34
484
- ; AIX-NEXT: xxlor 1, 34, 35
485
- ; AIX-NEXT: xxsel 34, 0, 2, 1
523
+ ; AIX-NEXT: ld 3, L..C7(2) # %const.1
524
+ ; AIX-NEXT: xxlnor 36, 36, 36
525
+ ; AIX-NEXT: xxlnor 37, 37, 37
526
+ ; AIX-NEXT: xvmindp 0, 34, 35
527
+ ; AIX-NEXT: xxlor 1, 37, 36
528
+ ; AIX-NEXT: lxvd2x 36, 0, 3
529
+ ; AIX-NEXT: vcmpequd 5, 2, 4
530
+ ; AIX-NEXT: xxsel 0, 0, 2, 1
531
+ ; AIX-NEXT: xxlxor 2, 2, 2
532
+ ; AIX-NEXT: xxsel 1, 0, 34, 37
533
+ ; AIX-NEXT: vcmpequd 2, 3, 4
534
+ ; AIX-NEXT: xxsel 1, 1, 35, 34
535
+ ; AIX-NEXT: xvcmpeqdp 34, 0, 2
536
+ ; AIX-NEXT: xxsel 34, 0, 1, 34
486
537
; AIX-NEXT: blr
487
538
entry:
488
539
%m = call <2 x double > @llvm.minimum.v2f64 (<2 x double > %a , <2 x double > %b )
@@ -567,28 +618,42 @@ define <2 x double> @v2f64_maximum(<2 x double> %a, <2 x double> %b) {
567
618
; VSX-LABEL: v2f64_maximum:
568
619
; VSX: # %bb.0: # %entry
569
620
; VSX-NEXT: addis 3, 2, .LCPI7_0@toc@ha
570
- ; VSX-NEXT: xvmaxdp 0, 34 , 35
571
- ; VSX-NEXT: xvcmpeqdp 35, 35, 35
621
+ ; VSX-NEXT: xvcmpeqdp 36, 35 , 35
622
+ ; VSX-NEXT: xvcmpeqdp 37, 34, 34
572
623
; VSX-NEXT: addi 3, 3, .LCPI7_0@toc@l
573
- ; VSX-NEXT: xvcmpeqdp 34, 34, 34
574
- ; VSX-NEXT: xxlnor 35, 35, 35
575
- ; VSX-NEXT: xxlnor 34 , 34, 34
624
+ ; VSX-NEXT: xxlnor 36, 36, 36
625
+ ; VSX-NEXT: xxlnor 37, 37, 37
626
+ ; VSX-NEXT: xvmaxdp 0 , 34, 35
576
627
; VSX-NEXT: lxvd2x 2, 0, 3
577
- ; VSX-NEXT: xxlor 1, 34, 35
578
- ; VSX-NEXT: xxsel 34, 0, 2, 1
628
+ ; VSX-NEXT: xxlor 1, 37, 36
629
+ ; VSX-NEXT: xxlxor 36, 36, 36
630
+ ; VSX-NEXT: vcmpequd 5, 2, 4
631
+ ; VSX-NEXT: xxsel 0, 0, 2, 1
632
+ ; VSX-NEXT: xxsel 1, 0, 34, 37
633
+ ; VSX-NEXT: vcmpequd 2, 3, 4
634
+ ; VSX-NEXT: xxsel 1, 1, 35, 34
635
+ ; VSX-NEXT: xvcmpeqdp 34, 0, 36
636
+ ; VSX-NEXT: xxsel 34, 0, 1, 34
579
637
; VSX-NEXT: blr
580
638
;
581
639
; AIX-LABEL: v2f64_maximum:
582
640
; AIX: # %bb.0: # %entry
583
- ; AIX-NEXT: ld 3, L..C7 (2) # %const.0
584
- ; AIX-NEXT: xvmaxdp 0, 34 , 35
585
- ; AIX-NEXT: xvcmpeqdp 35, 35, 35
641
+ ; AIX-NEXT: ld 3, L..C8 (2) # %const.0
642
+ ; AIX-NEXT: xvcmpeqdp 36, 35 , 35
643
+ ; AIX-NEXT: xvcmpeqdp 37, 34, 34
586
644
; AIX-NEXT: lxvd2x 2, 0, 3
587
- ; AIX-NEXT: xvcmpeqdp 34, 34, 34
588
- ; AIX-NEXT: xxlnor 35, 35, 35
589
- ; AIX-NEXT: xxlnor 34, 34, 34
590
- ; AIX-NEXT: xxlor 1, 34, 35
591
- ; AIX-NEXT: xxsel 34, 0, 2, 1
645
+ ; AIX-NEXT: xxlnor 36, 36, 36
646
+ ; AIX-NEXT: xxlnor 37, 37, 37
647
+ ; AIX-NEXT: xvmaxdp 0, 34, 35
648
+ ; AIX-NEXT: xxlor 1, 37, 36
649
+ ; AIX-NEXT: xxlxor 36, 36, 36
650
+ ; AIX-NEXT: vcmpequd 5, 2, 4
651
+ ; AIX-NEXT: xxsel 0, 0, 2, 1
652
+ ; AIX-NEXT: xxsel 1, 0, 34, 37
653
+ ; AIX-NEXT: vcmpequd 2, 3, 4
654
+ ; AIX-NEXT: xxsel 1, 1, 35, 34
655
+ ; AIX-NEXT: xvcmpeqdp 34, 0, 36
656
+ ; AIX-NEXT: xxsel 34, 0, 1, 34
592
657
; AIX-NEXT: blr
593
658
entry:
594
659
%m = call <2 x double > @llvm.maximum.v2f64 (<2 x double > %a , <2 x double > %b )
0 commit comments