@@ -469,5 +469,73 @@ define <2 x double> @maxnum_intrinsic_nnan_attr_f64(<2 x double> %a, <2 x double
469
469
ret <2 x double > %r
470
470
}
471
471
472
+ define float @test_maxnum_const_op1 (float %x ) {
473
+ ; SSE-LABEL: test_maxnum_const_op1:
474
+ ; SSE: # %bb.0:
475
+ ; SSE-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
476
+ ; SSE-NEXT: movaps %xmm0, %xmm1
477
+ ; SSE-NEXT: cmpunordss %xmm0, %xmm1
478
+ ; SSE-NEXT: movaps %xmm1, %xmm3
479
+ ; SSE-NEXT: andps %xmm2, %xmm3
480
+ ; SSE-NEXT: maxss %xmm0, %xmm2
481
+ ; SSE-NEXT: andnps %xmm2, %xmm1
482
+ ; SSE-NEXT: orps %xmm3, %xmm1
483
+ ; SSE-NEXT: movaps %xmm1, %xmm0
484
+ ; SSE-NEXT: retq
485
+ ;
486
+ ; AVX1-LABEL: test_maxnum_const_op1:
487
+ ; AVX1: # %bb.0:
488
+ ; AVX1-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
489
+ ; AVX1-NEXT: vmaxss %xmm0, %xmm1, %xmm2
490
+ ; AVX1-NEXT: vcmpunordss %xmm0, %xmm0, %xmm0
491
+ ; AVX1-NEXT: vblendvps %xmm0, %xmm1, %xmm2, %xmm0
492
+ ; AVX1-NEXT: retq
493
+ ;
494
+ ; AVX512-LABEL: test_maxnum_const_op1:
495
+ ; AVX512: # %bb.0:
496
+ ; AVX512-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
497
+ ; AVX512-NEXT: vmaxss %xmm0, %xmm2, %xmm1
498
+ ; AVX512-NEXT: vcmpunordss %xmm0, %xmm0, %k1
499
+ ; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm1 {%k1}
500
+ ; AVX512-NEXT: vmovaps %xmm1, %xmm0
501
+ ; AVX512-NEXT: retq
502
+ %r = call float @llvm.maxnum.f32 (float 1 .0 , float %x )
503
+ ret float %r
504
+ }
505
+
506
+ define float @test_maxnum_const_op2 (float %x ) {
507
+ ; SSE-LABEL: test_maxnum_const_op2:
508
+ ; SSE: # %bb.0:
509
+ ; SSE-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
510
+ ; SSE-NEXT: movaps %xmm0, %xmm1
511
+ ; SSE-NEXT: cmpunordss %xmm0, %xmm1
512
+ ; SSE-NEXT: movaps %xmm1, %xmm3
513
+ ; SSE-NEXT: andps %xmm2, %xmm3
514
+ ; SSE-NEXT: maxss %xmm0, %xmm2
515
+ ; SSE-NEXT: andnps %xmm2, %xmm1
516
+ ; SSE-NEXT: orps %xmm3, %xmm1
517
+ ; SSE-NEXT: movaps %xmm1, %xmm0
518
+ ; SSE-NEXT: retq
519
+ ;
520
+ ; AVX1-LABEL: test_maxnum_const_op2:
521
+ ; AVX1: # %bb.0:
522
+ ; AVX1-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
523
+ ; AVX1-NEXT: vmaxss %xmm0, %xmm1, %xmm2
524
+ ; AVX1-NEXT: vcmpunordss %xmm0, %xmm0, %xmm0
525
+ ; AVX1-NEXT: vblendvps %xmm0, %xmm1, %xmm2, %xmm0
526
+ ; AVX1-NEXT: retq
527
+ ;
528
+ ; AVX512-LABEL: test_maxnum_const_op2:
529
+ ; AVX512: # %bb.0:
530
+ ; AVX512-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
531
+ ; AVX512-NEXT: vmaxss %xmm0, %xmm2, %xmm1
532
+ ; AVX512-NEXT: vcmpunordss %xmm0, %xmm0, %k1
533
+ ; AVX512-NEXT: vmovss %xmm2, %xmm0, %xmm1 {%k1}
534
+ ; AVX512-NEXT: vmovaps %xmm1, %xmm0
535
+ ; AVX512-NEXT: retq
536
+ %r = call float @llvm.maxnum.f32 (float %x , float 1 .0 )
537
+ ret float %r
538
+ }
539
+
472
540
attributes #0 = { "no-nans-fp-math" ="true" }
473
541
0 commit comments