1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64 -enable-no-nans-fp-math -enable-no-signed-zeros-fp-math -mattr=+avx512f | FileCheck %s --check-prefix=CHECK_UNSAFE 3; RUN: llc < %s -mtriple=x86_64 -enable-no-nans-fp-math -mattr=+avx512f | FileCheck %s 4; RUN: llc < %s -mtriple=x86_64 -enable-no-signed-zeros-fp-math -mattr=+avx512f | FileCheck %s 5; RUN: llc < %s -mtriple=x86_64 -enable-unsafe-fp-math -mattr=+avx512f | FileCheck %s 6; RUN: llc < %s -mtriple=x86_64 -mattr=+avx512f | FileCheck %s 7 8define <16 x float> @test_max_v16f32(<16 x float> * %a_ptr, <16 x float> %b) { 9; CHECK_UNSAFE-LABEL: test_max_v16f32: 10; CHECK_UNSAFE: # %bb.0: 11; CHECK_UNSAFE-NEXT: vmaxps (%rdi), %zmm0, %zmm0 12; CHECK_UNSAFE-NEXT: retq 13; 14; CHECK-LABEL: test_max_v16f32: 15; CHECK: # %bb.0: 16; CHECK-NEXT: vmovaps (%rdi), %zmm1 17; CHECK-NEXT: vmaxps %zmm0, %zmm1, %zmm0 18; CHECK-NEXT: retq 19 %a = load <16 x float>, <16 x float>* %a_ptr 20 %tmp = fcmp fast ogt <16 x float> %a, %b 21 %tmp4 = select <16 x i1> %tmp, <16 x float> %a, <16 x float> %b 22 ret <16 x float> %tmp4; 23} 24 25define <16 x float> @test_min_v16f32(<16 x float>* %a_ptr, <16 x float> %b) { 26; CHECK_UNSAFE-LABEL: test_min_v16f32: 27; CHECK_UNSAFE: # %bb.0: 28; CHECK_UNSAFE-NEXT: vminps (%rdi), %zmm0, %zmm0 29; CHECK_UNSAFE-NEXT: retq 30; 31; CHECK-LABEL: test_min_v16f32: 32; CHECK: # %bb.0: 33; CHECK-NEXT: vmovaps (%rdi), %zmm1 34; CHECK-NEXT: vminps %zmm0, %zmm1, %zmm0 35; CHECK-NEXT: retq 36 %a = load <16 x float>, <16 x float>* %a_ptr 37 %tmp = fcmp fast olt <16 x float> %a, %b 38 %tmp4 = select <16 x i1> %tmp, <16 x float> %a, <16 x float> %b 39 ret <16 x float> %tmp4; 40} 41 42define <8 x double> @test_max_v8f64(<8 x double> * %a_ptr, <8 x double> %b) { 43; CHECK_UNSAFE-LABEL: test_max_v8f64: 44; CHECK_UNSAFE: # %bb.0: 45; CHECK_UNSAFE-NEXT: vmaxpd (%rdi), %zmm0, %zmm0 46; CHECK_UNSAFE-NEXT: retq 47; 48; CHECK-LABEL: test_max_v8f64: 49; CHECK: # %bb.0: 50; CHECK-NEXT: vmovapd (%rdi), %zmm1 51; CHECK-NEXT: vmaxpd %zmm0, %zmm1, %zmm0 52; CHECK-NEXT: retq 53 %a = load <8 x double>, <8 x double>* %a_ptr 54 %tmp = fcmp fast ogt <8 x double> %a, %b 55 %tmp4 = select <8 x i1> %tmp, <8 x double> %a, <8 x double> %b 56 ret <8 x double> %tmp4; 57} 58 59define <8 x double> @test_min_v8f64(<8 x double>* %a_ptr, <8 x double> %b) { 60; CHECK_UNSAFE-LABEL: test_min_v8f64: 61; CHECK_UNSAFE: # %bb.0: 62; CHECK_UNSAFE-NEXT: vminpd (%rdi), %zmm0, %zmm0 63; CHECK_UNSAFE-NEXT: retq 64; 65; CHECK-LABEL: test_min_v8f64: 66; CHECK: # %bb.0: 67; CHECK-NEXT: vmovapd (%rdi), %zmm1 68; CHECK-NEXT: vminpd %zmm0, %zmm1, %zmm0 69; CHECK-NEXT: retq 70 %a = load <8 x double>, <8 x double>* %a_ptr 71 %tmp = fcmp fast olt <8 x double> %a, %b 72 %tmp4 = select <8 x i1> %tmp, <8 x double> %a, <8 x double> %b 73 ret <8 x double> %tmp4; 74} 75 76define float @test_min_f32(float %a, float* %ptr) { 77; CHECK_UNSAFE-LABEL: test_min_f32: 78; CHECK_UNSAFE: # %bb.0: # %entry 79; CHECK_UNSAFE-NEXT: vminss (%rdi), %xmm0, %xmm0 80; CHECK_UNSAFE-NEXT: retq 81; 82; CHECK-LABEL: test_min_f32: 83; CHECK: # %bb.0: # %entry 84; CHECK-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero 85; CHECK-NEXT: vminss %xmm0, %xmm1, %xmm0 86; CHECK-NEXT: retq 87entry: 88 %0 = load float, float* %ptr 89 %1 = fcmp fast olt float %0, %a 90 %2 = select i1 %1, float %0, float %a 91 ret float %2 92} 93 94define double @test_max_f64(double %a, double* %ptr) { 95; CHECK_UNSAFE-LABEL: test_max_f64: 96; CHECK_UNSAFE: # %bb.0: # %entry 97; CHECK_UNSAFE-NEXT: vmaxsd (%rdi), %xmm0, %xmm0 98; CHECK_UNSAFE-NEXT: retq 99; 100; CHECK-LABEL: test_max_f64: 101; CHECK: # %bb.0: # %entry 102; CHECK-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero 103; CHECK-NEXT: vmaxsd %xmm0, %xmm1, %xmm0 104; CHECK-NEXT: retq 105entry: 106 %0 = load double, double* %ptr 107 %1 = fcmp fast ogt double %0, %a 108 %2 = select i1 %1, double %0, double %a 109 ret double %2 110} 111