brintos

brintos / llvm-project-archived public Read only

0
0
Text · 98.2 KiB · 06515e4 Raw
2751 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2     | FileCheck %s --check-prefixes=SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx      | FileCheck %s --check-prefixes=AVX,AVX14; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f  | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefixes=AVX,AVX512,AVX512DQ6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx10.2  | FileCheck %s --check-prefixes=AVX10_27; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx        | FileCheck %s --check-prefixes=X868 9declare float @llvm.maximum.f32(float, float)10declare double @llvm.maximum.f64(double, double)11declare float @llvm.minimum.f32(float, float)12declare double @llvm.minimum.f64(double, double)13declare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>)14declare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>)15declare <4 x half> @llvm.maximum.v4f16(<4 x half>, <4 x half>)16declare <4 x bfloat> @llvm.maximum.v4bf16(<4 x bfloat>, <4 x bfloat>)17 18;19; fmaximum20;21 22define float @test_fmaximum(float %x, float %y) nounwind {23; SSE2-LABEL: test_fmaximum:24; SSE2:       # %bb.0:25; SSE2-NEXT:    movdqa %xmm0, %xmm226; SSE2-NEXT:    movd %xmm0, %eax27; SSE2-NEXT:    testl %eax, %eax28; SSE2-NEXT:    movdqa %xmm0, %xmm329; SSE2-NEXT:    js .LBB0_230; SSE2-NEXT:  # %bb.1:31; SSE2-NEXT:    movdqa %xmm1, %xmm332; SSE2-NEXT:  .LBB0_2:33; SSE2-NEXT:    movdqa %xmm3, %xmm034; SSE2-NEXT:    cmpunordss %xmm3, %xmm035; SSE2-NEXT:    movaps %xmm0, %xmm436; SSE2-NEXT:    andps %xmm3, %xmm437; SSE2-NEXT:    js .LBB0_438; SSE2-NEXT:  # %bb.3:39; SSE2-NEXT:    movdqa %xmm2, %xmm140; SSE2-NEXT:  .LBB0_4:41; SSE2-NEXT:    maxss %xmm1, %xmm342; SSE2-NEXT:    andnps %xmm3, %xmm043; SSE2-NEXT:    orps %xmm4, %xmm044; SSE2-NEXT:    retq45;46; AVX1-LABEL: test_fmaximum:47; AVX1:       # %bb.0:48; AVX1-NEXT:    vmovd %xmm0, %eax49; AVX1-NEXT:    testl %eax, %eax50; AVX1-NEXT:    js .LBB0_151; AVX1-NEXT:  # %bb.2:52; AVX1-NEXT:    vmovdqa %xmm0, %xmm253; AVX1-NEXT:    jmp .LBB0_354; AVX1-NEXT:  .LBB0_1:55; AVX1-NEXT:    vmovdqa %xmm1, %xmm256; AVX1-NEXT:    vmovdqa %xmm0, %xmm157; AVX1-NEXT:  .LBB0_3:58; AVX1-NEXT:    vmaxss %xmm2, %xmm1, %xmm059; AVX1-NEXT:    vcmpunordss %xmm1, %xmm1, %xmm260; AVX1-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm061; AVX1-NEXT:    retq62;63; AVX512-LABEL: test_fmaximum:64; AVX512:       # %bb.0:65; AVX512-NEXT:    vmovd %xmm0, %eax66; AVX512-NEXT:    testl %eax, %eax67; AVX512-NEXT:    sets %al68; AVX512-NEXT:    kmovw %eax, %k169; AVX512-NEXT:    vmovdqa %xmm0, %xmm270; AVX512-NEXT:    vmovss %xmm1, %xmm2, %xmm2 {%k1}71; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}72; AVX512-NEXT:    vmaxss %xmm2, %xmm1, %xmm073; AVX512-NEXT:    vcmpunordss %xmm1, %xmm1, %k174; AVX512-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}75; AVX512-NEXT:    retq76;77; AVX10_2-LABEL: test_fmaximum:78; AVX10_2:       # %bb.0:79; AVX10_2-NEXT:    vminmaxss $1, %xmm1, %xmm080; AVX10_2-NEXT:    retq81;82; X86-LABEL: test_fmaximum:83; X86:       # %bb.0:84; X86-NEXT:    pushl %eax85; X86-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero86; X86-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero87; X86-NEXT:    vmovd %xmm2, %eax88; X86-NEXT:    testl %eax, %eax89; X86-NEXT:    js .LBB0_190; X86-NEXT:  # %bb.2:91; X86-NEXT:    vmovdqa %xmm2, %xmm192; X86-NEXT:    jmp .LBB0_393; X86-NEXT:  .LBB0_1:94; X86-NEXT:    vmovdqa %xmm0, %xmm195; X86-NEXT:    vmovdqa %xmm2, %xmm096; X86-NEXT:  .LBB0_3:97; X86-NEXT:    vmaxss %xmm1, %xmm0, %xmm198; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm299; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0100; X86-NEXT:    vmovss %xmm0, (%esp)101; X86-NEXT:    flds (%esp)102; X86-NEXT:    popl %eax103; X86-NEXT:    retl104  %1 = tail call float @llvm.maximum.f32(float %x, float %y)105  ret float %1106}107 108define <4 x float> @test_fmaximum_scalarize(<4 x float> %x, <4 x float> %y) "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" {109; SSE2-LABEL: test_fmaximum_scalarize:110; SSE2:       # %bb.0:111; SSE2-NEXT:    maxps %xmm1, %xmm0112; SSE2-NEXT:    retq113;114; AVX-LABEL: test_fmaximum_scalarize:115; AVX:       # %bb.0:116; AVX-NEXT:    vmaxps %xmm1, %xmm0, %xmm0117; AVX-NEXT:    retq118;119; AVX10_2-LABEL: test_fmaximum_scalarize:120; AVX10_2:       # %bb.0:121; AVX10_2-NEXT:    vminmaxps $1, %xmm1, %xmm0, %xmm0122; AVX10_2-NEXT:    retq123;124; X86-LABEL: test_fmaximum_scalarize:125; X86:       # %bb.0:126; X86-NEXT:    vmaxps %xmm1, %xmm0, %xmm0127; X86-NEXT:    retl128  %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> %y)129  ret <4 x float> %r130}131 132define float @test_fmaximum_nan0(float %x, float %y) {133; SSE2-LABEL: test_fmaximum_nan0:134; SSE2:       # %bb.0:135; SSE2-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]136; SSE2-NEXT:    retq137;138; AVX-LABEL: test_fmaximum_nan0:139; AVX:       # %bb.0:140; AVX-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]141; AVX-NEXT:    retq142;143; AVX10_2-LABEL: test_fmaximum_nan0:144; AVX10_2:       # %bb.0:145; AVX10_2-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]146; AVX10_2-NEXT:    retq147;148; X86-LABEL: test_fmaximum_nan0:149; X86:       # %bb.0:150; X86-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}151; X86-NEXT:    retl152  %1 = tail call float @llvm.maximum.f32(float 0x7fff000000000000, float %y)153  ret float %1154}155 156define float @test_fmaximum_nan1(float %x, float %y) {157; SSE2-LABEL: test_fmaximum_nan1:158; SSE2:       # %bb.0:159; SSE2-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]160; SSE2-NEXT:    retq161;162; AVX-LABEL: test_fmaximum_nan1:163; AVX:       # %bb.0:164; AVX-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]165; AVX-NEXT:    retq166;167; AVX10_2-LABEL: test_fmaximum_nan1:168; AVX10_2:       # %bb.0:169; AVX10_2-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]170; AVX10_2-NEXT:    retq171;172; X86-LABEL: test_fmaximum_nan1:173; X86:       # %bb.0:174; X86-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}175; X86-NEXT:    retl176  %1 = tail call float @llvm.maximum.f32(float %x, float 0x7fff000000000000)177  ret float %1178}179 180define float @test_fmaximum_nnan(float %x, float %y) nounwind {181; SSE2-LABEL: test_fmaximum_nnan:182; SSE2:       # %bb.0:183; SSE2-NEXT:    movaps %xmm0, %xmm2184; SSE2-NEXT:    addss %xmm1, %xmm2185; SSE2-NEXT:    subss %xmm1, %xmm0186; SSE2-NEXT:    movd %xmm2, %eax187; SSE2-NEXT:    testl %eax, %eax188; SSE2-NEXT:    js .LBB4_1189; SSE2-NEXT:  # %bb.2:190; SSE2-NEXT:    maxss %xmm2, %xmm0191; SSE2-NEXT:    retq192; SSE2-NEXT:  .LBB4_1:193; SSE2-NEXT:    movaps %xmm0, %xmm1194; SSE2-NEXT:    movaps %xmm2, %xmm0195; SSE2-NEXT:    maxss %xmm1, %xmm0196; SSE2-NEXT:    retq197;198; AVX1-LABEL: test_fmaximum_nnan:199; AVX1:       # %bb.0:200; AVX1-NEXT:    vaddss %xmm1, %xmm0, %xmm2201; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm0202; AVX1-NEXT:    vmovd %xmm2, %eax203; AVX1-NEXT:    testl %eax, %eax204; AVX1-NEXT:    js .LBB4_1205; AVX1-NEXT:  # %bb.2:206; AVX1-NEXT:    vmaxss %xmm2, %xmm0, %xmm0207; AVX1-NEXT:    retq208; AVX1-NEXT:  .LBB4_1:209; AVX1-NEXT:    vmovaps %xmm0, %xmm1210; AVX1-NEXT:    vmaxss %xmm1, %xmm2, %xmm0211; AVX1-NEXT:    retq212;213; AVX512F-LABEL: test_fmaximum_nnan:214; AVX512F:       # %bb.0:215; AVX512F-NEXT:    vaddss %xmm1, %xmm0, %xmm2216; AVX512F-NEXT:    vsubss %xmm1, %xmm0, %xmm0217; AVX512F-NEXT:    vmovd %xmm2, %eax218; AVX512F-NEXT:    testl %eax, %eax219; AVX512F-NEXT:    sets %al220; AVX512F-NEXT:    kmovw %eax, %k1221; AVX512F-NEXT:    vmovaps %xmm2, %xmm1222; AVX512F-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}223; AVX512F-NEXT:    vmovss %xmm2, %xmm0, %xmm0 {%k1}224; AVX512F-NEXT:    vmaxss %xmm1, %xmm0, %xmm0225; AVX512F-NEXT:    retq226;227; AVX512DQ-LABEL: test_fmaximum_nnan:228; AVX512DQ:       # %bb.0:229; AVX512DQ-NEXT:    vaddss %xmm1, %xmm0, %xmm2230; AVX512DQ-NEXT:    vsubss %xmm1, %xmm0, %xmm0231; AVX512DQ-NEXT:    vfpclassss $3, %xmm0, %k0 # k0 = isQuietNaN(xmm0) | isPositiveZero(xmm0)232; AVX512DQ-NEXT:    kmovw %k0, %k1233; AVX512DQ-NEXT:    vmovaps %xmm2, %xmm1234; AVX512DQ-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}235; AVX512DQ-NEXT:    vmovss %xmm2, %xmm0, %xmm0 {%k1}236; AVX512DQ-NEXT:    vmaxss %xmm1, %xmm0, %xmm0237; AVX512DQ-NEXT:    retq238;239; AVX10_2-LABEL: test_fmaximum_nnan:240; AVX10_2:       # %bb.0:241; AVX10_2-NEXT:    vaddss %xmm1, %xmm0, %xmm2242; AVX10_2-NEXT:    vsubss %xmm1, %xmm0, %xmm0243; AVX10_2-NEXT:    vminmaxss $1, %xmm0, %xmm2244; AVX10_2-NEXT:    retq245;246; X86-LABEL: test_fmaximum_nnan:247; X86:       # %bb.0:248; X86-NEXT:    pushl %eax249; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero250; X86-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero251; X86-NEXT:    vaddss %xmm0, %xmm2, %xmm1252; X86-NEXT:    vsubss %xmm0, %xmm2, %xmm0253; X86-NEXT:    vmovd %xmm1, %eax254; X86-NEXT:    testl %eax, %eax255; X86-NEXT:    js .LBB4_1256; X86-NEXT:  # %bb.2:257; X86-NEXT:    vmovaps %xmm1, %xmm2258; X86-NEXT:    jmp .LBB4_3259; X86-NEXT:  .LBB4_1:260; X86-NEXT:    vmovaps %xmm0, %xmm2261; X86-NEXT:    vmovaps %xmm1, %xmm0262; X86-NEXT:  .LBB4_3:263; X86-NEXT:    vmaxss %xmm2, %xmm0, %xmm0264; X86-NEXT:    vmovss %xmm0, (%esp)265; X86-NEXT:    flds (%esp)266; X86-NEXT:    popl %eax267; X86-NEXT:    retl268  %1 = fadd nnan float %x, %y269  %2 = fsub nnan float %x, %y270  %3 = tail call float @llvm.maximum.f32(float %1, float %2)271  ret float %3272}273 274define double @test_fmaximum_zero0(double %x, double %y) nounwind {275; SSE2-LABEL: test_fmaximum_zero0:276; SSE2:       # %bb.0:277; SSE2-NEXT:    movapd %xmm1, %xmm0278; SSE2-NEXT:    cmpunordsd %xmm1, %xmm0279; SSE2-NEXT:    movapd %xmm0, %xmm2280; SSE2-NEXT:    andpd %xmm1, %xmm2281; SSE2-NEXT:    xorpd %xmm3, %xmm3282; SSE2-NEXT:    maxsd %xmm3, %xmm1283; SSE2-NEXT:    andnpd %xmm1, %xmm0284; SSE2-NEXT:    orpd %xmm2, %xmm0285; SSE2-NEXT:    retq286;287; AVX1-LABEL: test_fmaximum_zero0:288; AVX1:       # %bb.0:289; AVX1-NEXT:    vxorpd %xmm0, %xmm0, %xmm0290; AVX1-NEXT:    vmaxsd %xmm0, %xmm1, %xmm0291; AVX1-NEXT:    vcmpunordsd %xmm1, %xmm1, %xmm2292; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0293; AVX1-NEXT:    retq294;295; AVX512-LABEL: test_fmaximum_zero0:296; AVX512:       # %bb.0:297; AVX512-NEXT:    vxorpd %xmm0, %xmm0, %xmm0298; AVX512-NEXT:    vmaxsd %xmm0, %xmm1, %xmm0299; AVX512-NEXT:    vcmpunordsd %xmm1, %xmm1, %k1300; AVX512-NEXT:    vmovsd %xmm1, %xmm0, %xmm0 {%k1}301; AVX512-NEXT:    retq302;303; AVX10_2-LABEL: test_fmaximum_zero0:304; AVX10_2:       # %bb.0:305; AVX10_2-NEXT:    vxorpd %xmm0, %xmm0, %xmm0306; AVX10_2-NEXT:    vminmaxsd $1, %xmm0, %xmm1307; AVX10_2-NEXT:    retq308;309; X86-LABEL: test_fmaximum_zero0:310; X86:       # %bb.0:311; X86-NEXT:    pushl %ebp312; X86-NEXT:    movl %esp, %ebp313; X86-NEXT:    andl $-8, %esp314; X86-NEXT:    subl $8, %esp315; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero316; X86-NEXT:    vxorpd %xmm1, %xmm1, %xmm1317; X86-NEXT:    vmaxsd %xmm1, %xmm0, %xmm1318; X86-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm2319; X86-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0320; X86-NEXT:    vmovlpd %xmm0, (%esp)321; X86-NEXT:    fldl (%esp)322; X86-NEXT:    movl %ebp, %esp323; X86-NEXT:    popl %ebp324; X86-NEXT:    retl325  %1 = tail call double @llvm.maximum.f64(double 0.0, double %y)326  ret double %1327}328 329define double @test_fmaximum_zero1(double %x, double %y) nounwind {330; SSE2-LABEL: test_fmaximum_zero1:331; SSE2:       # %bb.0:332; SSE2-NEXT:    movapd %xmm0, %xmm1333; SSE2-NEXT:    cmpunordsd %xmm0, %xmm1334; SSE2-NEXT:    movapd %xmm1, %xmm2335; SSE2-NEXT:    andpd %xmm0, %xmm2336; SSE2-NEXT:    xorpd %xmm3, %xmm3337; SSE2-NEXT:    maxsd %xmm3, %xmm0338; SSE2-NEXT:    andnpd %xmm0, %xmm1339; SSE2-NEXT:    orpd %xmm2, %xmm1340; SSE2-NEXT:    movapd %xmm1, %xmm0341; SSE2-NEXT:    retq342;343; AVX1-LABEL: test_fmaximum_zero1:344; AVX1:       # %bb.0:345; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm1346; AVX1-NEXT:    vmaxsd %xmm1, %xmm0, %xmm1347; AVX1-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm2348; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0349; AVX1-NEXT:    retq350;351; AVX512-LABEL: test_fmaximum_zero1:352; AVX512:       # %bb.0:353; AVX512-NEXT:    vxorpd %xmm1, %xmm1, %xmm1354; AVX512-NEXT:    vmaxsd %xmm1, %xmm0, %xmm1355; AVX512-NEXT:    vcmpunordsd %xmm0, %xmm0, %k1356; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm1 {%k1}357; AVX512-NEXT:    vmovapd %xmm1, %xmm0358; AVX512-NEXT:    retq359;360; AVX10_2-LABEL: test_fmaximum_zero1:361; AVX10_2:       # %bb.0:362; AVX10_2-NEXT:    vxorpd %xmm1, %xmm1, %xmm1363; AVX10_2-NEXT:    vminmaxsd $1, %xmm1, %xmm0364; AVX10_2-NEXT:    retq365;366; X86-LABEL: test_fmaximum_zero1:367; X86:       # %bb.0:368; X86-NEXT:    pushl %ebp369; X86-NEXT:    movl %esp, %ebp370; X86-NEXT:    andl $-8, %esp371; X86-NEXT:    subl $8, %esp372; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero373; X86-NEXT:    vxorpd %xmm1, %xmm1, %xmm1374; X86-NEXT:    vmaxsd %xmm1, %xmm0, %xmm1375; X86-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm2376; X86-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0377; X86-NEXT:    vmovlpd %xmm0, (%esp)378; X86-NEXT:    fldl (%esp)379; X86-NEXT:    movl %ebp, %esp380; X86-NEXT:    popl %ebp381; X86-NEXT:    retl382  %1 = tail call double @llvm.maximum.f64(double %x, double 0.0)383  ret double %1384}385 386define double @test_fmaximum_zero2(double %x, double %y) {387; SSE2-LABEL: test_fmaximum_zero2:388; SSE2:       # %bb.0:389; SSE2-NEXT:    xorps %xmm0, %xmm0390; SSE2-NEXT:    retq391;392; AVX-LABEL: test_fmaximum_zero2:393; AVX:       # %bb.0:394; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm0395; AVX-NEXT:    retq396;397; AVX10_2-LABEL: test_fmaximum_zero2:398; AVX10_2:       # %bb.0:399; AVX10_2-NEXT:    vxorps %xmm0, %xmm0, %xmm0400; AVX10_2-NEXT:    retq401;402; X86-LABEL: test_fmaximum_zero2:403; X86:       # %bb.0:404; X86-NEXT:    fldz405; X86-NEXT:    retl406  %1 = tail call double @llvm.maximum.f64(double 0.0, double -0.0)407  ret double %1408}409 410define float @test_fmaximum_nsz(float %x, float %y) "no-signed-zeros-fp-math"="true" nounwind {411; SSE2-LABEL: test_fmaximum_nsz:412; SSE2:       # %bb.0:413; SSE2-NEXT:    movaps %xmm0, %xmm2414; SSE2-NEXT:    cmpunordss %xmm0, %xmm2415; SSE2-NEXT:    movaps %xmm2, %xmm3416; SSE2-NEXT:    andps %xmm0, %xmm3417; SSE2-NEXT:    maxss %xmm1, %xmm0418; SSE2-NEXT:    andnps %xmm0, %xmm2419; SSE2-NEXT:    orps %xmm3, %xmm2420; SSE2-NEXT:    movaps %xmm2, %xmm0421; SSE2-NEXT:    retq422;423; AVX1-LABEL: test_fmaximum_nsz:424; AVX1:       # %bb.0:425; AVX1-NEXT:    vmaxss %xmm1, %xmm0, %xmm1426; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm2427; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0428; AVX1-NEXT:    retq429;430; AVX512-LABEL: test_fmaximum_nsz:431; AVX512:       # %bb.0:432; AVX512-NEXT:    vmaxss %xmm1, %xmm0, %xmm1433; AVX512-NEXT:    vcmpunordss %xmm0, %xmm0, %k1434; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}435; AVX512-NEXT:    vmovaps %xmm1, %xmm0436; AVX512-NEXT:    retq437;438; AVX10_2-LABEL: test_fmaximum_nsz:439; AVX10_2:       # %bb.0:440; AVX10_2-NEXT:    vminmaxss $1, %xmm1, %xmm0441; AVX10_2-NEXT:    retq442;443; X86-LABEL: test_fmaximum_nsz:444; X86:       # %bb.0:445; X86-NEXT:    pushl %eax446; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero447; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm1448; X86-NEXT:    vmaxss {{[0-9]+}}(%esp), %xmm0, %xmm2449; X86-NEXT:    vblendvps %xmm1, %xmm0, %xmm2, %xmm0450; X86-NEXT:    vmovss %xmm0, (%esp)451; X86-NEXT:    flds (%esp)452; X86-NEXT:    popl %eax453; X86-NEXT:    retl454  %1 = tail call float @llvm.maximum.f32(float %x, float %y)455  ret float %1456}457 458define float @test_fmaximum_combine_cmps(float %x, float %y) nounwind {459; SSE2-LABEL: test_fmaximum_combine_cmps:460; SSE2:       # %bb.0:461; SSE2-NEXT:    divss %xmm0, %xmm1462; SSE2-NEXT:    movd %xmm0, %eax463; SSE2-NEXT:    testl %eax, %eax464; SSE2-NEXT:    movaps %xmm0, %xmm3465; SSE2-NEXT:    js .LBB9_2466; SSE2-NEXT:  # %bb.1:467; SSE2-NEXT:    movaps %xmm1, %xmm3468; SSE2-NEXT:  .LBB9_2:469; SSE2-NEXT:    movaps %xmm3, %xmm2470; SSE2-NEXT:    cmpunordss %xmm3, %xmm2471; SSE2-NEXT:    movaps %xmm2, %xmm4472; SSE2-NEXT:    andps %xmm3, %xmm4473; SSE2-NEXT:    js .LBB9_4474; SSE2-NEXT:  # %bb.3:475; SSE2-NEXT:    movaps %xmm0, %xmm1476; SSE2-NEXT:  .LBB9_4:477; SSE2-NEXT:    maxss %xmm1, %xmm3478; SSE2-NEXT:    andnps %xmm3, %xmm2479; SSE2-NEXT:    orps %xmm4, %xmm2480; SSE2-NEXT:    movaps %xmm2, %xmm0481; SSE2-NEXT:    retq482;483; AVX1-LABEL: test_fmaximum_combine_cmps:484; AVX1:       # %bb.0:485; AVX1-NEXT:    vdivss %xmm0, %xmm1, %xmm1486; AVX1-NEXT:    vmovd %xmm0, %eax487; AVX1-NEXT:    testl %eax, %eax488; AVX1-NEXT:    js .LBB9_1489; AVX1-NEXT:  # %bb.2:490; AVX1-NEXT:    vmovaps %xmm0, %xmm2491; AVX1-NEXT:    jmp .LBB9_3492; AVX1-NEXT:  .LBB9_1:493; AVX1-NEXT:    vmovaps %xmm1, %xmm2494; AVX1-NEXT:    vmovaps %xmm0, %xmm1495; AVX1-NEXT:  .LBB9_3:496; AVX1-NEXT:    vmaxss %xmm2, %xmm1, %xmm0497; AVX1-NEXT:    vcmpunordss %xmm1, %xmm1, %xmm2498; AVX1-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0499; AVX1-NEXT:    retq500;501; AVX512F-LABEL: test_fmaximum_combine_cmps:502; AVX512F:       # %bb.0:503; AVX512F-NEXT:    vdivss %xmm0, %xmm1, %xmm1504; AVX512F-NEXT:    vmovd %xmm0, %eax505; AVX512F-NEXT:    testl %eax, %eax506; AVX512F-NEXT:    sets %al507; AVX512F-NEXT:    kmovw %eax, %k1508; AVX512F-NEXT:    vmovaps %xmm0, %xmm2509; AVX512F-NEXT:    vmovss %xmm1, %xmm2, %xmm2 {%k1}510; AVX512F-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}511; AVX512F-NEXT:    vmaxss %xmm2, %xmm1, %xmm0512; AVX512F-NEXT:    vcmpunordss %xmm1, %xmm1, %k1513; AVX512F-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}514; AVX512F-NEXT:    retq515;516; AVX512DQ-LABEL: test_fmaximum_combine_cmps:517; AVX512DQ:       # %bb.0:518; AVX512DQ-NEXT:    vdivss %xmm0, %xmm1, %xmm1519; AVX512DQ-NEXT:    vfpclassss $3, %xmm0, %k0 # k0 = isQuietNaN(xmm0) | isPositiveZero(xmm0)520; AVX512DQ-NEXT:    kmovw %k0, %k1521; AVX512DQ-NEXT:    vmovaps %xmm1, %xmm2522; AVX512DQ-NEXT:    vmovss %xmm0, %xmm2, %xmm2 {%k1}523; AVX512DQ-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}524; AVX512DQ-NEXT:    vmaxss %xmm2, %xmm0, %xmm0525; AVX512DQ-NEXT:    retq526;527; AVX10_2-LABEL: test_fmaximum_combine_cmps:528; AVX10_2:       # %bb.0:529; AVX10_2-NEXT:    vdivss %xmm0, %xmm1, %xmm1530; AVX10_2-NEXT:    vminmaxss $1, %xmm1, %xmm0531; AVX10_2-NEXT:    retq532;533; X86-LABEL: test_fmaximum_combine_cmps:534; X86:       # %bb.0:535; X86-NEXT:    pushl %eax536; X86-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero537; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero538; X86-NEXT:    vdivss %xmm1, %xmm0, %xmm0539; X86-NEXT:    vmovd %xmm1, %eax540; X86-NEXT:    testl %eax, %eax541; X86-NEXT:    js .LBB9_1542; X86-NEXT:  # %bb.2:543; X86-NEXT:    vmovaps %xmm1, %xmm2544; X86-NEXT:    jmp .LBB9_3545; X86-NEXT:  .LBB9_1:546; X86-NEXT:    vmovaps %xmm0, %xmm2547; X86-NEXT:    vmovaps %xmm1, %xmm0548; X86-NEXT:  .LBB9_3:549; X86-NEXT:    vmaxss %xmm2, %xmm0, %xmm1550; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm2551; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0552; X86-NEXT:    vmovss %xmm0, (%esp)553; X86-NEXT:    flds (%esp)554; X86-NEXT:    popl %eax555; X86-NEXT:    retl556  %1 = fdiv nnan float %y, %x557  %2 = tail call float @llvm.maximum.f32(float %x, float %1)558  ret float %2559}560 561;562; fminimum563;564 565define float @test_fminimum(float %x, float %y) nounwind {566; SSE2-LABEL: test_fminimum:567; SSE2:       # %bb.0:568; SSE2-NEXT:    movd %xmm0, %eax569; SSE2-NEXT:    testl %eax, %eax570; SSE2-NEXT:    movdqa %xmm1, %xmm3571; SSE2-NEXT:    js .LBB10_2572; SSE2-NEXT:  # %bb.1:573; SSE2-NEXT:    movdqa %xmm0, %xmm3574; SSE2-NEXT:  .LBB10_2:575; SSE2-NEXT:    movdqa %xmm3, %xmm2576; SSE2-NEXT:    cmpunordss %xmm3, %xmm2577; SSE2-NEXT:    movaps %xmm2, %xmm4578; SSE2-NEXT:    andps %xmm3, %xmm4579; SSE2-NEXT:    js .LBB10_4580; SSE2-NEXT:  # %bb.3:581; SSE2-NEXT:    movdqa %xmm1, %xmm0582; SSE2-NEXT:  .LBB10_4:583; SSE2-NEXT:    minss %xmm0, %xmm3584; SSE2-NEXT:    andnps %xmm3, %xmm2585; SSE2-NEXT:    orps %xmm4, %xmm2586; SSE2-NEXT:    movaps %xmm2, %xmm0587; SSE2-NEXT:    retq588;589; AVX1-LABEL: test_fminimum:590; AVX1:       # %bb.0:591; AVX1-NEXT:    vmovd %xmm0, %eax592; AVX1-NEXT:    testl %eax, %eax593; AVX1-NEXT:    js .LBB10_1594; AVX1-NEXT:  # %bb.2:595; AVX1-NEXT:    vmovdqa %xmm1, %xmm2596; AVX1-NEXT:    jmp .LBB10_3597; AVX1-NEXT:  .LBB10_1:598; AVX1-NEXT:    vmovdqa %xmm0, %xmm2599; AVX1-NEXT:    vmovdqa %xmm1, %xmm0600; AVX1-NEXT:  .LBB10_3:601; AVX1-NEXT:    vminss %xmm2, %xmm0, %xmm1602; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm2603; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0604; AVX1-NEXT:    retq605;606; AVX512-LABEL: test_fminimum:607; AVX512:       # %bb.0:608; AVX512-NEXT:    vmovd %xmm0, %eax609; AVX512-NEXT:    testl %eax, %eax610; AVX512-NEXT:    sets %al611; AVX512-NEXT:    kmovw %eax, %k1612; AVX512-NEXT:    vmovaps %xmm1, %xmm2613; AVX512-NEXT:    vmovss %xmm0, %xmm2, %xmm2 {%k1}614; AVX512-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}615; AVX512-NEXT:    vminss %xmm2, %xmm0, %xmm1616; AVX512-NEXT:    vcmpunordss %xmm0, %xmm0, %k1617; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}618; AVX512-NEXT:    vmovaps %xmm1, %xmm0619; AVX512-NEXT:    retq620;621; AVX10_2-LABEL: test_fminimum:622; AVX10_2:       # %bb.0:623; AVX10_2-NEXT:    vminmaxss $0, %xmm1, %xmm0624; AVX10_2-NEXT:    retq625;626; X86-LABEL: test_fminimum:627; X86:       # %bb.0:628; X86-NEXT:    pushl %eax629; X86-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero630; X86-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero631; X86-NEXT:    vmovd %xmm0, %eax632; X86-NEXT:    testl %eax, %eax633; X86-NEXT:    js .LBB10_1634; X86-NEXT:  # %bb.2:635; X86-NEXT:    vmovdqa %xmm1, %xmm2636; X86-NEXT:    jmp .LBB10_3637; X86-NEXT:  .LBB10_1:638; X86-NEXT:    vmovdqa %xmm0, %xmm2639; X86-NEXT:    vmovdqa %xmm1, %xmm0640; X86-NEXT:  .LBB10_3:641; X86-NEXT:    vminss %xmm2, %xmm0, %xmm1642; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm2643; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0644; X86-NEXT:    vmovss %xmm0, (%esp)645; X86-NEXT:    flds (%esp)646; X86-NEXT:    popl %eax647; X86-NEXT:    retl648  %1 = tail call float @llvm.minimum.f32(float %x, float %y)649  ret float %1650}651 652define <2 x double> @test_fminimum_scalarize(<2 x double> %x, <2 x double> %y) "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" {653; SSE2-LABEL: test_fminimum_scalarize:654; SSE2:       # %bb.0:655; SSE2-NEXT:    minpd %xmm1, %xmm0656; SSE2-NEXT:    retq657;658; AVX-LABEL: test_fminimum_scalarize:659; AVX:       # %bb.0:660; AVX-NEXT:    vminpd %xmm1, %xmm0, %xmm0661; AVX-NEXT:    retq662;663; AVX10_2-LABEL: test_fminimum_scalarize:664; AVX10_2:       # %bb.0:665; AVX10_2-NEXT:    vminmaxpd $0, %xmm1, %xmm0, %xmm0666; AVX10_2-NEXT:    retq667;668; X86-LABEL: test_fminimum_scalarize:669; X86:       # %bb.0:670; X86-NEXT:    vminpd %xmm1, %xmm0, %xmm0671; X86-NEXT:    retl672  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> %y)673  ret <2 x double> %r674}675 676define float @test_fminimum_nan0(float %x, float %y) {677; SSE2-LABEL: test_fminimum_nan0:678; SSE2:       # %bb.0:679; SSE2-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]680; SSE2-NEXT:    retq681;682; AVX-LABEL: test_fminimum_nan0:683; AVX:       # %bb.0:684; AVX-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]685; AVX-NEXT:    retq686;687; AVX10_2-LABEL: test_fminimum_nan0:688; AVX10_2:       # %bb.0:689; AVX10_2-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]690; AVX10_2-NEXT:    retq691;692; X86-LABEL: test_fminimum_nan0:693; X86:       # %bb.0:694; X86-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}695; X86-NEXT:    retl696  %1 = tail call float @llvm.minimum.f32(float 0x7fff000000000000, float %y)697  ret float %1698}699 700define float @test_fminimum_nan1(float %x, float %y) {701; SSE2-LABEL: test_fminimum_nan1:702; SSE2:       # %bb.0:703; SSE2-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]704; SSE2-NEXT:    retq705;706; AVX-LABEL: test_fminimum_nan1:707; AVX:       # %bb.0:708; AVX-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]709; AVX-NEXT:    retq710;711; AVX10_2-LABEL: test_fminimum_nan1:712; AVX10_2:       # %bb.0:713; AVX10_2-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]714; AVX10_2-NEXT:    retq715;716; X86-LABEL: test_fminimum_nan1:717; X86:       # %bb.0:718; X86-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}719; X86-NEXT:    retl720  %1 = tail call float @llvm.minimum.f32(float %x, float 0x7fff000000000000)721  ret float %1722}723 724define double @test_fminimum_nnan(double %x, double %y) "no-nans-fp-math"="true" nounwind {725; SSE2-LABEL: test_fminimum_nnan:726; SSE2:       # %bb.0:727; SSE2-NEXT:    movq %xmm0, %rax728; SSE2-NEXT:    testq %rax, %rax729; SSE2-NEXT:    js .LBB14_1730; SSE2-NEXT:  # %bb.2:731; SSE2-NEXT:    minsd %xmm1, %xmm0732; SSE2-NEXT:    retq733; SSE2-NEXT:  .LBB14_1:734; SSE2-NEXT:    movdqa %xmm0, %xmm2735; SSE2-NEXT:    movapd %xmm1, %xmm0736; SSE2-NEXT:    minsd %xmm2, %xmm0737; SSE2-NEXT:    retq738;739; AVX1-LABEL: test_fminimum_nnan:740; AVX1:       # %bb.0:741; AVX1-NEXT:    vmovq %xmm0, %rax742; AVX1-NEXT:    testq %rax, %rax743; AVX1-NEXT:    js .LBB14_1744; AVX1-NEXT:  # %bb.2:745; AVX1-NEXT:    vminsd %xmm1, %xmm0, %xmm0746; AVX1-NEXT:    retq747; AVX1-NEXT:  .LBB14_1:748; AVX1-NEXT:    vmovdqa %xmm0, %xmm2749; AVX1-NEXT:    vminsd %xmm2, %xmm1, %xmm0750; AVX1-NEXT:    retq751;752; AVX512F-LABEL: test_fminimum_nnan:753; AVX512F:       # %bb.0:754; AVX512F-NEXT:    vmovq %xmm0, %rax755; AVX512F-NEXT:    testq %rax, %rax756; AVX512F-NEXT:    sets %al757; AVX512F-NEXT:    kmovw %eax, %k1758; AVX512F-NEXT:    vmovapd %xmm1, %xmm2759; AVX512F-NEXT:    vmovsd %xmm0, %xmm2, %xmm2 {%k1}760; AVX512F-NEXT:    vmovsd %xmm1, %xmm0, %xmm0 {%k1}761; AVX512F-NEXT:    vminsd %xmm2, %xmm0, %xmm0762; AVX512F-NEXT:    retq763;764; AVX512DQ-LABEL: test_fminimum_nnan:765; AVX512DQ:       # %bb.0:766; AVX512DQ-NEXT:    vfpclasssd $5, %xmm1, %k0 # k0 = isQuietNaN(xmm1) | isNegativeZero(xmm1)767; AVX512DQ-NEXT:    kmovw %k0, %k1768; AVX512DQ-NEXT:    vmovapd %xmm0, %xmm2769; AVX512DQ-NEXT:    vmovsd %xmm1, %xmm2, %xmm2 {%k1}770; AVX512DQ-NEXT:    vmovsd %xmm0, %xmm1, %xmm1 {%k1}771; AVX512DQ-NEXT:    vminsd %xmm2, %xmm1, %xmm0772; AVX512DQ-NEXT:    retq773;774; AVX10_2-LABEL: test_fminimum_nnan:775; AVX10_2:       # %bb.0:776; AVX10_2-NEXT:    vminmaxsd $0, %xmm1, %xmm0777; AVX10_2-NEXT:    retq778;779; X86-LABEL: test_fminimum_nnan:780; X86:       # %bb.0:781; X86-NEXT:    pushl %ebp782; X86-NEXT:    movl %esp, %ebp783; X86-NEXT:    andl $-8, %esp784; X86-NEXT:    subl $8, %esp785; X86-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero786; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero787; X86-NEXT:    vextractps $1, %xmm0, %eax788; X86-NEXT:    testl %eax, %eax789; X86-NEXT:    js .LBB14_1790; X86-NEXT:  # %bb.2:791; X86-NEXT:    vmovapd %xmm1, %xmm2792; X86-NEXT:    jmp .LBB14_3793; X86-NEXT:  .LBB14_1:794; X86-NEXT:    vmovapd %xmm0, %xmm2795; X86-NEXT:    vmovapd %xmm1, %xmm0796; X86-NEXT:  .LBB14_3:797; X86-NEXT:    vminsd %xmm2, %xmm0, %xmm0798; X86-NEXT:    vmovsd %xmm0, (%esp)799; X86-NEXT:    fldl (%esp)800; X86-NEXT:    movl %ebp, %esp801; X86-NEXT:    popl %ebp802; X86-NEXT:    retl803  %1 = tail call double @llvm.minimum.f64(double %x, double %y)804  ret double %1805}806 807define double @test_fminimum_zero0(double %x, double %y) nounwind {808; SSE2-LABEL: test_fminimum_zero0:809; SSE2:       # %bb.0:810; SSE2-NEXT:    movapd %xmm1, %xmm0811; SSE2-NEXT:    cmpunordsd %xmm1, %xmm0812; SSE2-NEXT:    movapd %xmm0, %xmm2813; SSE2-NEXT:    andpd %xmm1, %xmm2814; SSE2-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1815; SSE2-NEXT:    andnpd %xmm1, %xmm0816; SSE2-NEXT:    orpd %xmm2, %xmm0817; SSE2-NEXT:    retq818;819; AVX1-LABEL: test_fminimum_zero0:820; AVX1:       # %bb.0:821; AVX1-NEXT:    vcmpunordsd %xmm1, %xmm1, %xmm0822; AVX1-NEXT:    vminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm2823; AVX1-NEXT:    vblendvpd %xmm0, %xmm1, %xmm2, %xmm0824; AVX1-NEXT:    retq825;826; AVX512-LABEL: test_fminimum_zero0:827; AVX512:       # %bb.0:828; AVX512-NEXT:    vcmpunordsd %xmm1, %xmm1, %k1829; AVX512-NEXT:    vminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0830; AVX512-NEXT:    vmovsd %xmm1, %xmm0, %xmm0 {%k1}831; AVX512-NEXT:    retq832;833; AVX10_2-LABEL: test_fminimum_zero0:834; AVX10_2:       # %bb.0:835; AVX10_2-NEXT:    vminmaxsd $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1836; AVX10_2-NEXT:    retq837;838; X86-LABEL: test_fminimum_zero0:839; X86:       # %bb.0:840; X86-NEXT:    pushl %ebp841; X86-NEXT:    movl %esp, %ebp842; X86-NEXT:    andl $-8, %esp843; X86-NEXT:    subl $8, %esp844; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero845; X86-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm1846; X86-NEXT:    vminsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm2847; X86-NEXT:    vblendvpd %xmm1, %xmm0, %xmm2, %xmm0848; X86-NEXT:    vmovlpd %xmm0, (%esp)849; X86-NEXT:    fldl (%esp)850; X86-NEXT:    movl %ebp, %esp851; X86-NEXT:    popl %ebp852; X86-NEXT:    retl853  %1 = tail call double @llvm.minimum.f64(double -0.0, double %y)854  ret double %1855}856 857define double @test_fminimum_zero1(double %x, double %y) nounwind {858; SSE2-LABEL: test_fminimum_zero1:859; SSE2:       # %bb.0:860; SSE2-NEXT:    movapd %xmm0, %xmm1861; SSE2-NEXT:    cmpunordsd %xmm0, %xmm1862; SSE2-NEXT:    movapd %xmm1, %xmm2863; SSE2-NEXT:    andpd %xmm0, %xmm2864; SSE2-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0865; SSE2-NEXT:    andnpd %xmm0, %xmm1866; SSE2-NEXT:    orpd %xmm2, %xmm1867; SSE2-NEXT:    movapd %xmm1, %xmm0868; SSE2-NEXT:    retq869;870; AVX1-LABEL: test_fminimum_zero1:871; AVX1:       # %bb.0:872; AVX1-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm1873; AVX1-NEXT:    vminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2874; AVX1-NEXT:    vblendvpd %xmm1, %xmm0, %xmm2, %xmm0875; AVX1-NEXT:    retq876;877; AVX512-LABEL: test_fminimum_zero1:878; AVX512:       # %bb.0:879; AVX512-NEXT:    vcmpunordsd %xmm0, %xmm0, %k1880; AVX512-NEXT:    vminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1881; AVX512-NEXT:    vmovsd %xmm0, %xmm1, %xmm1 {%k1}882; AVX512-NEXT:    vmovapd %xmm1, %xmm0883; AVX512-NEXT:    retq884;885; AVX10_2-LABEL: test_fminimum_zero1:886; AVX10_2:       # %bb.0:887; AVX10_2-NEXT:    vminmaxsd $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0888; AVX10_2-NEXT:    retq889;890; X86-LABEL: test_fminimum_zero1:891; X86:       # %bb.0:892; X86-NEXT:    pushl %ebp893; X86-NEXT:    movl %esp, %ebp894; X86-NEXT:    andl $-8, %esp895; X86-NEXT:    subl $8, %esp896; X86-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero897; X86-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm1898; X86-NEXT:    vminsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm2899; X86-NEXT:    vblendvpd %xmm1, %xmm0, %xmm2, %xmm0900; X86-NEXT:    vmovlpd %xmm0, (%esp)901; X86-NEXT:    fldl (%esp)902; X86-NEXT:    movl %ebp, %esp903; X86-NEXT:    popl %ebp904; X86-NEXT:    retl905  %1 = tail call double @llvm.minimum.f64(double %x, double -0.0)906  ret double %1907}908 909define double @test_fminimum_zero2(double %x, double %y) {910; SSE2-LABEL: test_fminimum_zero2:911; SSE2:       # %bb.0:912; SSE2-NEXT:    movsd {{.*#+}} xmm0 = [-0.0E+0,0.0E+0]913; SSE2-NEXT:    retq914;915; AVX-LABEL: test_fminimum_zero2:916; AVX:       # %bb.0:917; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = [-0.0E+0,0.0E+0]918; AVX-NEXT:    retq919;920; AVX10_2-LABEL: test_fminimum_zero2:921; AVX10_2:       # %bb.0:922; AVX10_2-NEXT:    vmovsd {{.*#+}} xmm0 = [-0.0E+0,0.0E+0]923; AVX10_2-NEXT:    retq924;925; X86-LABEL: test_fminimum_zero2:926; X86:       # %bb.0:927; X86-NEXT:    fldz928; X86-NEXT:    fchs929; X86-NEXT:    retl930  %1 = tail call double @llvm.minimum.f64(double -0.0, double 0.0)931  ret double %1932}933 934define float @test_fminimum_nsz(float %x, float %y) nounwind {935; SSE2-LABEL: test_fminimum_nsz:936; SSE2:       # %bb.0:937; SSE2-NEXT:    movaps %xmm0, %xmm2938; SSE2-NEXT:    cmpunordss %xmm0, %xmm2939; SSE2-NEXT:    movaps %xmm2, %xmm3940; SSE2-NEXT:    andps %xmm0, %xmm3941; SSE2-NEXT:    minss %xmm1, %xmm0942; SSE2-NEXT:    andnps %xmm0, %xmm2943; SSE2-NEXT:    orps %xmm3, %xmm2944; SSE2-NEXT:    movaps %xmm2, %xmm0945; SSE2-NEXT:    retq946;947; AVX1-LABEL: test_fminimum_nsz:948; AVX1:       # %bb.0:949; AVX1-NEXT:    vminss %xmm1, %xmm0, %xmm1950; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm2951; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0952; AVX1-NEXT:    retq953;954; AVX512-LABEL: test_fminimum_nsz:955; AVX512:       # %bb.0:956; AVX512-NEXT:    vminss %xmm1, %xmm0, %xmm1957; AVX512-NEXT:    vcmpunordss %xmm0, %xmm0, %k1958; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}959; AVX512-NEXT:    vmovaps %xmm1, %xmm0960; AVX512-NEXT:    retq961;962; AVX10_2-LABEL: test_fminimum_nsz:963; AVX10_2:       # %bb.0:964; AVX10_2-NEXT:    vminmaxss $0, %xmm1, %xmm0965; AVX10_2-NEXT:    retq966;967; X86-LABEL: test_fminimum_nsz:968; X86:       # %bb.0:969; X86-NEXT:    pushl %eax970; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero971; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm1972; X86-NEXT:    vminss {{[0-9]+}}(%esp), %xmm0, %xmm2973; X86-NEXT:    vblendvps %xmm1, %xmm0, %xmm2, %xmm0974; X86-NEXT:    vmovss %xmm0, (%esp)975; X86-NEXT:    flds (%esp)976; X86-NEXT:    popl %eax977; X86-NEXT:    retl978  %1 = tail call nsz float @llvm.minimum.f32(float %x, float %y)979  ret float %1980}981 982define float @test_fminimum_combine_cmps(float %x, float %y) nounwind {983; SSE2-LABEL: test_fminimum_combine_cmps:984; SSE2:       # %bb.0:985; SSE2-NEXT:    divss %xmm0, %xmm1986; SSE2-NEXT:    movd %xmm0, %eax987; SSE2-NEXT:    testl %eax, %eax988; SSE2-NEXT:    movaps %xmm1, %xmm3989; SSE2-NEXT:    js .LBB19_2990; SSE2-NEXT:  # %bb.1:991; SSE2-NEXT:    movaps %xmm0, %xmm3992; SSE2-NEXT:  .LBB19_2:993; SSE2-NEXT:    movaps %xmm3, %xmm2994; SSE2-NEXT:    cmpunordss %xmm3, %xmm2995; SSE2-NEXT:    movaps %xmm2, %xmm4996; SSE2-NEXT:    andps %xmm3, %xmm4997; SSE2-NEXT:    js .LBB19_4998; SSE2-NEXT:  # %bb.3:999; SSE2-NEXT:    movaps %xmm1, %xmm01000; SSE2-NEXT:  .LBB19_4:1001; SSE2-NEXT:    minss %xmm0, %xmm31002; SSE2-NEXT:    andnps %xmm3, %xmm21003; SSE2-NEXT:    orps %xmm4, %xmm21004; SSE2-NEXT:    movaps %xmm2, %xmm01005; SSE2-NEXT:    retq1006;1007; AVX1-LABEL: test_fminimum_combine_cmps:1008; AVX1:       # %bb.0:1009; AVX1-NEXT:    vdivss %xmm0, %xmm1, %xmm21010; AVX1-NEXT:    vmovd %xmm0, %eax1011; AVX1-NEXT:    testl %eax, %eax1012; AVX1-NEXT:    js .LBB19_11013; AVX1-NEXT:  # %bb.2:1014; AVX1-NEXT:    vmovaps %xmm2, %xmm11015; AVX1-NEXT:    jmp .LBB19_31016; AVX1-NEXT:  .LBB19_1:1017; AVX1-NEXT:    vmovaps %xmm0, %xmm11018; AVX1-NEXT:    vmovaps %xmm2, %xmm01019; AVX1-NEXT:  .LBB19_3:1020; AVX1-NEXT:    vminss %xmm1, %xmm0, %xmm11021; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm21022; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01023; AVX1-NEXT:    retq1024;1025; AVX512F-LABEL: test_fminimum_combine_cmps:1026; AVX512F:       # %bb.0:1027; AVX512F-NEXT:    vdivss %xmm0, %xmm1, %xmm11028; AVX512F-NEXT:    vmovd %xmm0, %eax1029; AVX512F-NEXT:    testl %eax, %eax1030; AVX512F-NEXT:    sets %al1031; AVX512F-NEXT:    kmovw %eax, %k11032; AVX512F-NEXT:    vmovaps %xmm1, %xmm21033; AVX512F-NEXT:    vmovss %xmm0, %xmm2, %xmm2 {%k1}1034; AVX512F-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}1035; AVX512F-NEXT:    vminss %xmm2, %xmm0, %xmm11036; AVX512F-NEXT:    vcmpunordss %xmm0, %xmm0, %k11037; AVX512F-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}1038; AVX512F-NEXT:    vmovaps %xmm1, %xmm01039; AVX512F-NEXT:    retq1040;1041; AVX512DQ-LABEL: test_fminimum_combine_cmps:1042; AVX512DQ:       # %bb.0:1043; AVX512DQ-NEXT:    vdivss %xmm0, %xmm1, %xmm11044; AVX512DQ-NEXT:    vfpclassss $5, %xmm0, %k0 # k0 = isQuietNaN(xmm0) | isNegativeZero(xmm0)1045; AVX512DQ-NEXT:    kmovw %k0, %k11046; AVX512DQ-NEXT:    vmovaps %xmm1, %xmm21047; AVX512DQ-NEXT:    vmovss %xmm0, %xmm2, %xmm2 {%k1}1048; AVX512DQ-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}1049; AVX512DQ-NEXT:    vminss %xmm2, %xmm0, %xmm01050; AVX512DQ-NEXT:    retq1051;1052; AVX10_2-LABEL: test_fminimum_combine_cmps:1053; AVX10_2:       # %bb.0:1054; AVX10_2-NEXT:    vdivss %xmm0, %xmm1, %xmm11055; AVX10_2-NEXT:    vminmaxss $0, %xmm1, %xmm01056; AVX10_2-NEXT:    retq1057;1058; X86-LABEL: test_fminimum_combine_cmps:1059; X86:       # %bb.0:1060; X86-NEXT:    pushl %eax1061; X86-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1062; X86-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero1063; X86-NEXT:    vdivss %xmm0, %xmm1, %xmm21064; X86-NEXT:    vmovd %xmm0, %eax1065; X86-NEXT:    testl %eax, %eax1066; X86-NEXT:    js .LBB19_11067; X86-NEXT:  # %bb.2:1068; X86-NEXT:    vmovaps %xmm2, %xmm11069; X86-NEXT:    jmp .LBB19_31070; X86-NEXT:  .LBB19_1:1071; X86-NEXT:    vmovaps %xmm0, %xmm11072; X86-NEXT:    vmovaps %xmm2, %xmm01073; X86-NEXT:  .LBB19_3:1074; X86-NEXT:    vminss %xmm1, %xmm0, %xmm11075; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm21076; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01077; X86-NEXT:    vmovss %xmm0, (%esp)1078; X86-NEXT:    flds (%esp)1079; X86-NEXT:    popl %eax1080; X86-NEXT:    retl1081  %1 = fdiv nnan float %y, %x1082  %2 = tail call float @llvm.minimum.f32(float %x, float %1)1083  ret float %21084}1085 1086define <2 x double> @test_fminimum_vector(<2 x double> %x, <2 x double> %y) {1087; SSE2-LABEL: test_fminimum_vector:1088; SSE2:       # %bb.0:1089; SSE2-NEXT:    movaps %xmm0, %xmm21090; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1],xmm0[3,3]1091; SSE2-NEXT:    pxor %xmm3, %xmm31092; SSE2-NEXT:    pcmpgtd %xmm2, %xmm31093; SSE2-NEXT:    movdqa %xmm3, %xmm21094; SSE2-NEXT:    pandn %xmm1, %xmm21095; SSE2-NEXT:    movdqa %xmm3, %xmm41096; SSE2-NEXT:    pandn %xmm0, %xmm41097; SSE2-NEXT:    pand %xmm3, %xmm01098; SSE2-NEXT:    por %xmm2, %xmm01099; SSE2-NEXT:    pand %xmm1, %xmm31100; SSE2-NEXT:    por %xmm4, %xmm31101; SSE2-NEXT:    movdqa %xmm3, %xmm11102; SSE2-NEXT:    minpd %xmm0, %xmm11103; SSE2-NEXT:    movdqa %xmm3, %xmm01104; SSE2-NEXT:    cmpunordpd %xmm3, %xmm01105; SSE2-NEXT:    andpd %xmm0, %xmm31106; SSE2-NEXT:    andnpd %xmm1, %xmm01107; SSE2-NEXT:    orpd %xmm3, %xmm01108; SSE2-NEXT:    retq1109;1110; AVX-LABEL: test_fminimum_vector:1111; AVX:       # %bb.0:1112; AVX-NEXT:    vblendvpd %xmm0, %xmm0, %xmm1, %xmm21113; AVX-NEXT:    vblendvpd %xmm0, %xmm1, %xmm0, %xmm01114; AVX-NEXT:    vminpd %xmm2, %xmm0, %xmm11115; AVX-NEXT:    vcmpunordpd %xmm0, %xmm0, %xmm21116; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm01117; AVX-NEXT:    retq1118;1119; AVX10_2-LABEL: test_fminimum_vector:1120; AVX10_2:       # %bb.0:1121; AVX10_2-NEXT:    vminmaxpd $0, %xmm1, %xmm0, %xmm01122; AVX10_2-NEXT:    retq1123;1124; X86-LABEL: test_fminimum_vector:1125; X86:       # %bb.0:1126; X86-NEXT:    vblendvpd %xmm0, %xmm0, %xmm1, %xmm21127; X86-NEXT:    vblendvpd %xmm0, %xmm1, %xmm0, %xmm01128; X86-NEXT:    vminpd %xmm2, %xmm0, %xmm11129; X86-NEXT:    vcmpunordpd %xmm0, %xmm0, %xmm21130; X86-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm01131; X86-NEXT:    retl1132  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> %y)1133  ret <2 x double> %r1134}1135 1136define <4 x float> @test_fmaximum_vector(<4 x float> %x, <4 x float> %y) "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" {1137; SSE2-LABEL: test_fmaximum_vector:1138; SSE2:       # %bb.0:1139; SSE2-NEXT:    maxps %xmm1, %xmm01140; SSE2-NEXT:    retq1141;1142; AVX-LABEL: test_fmaximum_vector:1143; AVX:       # %bb.0:1144; AVX-NEXT:    vmaxps %xmm1, %xmm0, %xmm01145; AVX-NEXT:    retq1146;1147; AVX10_2-LABEL: test_fmaximum_vector:1148; AVX10_2:       # %bb.0:1149; AVX10_2-NEXT:    vminmaxps $1, %xmm1, %xmm0, %xmm01150; AVX10_2-NEXT:    retq1151;1152; X86-LABEL: test_fmaximum_vector:1153; X86:       # %bb.0:1154; X86-NEXT:    vmaxps %xmm1, %xmm0, %xmm01155; X86-NEXT:    retl1156  %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> %y)1157  ret <4 x float> %r1158}1159 1160define <2 x double> @test_fminimum_vector_zero(<2 x double> %x) {1161; SSE2-LABEL: test_fminimum_vector_zero:1162; SSE2:       # %bb.0:1163; SSE2-NEXT:    xorpd %xmm1, %xmm11164; SSE2-NEXT:    minpd %xmm0, %xmm11165; SSE2-NEXT:    movapd %xmm1, %xmm01166; SSE2-NEXT:    retq1167;1168; AVX-LABEL: test_fminimum_vector_zero:1169; AVX:       # %bb.0:1170; AVX-NEXT:    vxorpd %xmm1, %xmm1, %xmm11171; AVX-NEXT:    vminpd %xmm0, %xmm1, %xmm01172; AVX-NEXT:    retq1173;1174; AVX10_2-LABEL: test_fminimum_vector_zero:1175; AVX10_2:       # %bb.0:1176; AVX10_2-NEXT:    vxorpd %xmm1, %xmm1, %xmm11177; AVX10_2-NEXT:    vminmaxpd $0, %xmm1, %xmm0, %xmm01178; AVX10_2-NEXT:    retq1179;1180; X86-LABEL: test_fminimum_vector_zero:1181; X86:       # %bb.0:1182; X86-NEXT:    vxorpd %xmm1, %xmm1, %xmm11183; X86-NEXT:    vminpd %xmm0, %xmm1, %xmm01184; X86-NEXT:    retl1185  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> <double 0., double 0.>)1186  ret <2 x double> %r1187}1188 1189define <4 x float> @test_fmaximum_vector_signed_zero(<4 x float> %x) {1190; SSE2-LABEL: test_fmaximum_vector_signed_zero:1191; SSE2:       # %bb.0:1192; SSE2-NEXT:    movaps {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1193; SSE2-NEXT:    maxps %xmm0, %xmm11194; SSE2-NEXT:    movaps %xmm1, %xmm01195; SSE2-NEXT:    retq1196;1197; AVX-LABEL: test_fmaximum_vector_signed_zero:1198; AVX:       # %bb.0:1199; AVX-NEXT:    vbroadcastss {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1200; AVX-NEXT:    vmaxps %xmm0, %xmm1, %xmm01201; AVX-NEXT:    retq1202;1203; AVX10_2-LABEL: test_fmaximum_vector_signed_zero:1204; AVX10_2:       # %bb.0:1205; AVX10_2-NEXT:    vminmaxps $1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01206; AVX10_2-NEXT:    retq1207;1208; X86-LABEL: test_fmaximum_vector_signed_zero:1209; X86:       # %bb.0:1210; X86-NEXT:    vbroadcastss {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1211; X86-NEXT:    vmaxps %xmm0, %xmm1, %xmm01212; X86-NEXT:    retl1213  %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> <float -0., float -0., float -0., float -0.>)1214  ret <4 x float> %r1215}1216 1217define <2 x double> @test_fminimum_vector_partially_zero(<2 x double> %x) {1218; SSE2-LABEL: test_fminimum_vector_partially_zero:1219; SSE2:       # %bb.0:1220; SSE2-NEXT:    xorpd %xmm1, %xmm11221; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1222; SSE2-NEXT:    minpd %xmm0, %xmm11223; SSE2-NEXT:    movapd %xmm1, %xmm01224; SSE2-NEXT:    retq1225;1226; AVX-LABEL: test_fminimum_vector_partially_zero:1227; AVX:       # %bb.0:1228; AVX-NEXT:    vxorpd %xmm1, %xmm1, %xmm11229; AVX-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1230; AVX-NEXT:    vminpd %xmm0, %xmm1, %xmm01231; AVX-NEXT:    retq1232;1233; AVX10_2-LABEL: test_fminimum_vector_partially_zero:1234; AVX10_2:       # %bb.0:1235; AVX10_2-NEXT:    vxorpd %xmm1, %xmm1, %xmm11236; AVX10_2-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1237; AVX10_2-NEXT:    vminmaxpd $0, %xmm1, %xmm0, %xmm01238; AVX10_2-NEXT:    retq1239;1240; X86-LABEL: test_fminimum_vector_partially_zero:1241; X86:       # %bb.0:1242; X86-NEXT:    vxorpd %xmm1, %xmm1, %xmm11243; X86-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1244; X86-NEXT:    vminpd %xmm0, %xmm1, %xmm01245; X86-NEXT:    retl1246  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> <double 0., double 5.>)1247  ret <2 x double> %r1248}1249 1250define <2 x double> @test_fminimum_vector_different_zeros(<2 x double> %x) {1251; SSE2-LABEL: test_fminimum_vector_different_zeros:1252; SSE2:       # %bb.0:1253; SSE2-NEXT:    movaps %xmm0, %xmm11254; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[3,3]1255; SSE2-NEXT:    xorps %xmm2, %xmm21256; SSE2-NEXT:    pxor %xmm3, %xmm31257; SSE2-NEXT:    pcmpgtd %xmm1, %xmm31258; SSE2-NEXT:    movhps {{.*#+}} xmm2 = xmm2[0,1],mem[0,1]1259; SSE2-NEXT:    movdqa %xmm3, %xmm11260; SSE2-NEXT:    pandn %xmm2, %xmm11261; SSE2-NEXT:    movaps %xmm0, %xmm41262; SSE2-NEXT:    andps %xmm3, %xmm41263; SSE2-NEXT:    orps %xmm1, %xmm41264; SSE2-NEXT:    pand %xmm0, %xmm21265; SSE2-NEXT:    pandn %xmm0, %xmm31266; SSE2-NEXT:    por %xmm2, %xmm31267; SSE2-NEXT:    movdqa %xmm3, %xmm11268; SSE2-NEXT:    minpd %xmm4, %xmm11269; SSE2-NEXT:    movdqa %xmm3, %xmm01270; SSE2-NEXT:    cmpunordpd %xmm3, %xmm01271; SSE2-NEXT:    andpd %xmm0, %xmm31272; SSE2-NEXT:    andnpd %xmm1, %xmm01273; SSE2-NEXT:    orpd %xmm3, %xmm01274; SSE2-NEXT:    retq1275;1276; AVX-LABEL: test_fminimum_vector_different_zeros:1277; AVX:       # %bb.0:1278; AVX-NEXT:    vxorpd %xmm1, %xmm1, %xmm11279; AVX-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1280; AVX-NEXT:    vblendvpd %xmm0, %xmm0, %xmm1, %xmm21281; AVX-NEXT:    vblendvpd %xmm0, %xmm1, %xmm0, %xmm01282; AVX-NEXT:    vminpd %xmm2, %xmm0, %xmm11283; AVX-NEXT:    vcmpunordpd %xmm0, %xmm0, %xmm21284; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm01285; AVX-NEXT:    retq1286;1287; AVX10_2-LABEL: test_fminimum_vector_different_zeros:1288; AVX10_2:       # %bb.0:1289; AVX10_2-NEXT:    vxorpd %xmm1, %xmm1, %xmm11290; AVX10_2-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1291; AVX10_2-NEXT:    vminmaxpd $0, %xmm1, %xmm0, %xmm01292; AVX10_2-NEXT:    retq1293;1294; X86-LABEL: test_fminimum_vector_different_zeros:1295; X86:       # %bb.0:1296; X86-NEXT:    vxorpd %xmm1, %xmm1, %xmm11297; X86-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1298; X86-NEXT:    vblendvpd %xmm0, %xmm0, %xmm1, %xmm21299; X86-NEXT:    vblendvpd %xmm0, %xmm1, %xmm0, %xmm01300; X86-NEXT:    vminpd %xmm2, %xmm0, %xmm11301; X86-NEXT:    vcmpunordpd %xmm0, %xmm0, %xmm21302; X86-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm01303; X86-NEXT:    retl1304  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> <double 0., double -0.>)1305  ret <2 x double> %r1306}1307 1308define <4 x float> @test_fmaximum_vector_non_zero(<4 x float> %x) {1309; SSE2-LABEL: test_fmaximum_vector_non_zero:1310; SSE2:       # %bb.0:1311; SSE2-NEXT:    movaps {{.*#+}} xmm1 = [5.0E+0,4.0E+0,3.0E+0,2.0E+0]1312; SSE2-NEXT:    maxps %xmm0, %xmm11313; SSE2-NEXT:    movaps %xmm1, %xmm01314; SSE2-NEXT:    retq1315;1316; AVX-LABEL: test_fmaximum_vector_non_zero:1317; AVX:       # %bb.0:1318; AVX-NEXT:    vmovaps {{.*#+}} xmm1 = [5.0E+0,4.0E+0,3.0E+0,2.0E+0]1319; AVX-NEXT:    vmaxps %xmm0, %xmm1, %xmm01320; AVX-NEXT:    retq1321;1322; AVX10_2-LABEL: test_fmaximum_vector_non_zero:1323; AVX10_2:       # %bb.0:1324; AVX10_2-NEXT:    vminmaxps $1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01325; AVX10_2-NEXT:    retq1326;1327; X86-LABEL: test_fmaximum_vector_non_zero:1328; X86:       # %bb.0:1329; X86-NEXT:    vmovaps {{.*#+}} xmm1 = [5.0E+0,4.0E+0,3.0E+0,2.0E+0]1330; X86-NEXT:    vmaxps %xmm0, %xmm1, %xmm01331; X86-NEXT:    retl1332  %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> <float 5., float 4., float 3., float 2.>)1333  ret <4 x float> %r1334}1335 1336define <2 x double> @test_fminimum_vector_nan(<2 x double> %x) {1337; SSE2-LABEL: test_fminimum_vector_nan:1338; SSE2:       # %bb.0:1339; SSE2-NEXT:    movsd {{.*#+}} xmm2 = [NaN,0.0E+0]1340; SSE2-NEXT:    xorpd %xmm1, %xmm11341; SSE2-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]1342; SSE2-NEXT:    minpd %xmm0, %xmm11343; SSE2-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]1344; SSE2-NEXT:    movapd %xmm1, %xmm01345; SSE2-NEXT:    retq1346;1347; AVX-LABEL: test_fminimum_vector_nan:1348; AVX:       # %bb.0:1349; AVX-NEXT:    vmovsd {{.*#+}} xmm1 = [NaN,0.0E+0]1350; AVX-NEXT:    vxorpd %xmm2, %xmm2, %xmm21351; AVX-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm1[0]1352; AVX-NEXT:    vminpd %xmm0, %xmm2, %xmm01353; AVX-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]1354; AVX-NEXT:    retq1355;1356; AVX10_2-LABEL: test_fminimum_vector_nan:1357; AVX10_2:       # %bb.0:1358; AVX10_2-NEXT:    vxorpd %xmm1, %xmm1, %xmm11359; AVX10_2-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1360; AVX10_2-NEXT:    vminmaxpd $0, %xmm1, %xmm0, %xmm01361; AVX10_2-NEXT:    retq1362;1363; X86-LABEL: test_fminimum_vector_nan:1364; X86:       # %bb.0:1365; X86-NEXT:    vxorpd %xmm1, %xmm1, %xmm11366; X86-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]1367; X86-NEXT:    vminpd %xmm0, %xmm1, %xmm01368; X86-NEXT:    vcmpunordpd %xmm1, %xmm1, %xmm21369; X86-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm01370; X86-NEXT:    retl1371  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> <double 0., double 0x7fff000000000000>)1372  ret <2 x double> %r1373}1374 1375define <2 x double> @test_fminimum_vector_zero_first(<2 x double> %x) {1376; SSE2-LABEL: test_fminimum_vector_zero_first:1377; SSE2:       # %bb.0:1378; SSE2-NEXT:    xorpd %xmm1, %xmm11379; SSE2-NEXT:    minpd %xmm0, %xmm11380; SSE2-NEXT:    movapd %xmm1, %xmm01381; SSE2-NEXT:    retq1382;1383; AVX-LABEL: test_fminimum_vector_zero_first:1384; AVX:       # %bb.0:1385; AVX-NEXT:    vxorpd %xmm1, %xmm1, %xmm11386; AVX-NEXT:    vminpd %xmm0, %xmm1, %xmm01387; AVX-NEXT:    retq1388;1389; AVX10_2-LABEL: test_fminimum_vector_zero_first:1390; AVX10_2:       # %bb.0:1391; AVX10_2-NEXT:    vxorpd %xmm1, %xmm1, %xmm11392; AVX10_2-NEXT:    vminmaxpd $0, %xmm1, %xmm0, %xmm01393; AVX10_2-NEXT:    retq1394;1395; X86-LABEL: test_fminimum_vector_zero_first:1396; X86:       # %bb.0:1397; X86-NEXT:    vxorpd %xmm1, %xmm1, %xmm11398; X86-NEXT:    vminpd %xmm0, %xmm1, %xmm01399; X86-NEXT:    retl1400  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> <double 0., double 0.>, <2 x double> %x)1401  ret <2 x double> %r1402}1403 1404define <2 x double> @test_fminimum_vector_signed_zero(<2 x double> %x) {1405; SSE2-LABEL: test_fminimum_vector_signed_zero:1406; SSE2:       # %bb.0:1407; SSE2-NEXT:    movapd %xmm0, %xmm11408; SSE2-NEXT:    minpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11409; SSE2-NEXT:    movapd %xmm0, %xmm21410; SSE2-NEXT:    cmpunordpd %xmm0, %xmm21411; SSE2-NEXT:    andpd %xmm2, %xmm01412; SSE2-NEXT:    andnpd %xmm1, %xmm21413; SSE2-NEXT:    orpd %xmm2, %xmm01414; SSE2-NEXT:    retq1415;1416; AVX-LABEL: test_fminimum_vector_signed_zero:1417; AVX:       # %bb.0:1418; AVX-NEXT:    vcmpunordpd %xmm0, %xmm0, %xmm11419; AVX-NEXT:    vminpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm21420; AVX-NEXT:    vblendvpd %xmm1, %xmm0, %xmm2, %xmm01421; AVX-NEXT:    retq1422;1423; AVX10_2-LABEL: test_fminimum_vector_signed_zero:1424; AVX10_2:       # %bb.0:1425; AVX10_2-NEXT:    vminmaxpd $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm01426; AVX10_2-NEXT:    retq1427;1428; X86-LABEL: test_fminimum_vector_signed_zero:1429; X86:       # %bb.0:1430; X86-NEXT:    vcmpunordpd %xmm0, %xmm0, %xmm11431; X86-NEXT:    vminpd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm21432; X86-NEXT:    vblendvpd %xmm1, %xmm0, %xmm2, %xmm01433; X86-NEXT:    retl1434  %r = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> <double -0., double -0.>)1435  ret <2 x double> %r1436}1437 1438define <4 x float> @test_fmaximum_vector_signed_zero_first(<4 x float> %x) {1439; SSE2-LABEL: test_fmaximum_vector_signed_zero_first:1440; SSE2:       # %bb.0:1441; SSE2-NEXT:    movaps {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1442; SSE2-NEXT:    maxps %xmm0, %xmm11443; SSE2-NEXT:    movaps %xmm1, %xmm01444; SSE2-NEXT:    retq1445;1446; AVX-LABEL: test_fmaximum_vector_signed_zero_first:1447; AVX:       # %bb.0:1448; AVX-NEXT:    vbroadcastss {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1449; AVX-NEXT:    vmaxps %xmm0, %xmm1, %xmm01450; AVX-NEXT:    retq1451;1452; AVX10_2-LABEL: test_fmaximum_vector_signed_zero_first:1453; AVX10_2:       # %bb.0:1454; AVX10_2-NEXT:    vminmaxps $1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01455; AVX10_2-NEXT:    retq1456;1457; X86-LABEL: test_fmaximum_vector_signed_zero_first:1458; X86:       # %bb.0:1459; X86-NEXT:    vbroadcastss {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1460; X86-NEXT:    vmaxps %xmm0, %xmm1, %xmm01461; X86-NEXT:    retl1462  %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> <float -0., float -0., float -0., float -0.>, <4 x float> %x)1463  ret <4 x float> %r1464}1465 1466define <4 x float> @test_fmaximum_vector_zero(<4 x float> %x) {1467; SSE2-LABEL: test_fmaximum_vector_zero:1468; SSE2:       # %bb.0:1469; SSE2-NEXT:    xorps %xmm1, %xmm11470; SSE2-NEXT:    movaps %xmm0, %xmm21471; SSE2-NEXT:    maxps %xmm1, %xmm21472; SSE2-NEXT:    movaps %xmm0, %xmm11473; SSE2-NEXT:    cmpunordps %xmm0, %xmm11474; SSE2-NEXT:    andps %xmm1, %xmm01475; SSE2-NEXT:    andnps %xmm2, %xmm11476; SSE2-NEXT:    orps %xmm1, %xmm01477; SSE2-NEXT:    retq1478;1479; AVX-LABEL: test_fmaximum_vector_zero:1480; AVX:       # %bb.0:1481; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm11482; AVX-NEXT:    vmaxps %xmm1, %xmm0, %xmm11483; AVX-NEXT:    vcmpunordps %xmm0, %xmm0, %xmm21484; AVX-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01485; AVX-NEXT:    retq1486;1487; AVX10_2-LABEL: test_fmaximum_vector_zero:1488; AVX10_2:       # %bb.0:1489; AVX10_2-NEXT:    vxorpd %xmm1, %xmm1, %xmm11490; AVX10_2-NEXT:    vminmaxps $1, %xmm1, %xmm0, %xmm01491; AVX10_2-NEXT:    retq1492;1493; X86-LABEL: test_fmaximum_vector_zero:1494; X86:       # %bb.0:1495; X86-NEXT:    vxorps %xmm1, %xmm1, %xmm11496; X86-NEXT:    vmaxps %xmm1, %xmm0, %xmm11497; X86-NEXT:    vcmpunordps %xmm0, %xmm0, %xmm21498; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01499; X86-NEXT:    retl1500  %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> <float 0., float 0., float 0., float 0.>)1501  ret <4 x float> %r1502}1503 1504; PR77805: Check that signed zeroes are handled correctly in this case (FIXME)1505define <4 x float> @test_fmaximum_v4f32_splat(<4 x float> %x, float %y) {1506; SSE2-LABEL: test_fmaximum_v4f32_splat:1507; SSE2:       # %bb.0:1508; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0,0,0]1509; SSE2-NEXT:    pxor %xmm2, %xmm21510; SSE2-NEXT:    pcmpgtd %xmm0, %xmm21511; SSE2-NEXT:    movdqa %xmm2, %xmm31512; SSE2-NEXT:    pandn %xmm0, %xmm31513; SSE2-NEXT:    movaps %xmm1, %xmm41514; SSE2-NEXT:    andps %xmm2, %xmm41515; SSE2-NEXT:    orps %xmm3, %xmm41516; SSE2-NEXT:    pand %xmm2, %xmm01517; SSE2-NEXT:    andnps %xmm1, %xmm21518; SSE2-NEXT:    por %xmm2, %xmm01519; SSE2-NEXT:    movdqa %xmm0, %xmm11520; SSE2-NEXT:    maxps %xmm4, %xmm11521; SSE2-NEXT:    movdqa %xmm0, %xmm21522; SSE2-NEXT:    cmpunordps %xmm0, %xmm21523; SSE2-NEXT:    andps %xmm2, %xmm01524; SSE2-NEXT:    andnps %xmm1, %xmm21525; SSE2-NEXT:    orps %xmm2, %xmm01526; SSE2-NEXT:    retq1527;1528; AVX1-LABEL: test_fmaximum_v4f32_splat:1529; AVX1:       # %bb.0:1530; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,0,0,0]1531; AVX1-NEXT:    vblendvps %xmm0, %xmm1, %xmm0, %xmm21532; AVX1-NEXT:    vblendvps %xmm0, %xmm0, %xmm1, %xmm01533; AVX1-NEXT:    vmaxps %xmm2, %xmm0, %xmm11534; AVX1-NEXT:    vcmpunordps %xmm0, %xmm0, %xmm21535; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01536; AVX1-NEXT:    retq1537;1538; AVX512-LABEL: test_fmaximum_v4f32_splat:1539; AVX512:       # %bb.0:1540; AVX512-NEXT:    vbroadcastss %xmm1, %xmm11541; AVX512-NEXT:    vblendvps %xmm0, %xmm1, %xmm0, %xmm21542; AVX512-NEXT:    vblendvps %xmm0, %xmm0, %xmm1, %xmm01543; AVX512-NEXT:    vmaxps %xmm2, %xmm0, %xmm11544; AVX512-NEXT:    vcmpunordps %xmm0, %xmm0, %xmm21545; AVX512-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01546; AVX512-NEXT:    retq1547;1548; AVX10_2-LABEL: test_fmaximum_v4f32_splat:1549; AVX10_2:       # %bb.0:1550; AVX10_2-NEXT:    vbroadcastss %xmm1, %xmm11551; AVX10_2-NEXT:    vminmaxps $1, %xmm1, %xmm0, %xmm01552; AVX10_2-NEXT:    retq1553;1554; X86-LABEL: test_fmaximum_v4f32_splat:1555; X86:       # %bb.0:1556; X86-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %xmm11557; X86-NEXT:    vblendvps %xmm0, %xmm1, %xmm0, %xmm21558; X86-NEXT:    vblendvps %xmm0, %xmm0, %xmm1, %xmm01559; X86-NEXT:    vmaxps %xmm2, %xmm0, %xmm11560; X86-NEXT:    vcmpunordps %xmm0, %xmm0, %xmm21561; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm01562; X86-NEXT:    retl1563  %splatinsert = insertelement <4 x float> poison, float %y, i64 01564  %vec = shufflevector <4 x float> %splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1565  %r = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> %vec) readnone1566  ret <4 x float> %r1567}1568 1569define <4 x half> @test_fmaximum_v4f16(<4 x half> %x, <4 x half> %y) nounwind {1570; SSE2-LABEL: test_fmaximum_v4f16:1571; SSE2:       # %bb.0:1572; SSE2-NEXT:    subq $104, %rsp1573; SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1574; SSE2-NEXT:    psrld $16, %xmm01575; SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1576; SSE2-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill1577; SSE2-NEXT:    movdqa %xmm1, %xmm01578; SSE2-NEXT:    psrld $16, %xmm01579; SSE2-NEXT:    callq __extendhfsf2@PLT1580; SSE2-NEXT:    movd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1581; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1582; SSE2-NEXT:    callq __extendhfsf2@PLT1583; SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 4-byte Folded Reload1584; SSE2-NEXT:    # xmm4 = mem[0],zero,zero,zero1585; SSE2-NEXT:    movdqa %xmm0, %xmm11586; SSE2-NEXT:    movd %xmm0, %eax1587; SSE2-NEXT:    testl %eax, %eax1588; SSE2-NEXT:    movdqa %xmm0, %xmm21589; SSE2-NEXT:    js .LBB33_21590; SSE2-NEXT:  # %bb.1:1591; SSE2-NEXT:    movdqa %xmm4, %xmm21592; SSE2-NEXT:  .LBB33_2:1593; SSE2-NEXT:    movdqa %xmm2, %xmm01594; SSE2-NEXT:    cmpunordss %xmm2, %xmm01595; SSE2-NEXT:    movaps %xmm0, %xmm31596; SSE2-NEXT:    andps %xmm2, %xmm31597; SSE2-NEXT:    js .LBB33_41598; SSE2-NEXT:  # %bb.3:1599; SSE2-NEXT:    movdqa %xmm1, %xmm41600; SSE2-NEXT:  .LBB33_4:1601; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1602; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]1603; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1604; SSE2-NEXT:    movaps (%rsp), %xmm1 # 16-byte Reload1605; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]1606; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1607; SSE2-NEXT:    maxss %xmm4, %xmm21608; SSE2-NEXT:    andnps %xmm2, %xmm01609; SSE2-NEXT:    orps %xmm3, %xmm01610; SSE2-NEXT:    callq __truncsfhf2@PLT1611; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1612; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1613; SSE2-NEXT:    callq __extendhfsf2@PLT1614; SSE2-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1615; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1616; SSE2-NEXT:    callq __extendhfsf2@PLT1617; SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 4-byte Folded Reload1618; SSE2-NEXT:    # xmm4 = mem[0],zero,zero,zero1619; SSE2-NEXT:    movdqa %xmm0, %xmm11620; SSE2-NEXT:    movd %xmm0, %eax1621; SSE2-NEXT:    testl %eax, %eax1622; SSE2-NEXT:    movdqa %xmm0, %xmm21623; SSE2-NEXT:    js .LBB33_61624; SSE2-NEXT:  # %bb.5:1625; SSE2-NEXT:    movdqa %xmm4, %xmm21626; SSE2-NEXT:  .LBB33_6:1627; SSE2-NEXT:    movdqa %xmm2, %xmm01628; SSE2-NEXT:    cmpunordss %xmm2, %xmm01629; SSE2-NEXT:    movaps %xmm0, %xmm31630; SSE2-NEXT:    andps %xmm2, %xmm31631; SSE2-NEXT:    js .LBB33_81632; SSE2-NEXT:  # %bb.7:1633; SSE2-NEXT:    movdqa %xmm1, %xmm41634; SSE2-NEXT:  .LBB33_8:1635; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1636; SSE2-NEXT:    psrlq $48, %xmm11637; SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1638; SSE2-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload1639; SSE2-NEXT:    psrlq $48, %xmm11640; SSE2-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill1641; SSE2-NEXT:    maxss %xmm4, %xmm21642; SSE2-NEXT:    andnps %xmm2, %xmm01643; SSE2-NEXT:    orps %xmm3, %xmm01644; SSE2-NEXT:    callq __truncsfhf2@PLT1645; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1646; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1647; SSE2-NEXT:    callq __extendhfsf2@PLT1648; SSE2-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1649; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1650; SSE2-NEXT:    callq __extendhfsf2@PLT1651; SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 4-byte Folded Reload1652; SSE2-NEXT:    # xmm4 = mem[0],zero,zero,zero1653; SSE2-NEXT:    movd %xmm0, %eax1654; SSE2-NEXT:    testl %eax, %eax1655; SSE2-NEXT:    movdqa %xmm0, %xmm21656; SSE2-NEXT:    js .LBB33_101657; SSE2-NEXT:  # %bb.9:1658; SSE2-NEXT:    movdqa %xmm4, %xmm21659; SSE2-NEXT:  .LBB33_10:1660; SSE2-NEXT:    movdqa %xmm2, %xmm11661; SSE2-NEXT:    cmpunordss %xmm2, %xmm11662; SSE2-NEXT:    movaps %xmm1, %xmm31663; SSE2-NEXT:    andps %xmm2, %xmm31664; SSE2-NEXT:    js .LBB33_121665; SSE2-NEXT:  # %bb.11:1666; SSE2-NEXT:    movdqa %xmm0, %xmm41667; SSE2-NEXT:  .LBB33_12:1668; SSE2-NEXT:    maxss %xmm4, %xmm21669; SSE2-NEXT:    andnps %xmm2, %xmm11670; SSE2-NEXT:    orps %xmm3, %xmm11671; SSE2-NEXT:    movaps %xmm1, %xmm01672; SSE2-NEXT:    callq __truncsfhf2@PLT1673; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1674; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1675; SSE2-NEXT:    callq __extendhfsf2@PLT1676; SSE2-NEXT:    movss %xmm0, (%rsp) # 4-byte Spill1677; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1678; SSE2-NEXT:    callq __extendhfsf2@PLT1679; SSE2-NEXT:    movd (%rsp), %xmm4 # 4-byte Folded Reload1680; SSE2-NEXT:    # xmm4 = mem[0],zero,zero,zero1681; SSE2-NEXT:    movdqa %xmm0, %xmm11682; SSE2-NEXT:    movd %xmm0, %eax1683; SSE2-NEXT:    testl %eax, %eax1684; SSE2-NEXT:    movdqa %xmm0, %xmm21685; SSE2-NEXT:    js .LBB33_141686; SSE2-NEXT:  # %bb.13:1687; SSE2-NEXT:    movdqa %xmm4, %xmm21688; SSE2-NEXT:  .LBB33_14:1689; SSE2-NEXT:    movdqa %xmm2, %xmm01690; SSE2-NEXT:    cmpunordss %xmm2, %xmm01691; SSE2-NEXT:    movaps %xmm0, %xmm31692; SSE2-NEXT:    andps %xmm2, %xmm31693; SSE2-NEXT:    js .LBB33_161694; SSE2-NEXT:  # %bb.15:1695; SSE2-NEXT:    movdqa %xmm1, %xmm41696; SSE2-NEXT:  .LBB33_16:1697; SSE2-NEXT:    maxss %xmm4, %xmm21698; SSE2-NEXT:    andnps %xmm2, %xmm01699; SSE2-NEXT:    orps %xmm3, %xmm01700; SSE2-NEXT:    callq __truncsfhf2@PLT1701; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1702; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1703; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1704; SSE2-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1705; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1706; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1707; SSE2-NEXT:    addq $104, %rsp1708; SSE2-NEXT:    retq1709;1710; AVX1-LABEL: test_fmaximum_v4f16:1711; AVX1:       # %bb.0:1712; AVX1-NEXT:    subq $120, %rsp1713; AVX1-NEXT:    vmovaps %xmm0, %xmm21714; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1715; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1716; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]1717; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1718; AVX1-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1719; AVX1-NEXT:    vpsrld $16, %xmm2, %xmm01720; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1721; AVX1-NEXT:    vmovaps %xmm1, (%rsp) # 16-byte Spill1722; AVX1-NEXT:    vpsrld $16, %xmm1, %xmm01723; AVX1-NEXT:    callq __extendhfsf2@PLT1724; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1725; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1726; AVX1-NEXT:    callq __extendhfsf2@PLT1727; AVX1-NEXT:    vmovd %xmm0, %eax1728; AVX1-NEXT:    testl %eax, %eax1729; AVX1-NEXT:    js .LBB33_11730; AVX1-NEXT:  # %bb.2:1731; AVX1-NEXT:    vmovdqa %xmm0, %xmm11732; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload1733; AVX1-NEXT:    jmp .LBB33_31734; AVX1-NEXT:  .LBB33_1:1735; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1736; AVX1-NEXT:    vmovdqa %xmm0, %xmm21737; AVX1-NEXT:  .LBB33_3:1738; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1739; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm01740; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1741; AVX1-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload1742; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm01743; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1744; AVX1-NEXT:    vmaxss %xmm1, %xmm2, %xmm01745; AVX1-NEXT:    vcmpunordss %xmm2, %xmm2, %xmm11746; AVX1-NEXT:    vblendvps %xmm1, %xmm2, %xmm0, %xmm01747; AVX1-NEXT:    callq __truncsfhf2@PLT1748; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1749; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1750; AVX1-NEXT:    callq __extendhfsf2@PLT1751; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1752; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1753; AVX1-NEXT:    callq __extendhfsf2@PLT1754; AVX1-NEXT:    vmovd %xmm0, %eax1755; AVX1-NEXT:    testl %eax, %eax1756; AVX1-NEXT:    js .LBB33_41757; AVX1-NEXT:  # %bb.5:1758; AVX1-NEXT:    vmovdqa %xmm0, %xmm11759; AVX1-NEXT:    vmovdqa (%rsp), %xmm2 # 16-byte Reload1760; AVX1-NEXT:    jmp .LBB33_61761; AVX1-NEXT:  .LBB33_4:1762; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload1763; AVX1-NEXT:    vmovdqa %xmm0, %xmm21764; AVX1-NEXT:  .LBB33_6:1765; AVX1-NEXT:    vmaxss %xmm1, %xmm2, %xmm01766; AVX1-NEXT:    vcmpunordss %xmm2, %xmm2, %xmm11767; AVX1-NEXT:    vblendvps %xmm1, %xmm2, %xmm0, %xmm01768; AVX1-NEXT:    callq __truncsfhf2@PLT1769; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1770; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1771; AVX1-NEXT:    callq __extendhfsf2@PLT1772; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1773; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1774; AVX1-NEXT:    callq __extendhfsf2@PLT1775; AVX1-NEXT:    vmovd %xmm0, %eax1776; AVX1-NEXT:    testl %eax, %eax1777; AVX1-NEXT:    js .LBB33_71778; AVX1-NEXT:  # %bb.8:1779; AVX1-NEXT:    vmovdqa %xmm0, %xmm11780; AVX1-NEXT:    vmovdqa (%rsp), %xmm2 # 16-byte Reload1781; AVX1-NEXT:    jmp .LBB33_91782; AVX1-NEXT:  .LBB33_7:1783; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload1784; AVX1-NEXT:    vmovdqa %xmm0, %xmm21785; AVX1-NEXT:  .LBB33_9:1786; AVX1-NEXT:    vmaxss %xmm1, %xmm2, %xmm01787; AVX1-NEXT:    vcmpunordss %xmm2, %xmm2, %xmm11788; AVX1-NEXT:    vblendvps %xmm1, %xmm2, %xmm0, %xmm01789; AVX1-NEXT:    callq __truncsfhf2@PLT1790; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1791; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1792; AVX1-NEXT:    callq __extendhfsf2@PLT1793; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1794; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1795; AVX1-NEXT:    callq __extendhfsf2@PLT1796; AVX1-NEXT:    vmovd %xmm0, %eax1797; AVX1-NEXT:    testl %eax, %eax1798; AVX1-NEXT:    js .LBB33_101799; AVX1-NEXT:  # %bb.11:1800; AVX1-NEXT:    vmovdqa %xmm0, %xmm11801; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload1802; AVX1-NEXT:    jmp .LBB33_121803; AVX1-NEXT:  .LBB33_10:1804; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1805; AVX1-NEXT:    vmovdqa %xmm0, %xmm21806; AVX1-NEXT:  .LBB33_12:1807; AVX1-NEXT:    vmaxss %xmm1, %xmm2, %xmm01808; AVX1-NEXT:    vcmpunordss %xmm2, %xmm2, %xmm11809; AVX1-NEXT:    vblendvps %xmm1, %xmm2, %xmm0, %xmm01810; AVX1-NEXT:    callq __truncsfhf2@PLT1811; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload1812; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1813; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1814; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload1815; AVX1-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]1816; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero1817; AVX1-NEXT:    addq $120, %rsp1818; AVX1-NEXT:    retq1819;1820; AVX512-LABEL: test_fmaximum_v4f16:1821; AVX512:       # %bb.0:1822; AVX512-NEXT:    pushq %rbp1823; AVX512-NEXT:    pushq %r151824; AVX512-NEXT:    pushq %r141825; AVX512-NEXT:    pushq %r131826; AVX512-NEXT:    pushq %r121827; AVX512-NEXT:    pushq %rbx1828; AVX512-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[3,3,3,3]1829; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm21830; AVX512-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]1831; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31832; AVX512-NEXT:    xorl %eax, %eax1833; AVX512-NEXT:    vucomiss %xmm2, %xmm31834; AVX512-NEXT:    movl $65535, %ecx # imm = 0xFFFF1835; AVX512-NEXT:    movl $0, %edx1836; AVX512-NEXT:    cmovpl %ecx, %edx1837; AVX512-NEXT:    movl $0, %edi1838; AVX512-NEXT:    cmoval %ecx, %edi1839; AVX512-NEXT:    vpsrldq {{.*#+}} xmm2 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1840; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm21841; AVX512-NEXT:    vpsrldq {{.*#+}} xmm3 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1842; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31843; AVX512-NEXT:    vucomiss %xmm2, %xmm31844; AVX512-NEXT:    movl $0, %esi1845; AVX512-NEXT:    cmovpl %ecx, %esi1846; AVX512-NEXT:    movl $0, %r9d1847; AVX512-NEXT:    cmoval %ecx, %r9d1848; AVX512-NEXT:    vshufpd {{.*#+}} xmm2 = xmm1[1,0]1849; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm21850; AVX512-NEXT:    vshufpd {{.*#+}} xmm3 = xmm0[1,0]1851; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31852; AVX512-NEXT:    vucomiss %xmm2, %xmm31853; AVX512-NEXT:    movl $0, %r8d1854; AVX512-NEXT:    cmovpl %ecx, %r8d1855; AVX512-NEXT:    movl $0, %r11d1856; AVX512-NEXT:    cmoval %ecx, %r11d1857; AVX512-NEXT:    vpsrlq $48, %xmm1, %xmm21858; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm21859; AVX512-NEXT:    vpsrlq $48, %xmm0, %xmm31860; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31861; AVX512-NEXT:    vucomiss %xmm2, %xmm31862; AVX512-NEXT:    movl $0, %r10d1863; AVX512-NEXT:    cmovpl %ecx, %r10d1864; AVX512-NEXT:    movl $0, %ebp1865; AVX512-NEXT:    cmoval %ecx, %ebp1866; AVX512-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]1867; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm21868; AVX512-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]1869; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31870; AVX512-NEXT:    vucomiss %xmm2, %xmm31871; AVX512-NEXT:    movl $0, %ebx1872; AVX512-NEXT:    cmovpl %ecx, %ebx1873; AVX512-NEXT:    movl $0, %r14d1874; AVX512-NEXT:    cmoval %ecx, %r14d1875; AVX512-NEXT:    vpsrld $16, %xmm1, %xmm21876; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm21877; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm31878; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31879; AVX512-NEXT:    vucomiss %xmm2, %xmm31880; AVX512-NEXT:    movl $0, %r15d1881; AVX512-NEXT:    cmovpl %ecx, %r15d1882; AVX512-NEXT:    movl $0, %r12d1883; AVX512-NEXT:    cmoval %ecx, %r12d1884; AVX512-NEXT:    vcvtph2ps %xmm1, %xmm21885; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm31886; AVX512-NEXT:    vucomiss %xmm2, %xmm31887; AVX512-NEXT:    movl $0, %r13d1888; AVX512-NEXT:    cmoval %ecx, %r13d1889; AVX512-NEXT:    vmovd %r13d, %xmm21890; AVX512-NEXT:    vpinsrw $1, %r12d, %xmm2, %xmm21891; AVX512-NEXT:    vpinsrw $2, %r14d, %xmm2, %xmm21892; AVX512-NEXT:    vpinsrw $3, %ebp, %xmm2, %xmm21893; AVX512-NEXT:    vpinsrw $4, %r11d, %xmm2, %xmm21894; AVX512-NEXT:    vpinsrw $5, %r9d, %xmm2, %xmm21895; AVX512-NEXT:    vpinsrw $6, %edi, %xmm2, %xmm21896; AVX512-NEXT:    movl $0, %edi1897; AVX512-NEXT:    cmovpl %ecx, %edi1898; AVX512-NEXT:    vpsrldq {{.*#+}} xmm3 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1899; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31900; AVX512-NEXT:    vpsrldq {{.*#+}} xmm4 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1901; AVX512-NEXT:    vcvtph2ps %xmm4, %xmm41902; AVX512-NEXT:    vucomiss %xmm3, %xmm41903; AVX512-NEXT:    movl $0, %r9d1904; AVX512-NEXT:    cmoval %ecx, %r9d1905; AVX512-NEXT:    vpinsrw $7, %r9d, %xmm2, %xmm21906; AVX512-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm21907; AVX512-NEXT:    vmovd %edi, %xmm31908; AVX512-NEXT:    vpinsrw $1, %r15d, %xmm3, %xmm31909; AVX512-NEXT:    vpinsrw $2, %ebx, %xmm3, %xmm31910; AVX512-NEXT:    vpinsrw $3, %r10d, %xmm3, %xmm31911; AVX512-NEXT:    vpinsrw $4, %r8d, %xmm3, %xmm31912; AVX512-NEXT:    vpinsrw $5, %esi, %xmm3, %xmm31913; AVX512-NEXT:    vpinsrw $6, %edx, %xmm3, %xmm31914; AVX512-NEXT:    movl $0, %edx1915; AVX512-NEXT:    cmovpl %ecx, %edx1916; AVX512-NEXT:    vpinsrw $7, %edx, %xmm3, %xmm31917; AVX512-NEXT:    vpbroadcastw {{.*#+}} xmm4 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]1918; AVX512-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm21919; AVX512-NEXT:    vpsrld $16, %xmm2, %xmm31920; AVX512-NEXT:    vcvtph2ps %xmm3, %xmm31921; AVX512-NEXT:    vpxor %xmm4, %xmm4, %xmm41922; AVX512-NEXT:    vucomiss %xmm4, %xmm31923; AVX512-NEXT:    movl $65535, %edx # imm = 0xFFFF1924; AVX512-NEXT:    cmovnel %eax, %edx1925; AVX512-NEXT:    cmovpl %eax, %edx1926; AVX512-NEXT:    vcvtph2ps %xmm2, %xmm31927; AVX512-NEXT:    vucomiss %xmm4, %xmm31928; AVX512-NEXT:    movl $65535, %esi # imm = 0xFFFF1929; AVX512-NEXT:    cmovnel %eax, %esi1930; AVX512-NEXT:    cmovpl %eax, %esi1931; AVX512-NEXT:    vmovd %esi, %xmm31932; AVX512-NEXT:    vpinsrw $1, %edx, %xmm3, %xmm31933; AVX512-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[1,1,3,3]1934; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm51935; AVX512-NEXT:    vucomiss %xmm4, %xmm51936; AVX512-NEXT:    movl $65535, %edx # imm = 0xFFFF1937; AVX512-NEXT:    cmovnel %eax, %edx1938; AVX512-NEXT:    cmovpl %eax, %edx1939; AVX512-NEXT:    vpinsrw $2, %edx, %xmm3, %xmm31940; AVX512-NEXT:    vpsrlq $48, %xmm2, %xmm51941; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm51942; AVX512-NEXT:    vucomiss %xmm4, %xmm51943; AVX512-NEXT:    movl $65535, %edx # imm = 0xFFFF1944; AVX512-NEXT:    cmovnel %eax, %edx1945; AVX512-NEXT:    cmovpl %eax, %edx1946; AVX512-NEXT:    vpinsrw $3, %edx, %xmm3, %xmm31947; AVX512-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[2,3,0,1]1948; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm51949; AVX512-NEXT:    vucomiss %xmm4, %xmm51950; AVX512-NEXT:    movl $65535, %edx # imm = 0xFFFF1951; AVX512-NEXT:    cmovnel %eax, %edx1952; AVX512-NEXT:    cmovpl %eax, %edx1953; AVX512-NEXT:    vpinsrw $4, %edx, %xmm3, %xmm31954; AVX512-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1955; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm51956; AVX512-NEXT:    vucomiss %xmm4, %xmm51957; AVX512-NEXT:    movl $65535, %edx # imm = 0xFFFF1958; AVX512-NEXT:    cmovnel %eax, %edx1959; AVX512-NEXT:    cmovpl %eax, %edx1960; AVX512-NEXT:    vpinsrw $5, %edx, %xmm3, %xmm31961; AVX512-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[3,3,3,3]1962; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm51963; AVX512-NEXT:    vucomiss %xmm4, %xmm51964; AVX512-NEXT:    movl $65535, %edx # imm = 0xFFFF1965; AVX512-NEXT:    cmovnel %eax, %edx1966; AVX512-NEXT:    cmovpl %eax, %edx1967; AVX512-NEXT:    vpinsrw $6, %edx, %xmm3, %xmm31968; AVX512-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1969; AVX512-NEXT:    vcvtph2ps %xmm5, %xmm51970; AVX512-NEXT:    vucomiss %xmm4, %xmm51971; AVX512-NEXT:    cmovnel %eax, %ecx1972; AVX512-NEXT:    cmovpl %eax, %ecx1973; AVX512-NEXT:    vpinsrw $7, %ecx, %xmm3, %xmm31974; AVX512-NEXT:    vpxor %xmm4, %xmm4, %xmm41975; AVX512-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm51976; AVX512-NEXT:    vpblendvb %xmm5, %xmm0, %xmm2, %xmm01977; AVX512-NEXT:    vpcmpeqw %xmm4, %xmm1, %xmm41978; AVX512-NEXT:    vpblendvb %xmm4, %xmm1, %xmm0, %xmm01979; AVX512-NEXT:    vpblendvb %xmm3, %xmm0, %xmm2, %xmm01980; AVX512-NEXT:    popq %rbx1981; AVX512-NEXT:    popq %r121982; AVX512-NEXT:    popq %r131983; AVX512-NEXT:    popq %r141984; AVX512-NEXT:    popq %r151985; AVX512-NEXT:    popq %rbp1986; AVX512-NEXT:    retq1987;1988; AVX10_2-LABEL: test_fmaximum_v4f16:1989; AVX10_2:       # %bb.0:1990; AVX10_2-NEXT:    vminmaxph $1, %xmm1, %xmm0, %xmm01991; AVX10_2-NEXT:    retq1992;1993; X86-LABEL: test_fmaximum_v4f16:1994; X86:       # %bb.0:1995; X86-NEXT:    subl $164, %esp1996; X86-NEXT:    vmovdqa %xmm0, %xmm21997; X86-NEXT:    vmovdqu %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1998; X86-NEXT:    vpsrlq $48, %xmm0, %xmm01999; X86-NEXT:    vmovdqu %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2000; X86-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm2[1,1,3,3]2001; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2002; X86-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]2003; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2004; X86-NEXT:    vpsrlq $48, %xmm1, %xmm02005; X86-NEXT:    vmovdqu %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2006; X86-NEXT:    vpsrld $16, %xmm2, %xmm02007; X86-NEXT:    vmovdqu %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2008; X86-NEXT:    vpsrld $16, %xmm1, %xmm02009; X86-NEXT:    vmovdqu %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2010; X86-NEXT:    vpextrw $0, %xmm1, (%esp)2011; X86-NEXT:    calll __extendhfsf22012; X86-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill2013; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2014; X86-NEXT:    vpextrw $0, %xmm0, (%esp)2015; X86-NEXT:    calll __extendhfsf22016; X86-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill2017; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2018; X86-NEXT:    vpextrw $0, %xmm0, (%esp)2019; X86-NEXT:    calll __extendhfsf22020; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2021; X86-NEXT:    vpextrw $0, %xmm0, (%esp)2022; X86-NEXT:    fstps {{[0-9]+}}(%esp)2023; X86-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload2024; X86-NEXT:    fstps {{[0-9]+}}(%esp)2025; X86-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero2026; X86-NEXT:    vmovd %xmm1, %eax2027; X86-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2028; X86-NEXT:    testl %eax, %eax2029; X86-NEXT:    js .LBB33_12030; X86-NEXT:  # %bb.2:2031; X86-NEXT:    vmovdqa %xmm1, %xmm22032; X86-NEXT:    jmp .LBB33_32033; X86-NEXT:  .LBB33_1:2034; X86-NEXT:    vmovdqa %xmm0, %xmm22035; X86-NEXT:    vmovdqa %xmm1, %xmm02036; X86-NEXT:  .LBB33_3:2037; X86-NEXT:    vmaxss %xmm2, %xmm0, %xmm12038; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22039; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02040; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2041; X86-NEXT:    calll __extendhfsf22042; X86-NEXT:    vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2043; X86-NEXT:    vmovss %xmm0, (%esp)2044; X86-NEXT:    fstps {{[0-9]+}}(%esp)2045; X86-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload2046; X86-NEXT:    fstps {{[0-9]+}}(%esp)2047; X86-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero2048; X86-NEXT:    vmovd %xmm1, %eax2049; X86-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2050; X86-NEXT:    testl %eax, %eax2051; X86-NEXT:    js .LBB33_42052; X86-NEXT:  # %bb.5:2053; X86-NEXT:    vmovdqa %xmm1, %xmm22054; X86-NEXT:    jmp .LBB33_62055; X86-NEXT:  .LBB33_4:2056; X86-NEXT:    vmovdqa %xmm0, %xmm22057; X86-NEXT:    vmovdqa %xmm1, %xmm02058; X86-NEXT:  .LBB33_6:2059; X86-NEXT:    vmaxss %xmm2, %xmm0, %xmm12060; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22061; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02062; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2063; X86-NEXT:    calll __truncsfhf22064; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2065; X86-NEXT:    vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2066; X86-NEXT:    vmovss %xmm0, (%esp)2067; X86-NEXT:    calll __truncsfhf22068; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2069; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2070; X86-NEXT:    vpextrw $0, %xmm0, (%esp)2071; X86-NEXT:    calll __extendhfsf22072; X86-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill2073; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2074; X86-NEXT:    vpextrw $0, %xmm0, (%esp)2075; X86-NEXT:    calll __extendhfsf22076; X86-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill2077; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2078; X86-NEXT:    vpextrw $0, %xmm0, (%esp)2079; X86-NEXT:    calll __extendhfsf22080; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2081; X86-NEXT:    vpextrw $0, %xmm0, (%esp)2082; X86-NEXT:    fstps {{[0-9]+}}(%esp)2083; X86-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload2084; X86-NEXT:    fstps {{[0-9]+}}(%esp)2085; X86-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero2086; X86-NEXT:    vmovd %xmm1, %eax2087; X86-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2088; X86-NEXT:    testl %eax, %eax2089; X86-NEXT:    js .LBB33_72090; X86-NEXT:  # %bb.8:2091; X86-NEXT:    vmovdqa %xmm1, %xmm22092; X86-NEXT:    jmp .LBB33_92093; X86-NEXT:  .LBB33_7:2094; X86-NEXT:    vmovdqa %xmm0, %xmm22095; X86-NEXT:    vmovdqa %xmm1, %xmm02096; X86-NEXT:  .LBB33_9:2097; X86-NEXT:    vmaxss %xmm2, %xmm0, %xmm12098; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22099; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02100; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2101; X86-NEXT:    calll __extendhfsf22102; X86-NEXT:    vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2103; X86-NEXT:    vmovss %xmm0, (%esp)2104; X86-NEXT:    fstps {{[0-9]+}}(%esp)2105; X86-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload2106; X86-NEXT:    fstps {{[0-9]+}}(%esp)2107; X86-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero2108; X86-NEXT:    vmovd %xmm1, %eax2109; X86-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2110; X86-NEXT:    testl %eax, %eax2111; X86-NEXT:    js .LBB33_102112; X86-NEXT:  # %bb.11:2113; X86-NEXT:    vmovdqa %xmm1, %xmm22114; X86-NEXT:    jmp .LBB33_122115; X86-NEXT:  .LBB33_10:2116; X86-NEXT:    vmovdqa %xmm0, %xmm22117; X86-NEXT:    vmovdqa %xmm1, %xmm02118; X86-NEXT:  .LBB33_12:2119; X86-NEXT:    vmaxss %xmm2, %xmm0, %xmm12120; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22121; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02122; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2123; X86-NEXT:    calll __truncsfhf22124; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2125; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2126; X86-NEXT:    vmovd %xmm0, (%esp)2127; X86-NEXT:    calll __truncsfhf22128; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Reload2129; X86-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2130; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Reload2131; X86-NEXT:    vpunpcklwd {{[-0-9]+}}(%e{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2132; X86-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2133; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2134; X86-NEXT:    addl $164, %esp2135; X86-NEXT:    retl2136  %r = call <4 x half> @llvm.maximum.v4f16(<4 x half> %x, <4 x half> %y)2137  ret <4 x half> %r2138}2139 2140define <4 x bfloat> @test_fmaximum_v4bf16(<4 x bfloat> %x, <4 x bfloat> %y) {2141; SSE2-LABEL: test_fmaximum_v4bf16:2142; SSE2:       # %bb.0:2143; SSE2-NEXT:    pushq %rbp2144; SSE2-NEXT:    .cfi_def_cfa_offset 162145; SSE2-NEXT:    pushq %r152146; SSE2-NEXT:    .cfi_def_cfa_offset 242147; SSE2-NEXT:    pushq %r142148; SSE2-NEXT:    .cfi_def_cfa_offset 322149; SSE2-NEXT:    pushq %rbx2150; SSE2-NEXT:    .cfi_def_cfa_offset 402151; SSE2-NEXT:    subq $56, %rsp2152; SSE2-NEXT:    .cfi_def_cfa_offset 962153; SSE2-NEXT:    .cfi_offset %rbx, -402154; SSE2-NEXT:    .cfi_offset %r14, -322155; SSE2-NEXT:    .cfi_offset %r15, -242156; SSE2-NEXT:    .cfi_offset %rbp, -162157; SSE2-NEXT:    pextrw $0, %xmm1, %r14d2158; SSE2-NEXT:    pextrw $0, %xmm0, %r15d2159; SSE2-NEXT:    movdqa %xmm1, %xmm22160; SSE2-NEXT:    psrld $16, %xmm22161; SSE2-NEXT:    pextrw $0, %xmm2, %eax2162; SSE2-NEXT:    movdqa %xmm0, %xmm22163; SSE2-NEXT:    psrld $16, %xmm22164; SSE2-NEXT:    pextrw $0, %xmm2, %ecx2165; SSE2-NEXT:    shll $16, %ecx2166; SSE2-NEXT:    movd %ecx, %xmm32167; SSE2-NEXT:    shll $16, %eax2168; SSE2-NEXT:    movd %eax, %xmm22169; SSE2-NEXT:    testl %ecx, %ecx2170; SSE2-NEXT:    movdqa %xmm3, %xmm72171; SSE2-NEXT:    js .LBB34_22172; SSE2-NEXT:  # %bb.1:2173; SSE2-NEXT:    movdqa %xmm2, %xmm72174; SSE2-NEXT:  .LBB34_2:2175; SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2176; SSE2-NEXT:    movdqa %xmm1, %xmm52177; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[1,1],xmm1[1,1]2178; SSE2-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill2179; SSE2-NEXT:    movdqa %xmm0, %xmm62180; SSE2-NEXT:    shufps {{.*#+}} xmm6 = xmm6[1,1],xmm0[1,1]2181; SSE2-NEXT:    movdqa %xmm7, %xmm02182; SSE2-NEXT:    cmpunordss %xmm7, %xmm02183; SSE2-NEXT:    movaps %xmm0, %xmm42184; SSE2-NEXT:    andps %xmm7, %xmm42185; SSE2-NEXT:    js .LBB34_42186; SSE2-NEXT:  # %bb.3:2187; SSE2-NEXT:    movdqa %xmm3, %xmm22188; SSE2-NEXT:  .LBB34_4:2189; SSE2-NEXT:    pextrw $0, %xmm5, %ebp2190; SSE2-NEXT:    pextrw $0, %xmm6, %ebx2191; SSE2-NEXT:    maxss %xmm2, %xmm72192; SSE2-NEXT:    andnps %xmm7, %xmm02193; SSE2-NEXT:    orps %xmm4, %xmm02194; SSE2-NEXT:    callq __truncsfbf2@PLT2195; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2196; SSE2-NEXT:    shll $16, %r15d2197; SSE2-NEXT:    movd %r15d, %xmm32198; SSE2-NEXT:    shll $16, %r14d2199; SSE2-NEXT:    movd %r14d, %xmm22200; SSE2-NEXT:    testl %r15d, %r15d2201; SSE2-NEXT:    movdqa %xmm3, %xmm12202; SSE2-NEXT:    js .LBB34_62203; SSE2-NEXT:  # %bb.5:2204; SSE2-NEXT:    movdqa %xmm2, %xmm12205; SSE2-NEXT:  .LBB34_6:2206; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload2207; SSE2-NEXT:    psrlq $48, %xmm52208; SSE2-NEXT:    movdqa (%rsp), %xmm6 # 16-byte Reload2209; SSE2-NEXT:    psrlq $48, %xmm62210; SSE2-NEXT:    movdqa %xmm1, %xmm02211; SSE2-NEXT:    cmpunordss %xmm1, %xmm02212; SSE2-NEXT:    movaps %xmm0, %xmm42213; SSE2-NEXT:    andps %xmm1, %xmm42214; SSE2-NEXT:    js .LBB34_82215; SSE2-NEXT:  # %bb.7:2216; SSE2-NEXT:    movdqa %xmm3, %xmm22217; SSE2-NEXT:  .LBB34_8:2218; SSE2-NEXT:    pextrw $0, %xmm5, %r15d2219; SSE2-NEXT:    pextrw $0, %xmm6, %r14d2220; SSE2-NEXT:    maxss %xmm2, %xmm12221; SSE2-NEXT:    andnps %xmm1, %xmm02222; SSE2-NEXT:    orps %xmm4, %xmm02223; SSE2-NEXT:    callq __truncsfbf2@PLT2224; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2225; SSE2-NEXT:    shll $16, %ebx2226; SSE2-NEXT:    movd %ebx, %xmm12227; SSE2-NEXT:    shll $16, %ebp2228; SSE2-NEXT:    movd %ebp, %xmm32229; SSE2-NEXT:    testl %ebx, %ebx2230; SSE2-NEXT:    movdqa %xmm1, %xmm22231; SSE2-NEXT:    js .LBB34_102232; SSE2-NEXT:  # %bb.9:2233; SSE2-NEXT:    movdqa %xmm3, %xmm22234; SSE2-NEXT:  .LBB34_10:2235; SSE2-NEXT:    movdqa %xmm2, %xmm02236; SSE2-NEXT:    cmpunordss %xmm2, %xmm02237; SSE2-NEXT:    movaps %xmm0, %xmm42238; SSE2-NEXT:    andps %xmm2, %xmm42239; SSE2-NEXT:    js .LBB34_122240; SSE2-NEXT:  # %bb.11:2241; SSE2-NEXT:    movdqa %xmm1, %xmm32242; SSE2-NEXT:  .LBB34_12:2243; SSE2-NEXT:    maxss %xmm3, %xmm22244; SSE2-NEXT:    andnps %xmm2, %xmm02245; SSE2-NEXT:    orps %xmm4, %xmm02246; SSE2-NEXT:    callq __truncsfbf2@PLT2247; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill2248; SSE2-NEXT:    shll $16, %r14d2249; SSE2-NEXT:    movd %r14d, %xmm12250; SSE2-NEXT:    shll $16, %r15d2251; SSE2-NEXT:    movd %r15d, %xmm32252; SSE2-NEXT:    testl %r14d, %r14d2253; SSE2-NEXT:    movdqa %xmm1, %xmm22254; SSE2-NEXT:    js .LBB34_142255; SSE2-NEXT:  # %bb.13:2256; SSE2-NEXT:    movdqa %xmm3, %xmm22257; SSE2-NEXT:  .LBB34_14:2258; SSE2-NEXT:    movdqa %xmm2, %xmm02259; SSE2-NEXT:    cmpunordss %xmm2, %xmm02260; SSE2-NEXT:    movaps %xmm0, %xmm42261; SSE2-NEXT:    andps %xmm2, %xmm42262; SSE2-NEXT:    js .LBB34_162263; SSE2-NEXT:  # %bb.15:2264; SSE2-NEXT:    movdqa %xmm1, %xmm32265; SSE2-NEXT:  .LBB34_16:2266; SSE2-NEXT:    maxss %xmm3, %xmm22267; SSE2-NEXT:    andnps %xmm2, %xmm02268; SSE2-NEXT:    orps %xmm4, %xmm02269; SSE2-NEXT:    callq __truncsfbf2@PLT2270; SSE2-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload2271; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2272; SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2273; SSE2-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2274; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2275; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2276; SSE2-NEXT:    addq $56, %rsp2277; SSE2-NEXT:    .cfi_def_cfa_offset 402278; SSE2-NEXT:    popq %rbx2279; SSE2-NEXT:    .cfi_def_cfa_offset 322280; SSE2-NEXT:    popq %r142281; SSE2-NEXT:    .cfi_def_cfa_offset 242282; SSE2-NEXT:    popq %r152283; SSE2-NEXT:    .cfi_def_cfa_offset 162284; SSE2-NEXT:    popq %rbp2285; SSE2-NEXT:    .cfi_def_cfa_offset 82286; SSE2-NEXT:    retq2287;2288; AVX1-LABEL: test_fmaximum_v4bf16:2289; AVX1:       # %bb.0:2290; AVX1-NEXT:    pushq %rbp2291; AVX1-NEXT:    .cfi_def_cfa_offset 162292; AVX1-NEXT:    pushq %r152293; AVX1-NEXT:    .cfi_def_cfa_offset 242294; AVX1-NEXT:    pushq %r142295; AVX1-NEXT:    .cfi_def_cfa_offset 322296; AVX1-NEXT:    pushq %r132297; AVX1-NEXT:    .cfi_def_cfa_offset 402298; AVX1-NEXT:    pushq %r122299; AVX1-NEXT:    .cfi_def_cfa_offset 482300; AVX1-NEXT:    pushq %rbx2301; AVX1-NEXT:    .cfi_def_cfa_offset 562302; AVX1-NEXT:    subq $56, %rsp2303; AVX1-NEXT:    .cfi_def_cfa_offset 1122304; AVX1-NEXT:    .cfi_offset %rbx, -562305; AVX1-NEXT:    .cfi_offset %r12, -482306; AVX1-NEXT:    .cfi_offset %r13, -402307; AVX1-NEXT:    .cfi_offset %r14, -322308; AVX1-NEXT:    .cfi_offset %r15, -242309; AVX1-NEXT:    .cfi_offset %rbp, -162310; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm22311; AVX1-NEXT:    vpsrlq $48, %xmm1, %xmm32312; AVX1-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]2313; AVX1-NEXT:    vpextrw $0, %xmm4, %ebx2314; AVX1-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm1[1,1,3,3]2315; AVX1-NEXT:    vpextrw $0, %xmm4, %r14d2316; AVX1-NEXT:    vpextrw $0, %xmm0, %r12d2317; AVX1-NEXT:    vpextrw $0, %xmm1, %r13d2318; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm02319; AVX1-NEXT:    vpextrw $0, %xmm0, %eax2320; AVX1-NEXT:    vpsrld $16, %xmm1, %xmm02321; AVX1-NEXT:    vpextrw $0, %xmm0, %ecx2322; AVX1-NEXT:    shll $16, %ecx2323; AVX1-NEXT:    vmovd %ecx, %xmm02324; AVX1-NEXT:    shll $16, %eax2325; AVX1-NEXT:    vmovd %eax, %xmm42326; AVX1-NEXT:    js .LBB34_12327; AVX1-NEXT:  # %bb.2:2328; AVX1-NEXT:    vmovdqa %xmm4, %xmm12329; AVX1-NEXT:    jmp .LBB34_32330; AVX1-NEXT:  .LBB34_1:2331; AVX1-NEXT:    vmovdqa %xmm0, %xmm12332; AVX1-NEXT:    vmovdqa %xmm4, %xmm02333; AVX1-NEXT:  .LBB34_3:2334; AVX1-NEXT:    vpextrw $0, %xmm2, %ebp2335; AVX1-NEXT:    vpextrw $0, %xmm3, %r15d2336; AVX1-NEXT:    vmaxss %xmm1, %xmm0, %xmm12337; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22338; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02339; AVX1-NEXT:    callq __truncsfbf2@PLT2340; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2341; AVX1-NEXT:    shll $16, %r13d2342; AVX1-NEXT:    vmovd %r13d, %xmm02343; AVX1-NEXT:    shll $16, %r12d2344; AVX1-NEXT:    vmovd %r12d, %xmm22345; AVX1-NEXT:    js .LBB34_42346; AVX1-NEXT:  # %bb.5:2347; AVX1-NEXT:    vmovdqa %xmm2, %xmm12348; AVX1-NEXT:    jmp .LBB34_62349; AVX1-NEXT:  .LBB34_4:2350; AVX1-NEXT:    vmovdqa %xmm0, %xmm12351; AVX1-NEXT:    vmovdqa %xmm2, %xmm02352; AVX1-NEXT:  .LBB34_6:2353; AVX1-NEXT:    vmaxss %xmm1, %xmm0, %xmm12354; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22355; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02356; AVX1-NEXT:    callq __truncsfbf2@PLT2357; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2358; AVX1-NEXT:    shll $16, %r14d2359; AVX1-NEXT:    vmovd %r14d, %xmm02360; AVX1-NEXT:    shll $16, %ebx2361; AVX1-NEXT:    vmovd %ebx, %xmm22362; AVX1-NEXT:    js .LBB34_72363; AVX1-NEXT:  # %bb.8:2364; AVX1-NEXT:    vmovdqa %xmm2, %xmm12365; AVX1-NEXT:    jmp .LBB34_92366; AVX1-NEXT:  .LBB34_7:2367; AVX1-NEXT:    vmovdqa %xmm0, %xmm12368; AVX1-NEXT:    vmovdqa %xmm2, %xmm02369; AVX1-NEXT:  .LBB34_9:2370; AVX1-NEXT:    vmaxss %xmm1, %xmm0, %xmm12371; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22372; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02373; AVX1-NEXT:    callq __truncsfbf2@PLT2374; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2375; AVX1-NEXT:    shll $16, %r15d2376; AVX1-NEXT:    vmovd %r15d, %xmm02377; AVX1-NEXT:    shll $16, %ebp2378; AVX1-NEXT:    vmovd %ebp, %xmm22379; AVX1-NEXT:    js .LBB34_102380; AVX1-NEXT:  # %bb.11:2381; AVX1-NEXT:    vmovdqa %xmm2, %xmm12382; AVX1-NEXT:    jmp .LBB34_122383; AVX1-NEXT:  .LBB34_10:2384; AVX1-NEXT:    vmovdqa %xmm0, %xmm12385; AVX1-NEXT:    vmovdqa %xmm2, %xmm02386; AVX1-NEXT:  .LBB34_12:2387; AVX1-NEXT:    vmaxss %xmm1, %xmm0, %xmm12388; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22389; AVX1-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02390; AVX1-NEXT:    callq __truncsfbf2@PLT2391; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload2392; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2393; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2394; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2395; AVX1-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2396; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2397; AVX1-NEXT:    addq $56, %rsp2398; AVX1-NEXT:    .cfi_def_cfa_offset 562399; AVX1-NEXT:    popq %rbx2400; AVX1-NEXT:    .cfi_def_cfa_offset 482401; AVX1-NEXT:    popq %r122402; AVX1-NEXT:    .cfi_def_cfa_offset 402403; AVX1-NEXT:    popq %r132404; AVX1-NEXT:    .cfi_def_cfa_offset 322405; AVX1-NEXT:    popq %r142406; AVX1-NEXT:    .cfi_def_cfa_offset 242407; AVX1-NEXT:    popq %r152408; AVX1-NEXT:    .cfi_def_cfa_offset 162409; AVX1-NEXT:    popq %rbp2410; AVX1-NEXT:    .cfi_def_cfa_offset 82411; AVX1-NEXT:    retq2412;2413; AVX512-LABEL: test_fmaximum_v4bf16:2414; AVX512:       # %bb.0:2415; AVX512-NEXT:    pushq %rbp2416; AVX512-NEXT:    .cfi_def_cfa_offset 162417; AVX512-NEXT:    pushq %r152418; AVX512-NEXT:    .cfi_def_cfa_offset 242419; AVX512-NEXT:    pushq %r142420; AVX512-NEXT:    .cfi_def_cfa_offset 322421; AVX512-NEXT:    pushq %r132422; AVX512-NEXT:    .cfi_def_cfa_offset 402423; AVX512-NEXT:    pushq %r122424; AVX512-NEXT:    .cfi_def_cfa_offset 482425; AVX512-NEXT:    pushq %rbx2426; AVX512-NEXT:    .cfi_def_cfa_offset 562427; AVX512-NEXT:    pushq %rax2428; AVX512-NEXT:    .cfi_def_cfa_offset 642429; AVX512-NEXT:    .cfi_offset %rbx, -562430; AVX512-NEXT:    .cfi_offset %r12, -482431; AVX512-NEXT:    .cfi_offset %r13, -402432; AVX512-NEXT:    .cfi_offset %r14, -322433; AVX512-NEXT:    .cfi_offset %r15, -242434; AVX512-NEXT:    .cfi_offset %rbp, -162435; AVX512-NEXT:    vmovq %xmm1, %r132436; AVX512-NEXT:    movq %r13, %rbx2437; AVX512-NEXT:    shrq $32, %rbx2438; AVX512-NEXT:    vmovq %xmm0, %rbp2439; AVX512-NEXT:    movq %rbp, %r142440; AVX512-NEXT:    shrq $32, %r142441; AVX512-NEXT:    movq %r13, %r152442; AVX512-NEXT:    shrq $48, %r152443; AVX512-NEXT:    movq %rbp, %r122444; AVX512-NEXT:    shrq $48, %r122445; AVX512-NEXT:    movl %ebp, %eax2446; AVX512-NEXT:    andl $-65536, %eax # imm = 0xFFFF00002447; AVX512-NEXT:    sets %cl2448; AVX512-NEXT:    kmovw %ecx, %k12449; AVX512-NEXT:    movl %r13d, %ecx2450; AVX512-NEXT:    andl $-65536, %ecx # imm = 0xFFFF00002451; AVX512-NEXT:    vmovd %ecx, %xmm12452; AVX512-NEXT:    vmovd %eax, %xmm02453; AVX512-NEXT:    vmovdqa %xmm0, %xmm22454; AVX512-NEXT:    vmovss %xmm1, %xmm2, %xmm2 {%k1}2455; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}2456; AVX512-NEXT:    vmaxss %xmm2, %xmm1, %xmm02457; AVX512-NEXT:    vcmpunordss %xmm1, %xmm1, %k12458; AVX512-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}2459; AVX512-NEXT:    callq __truncsfbf2@PLT2460; AVX512-NEXT:    vpextrw $0, %xmm0, {{[0-9]+}}(%rsp)2461; AVX512-NEXT:    shll $16, %ebp2462; AVX512-NEXT:    sets %al2463; AVX512-NEXT:    kmovw %eax, %k12464; AVX512-NEXT:    shll $16, %r13d2465; AVX512-NEXT:    vmovd %r13d, %xmm12466; AVX512-NEXT:    vmovd %ebp, %xmm02467; AVX512-NEXT:    vmovdqa %xmm0, %xmm22468; AVX512-NEXT:    vmovss %xmm1, %xmm2, %xmm2 {%k1}2469; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}2470; AVX512-NEXT:    vmaxss %xmm2, %xmm1, %xmm02471; AVX512-NEXT:    vcmpunordss %xmm1, %xmm1, %k12472; AVX512-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}2473; AVX512-NEXT:    callq __truncsfbf2@PLT2474; AVX512-NEXT:    vpextrw $0, %xmm0, (%rsp)2475; AVX512-NEXT:    shll $16, %r12d2476; AVX512-NEXT:    sets %al2477; AVX512-NEXT:    kmovw %eax, %k12478; AVX512-NEXT:    shll $16, %r15d2479; AVX512-NEXT:    vmovd %r15d, %xmm12480; AVX512-NEXT:    vmovd %r12d, %xmm02481; AVX512-NEXT:    vmovdqa %xmm0, %xmm22482; AVX512-NEXT:    vmovss %xmm1, %xmm2, %xmm2 {%k1}2483; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}2484; AVX512-NEXT:    vmaxss %xmm2, %xmm1, %xmm02485; AVX512-NEXT:    vcmpunordss %xmm1, %xmm1, %k12486; AVX512-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}2487; AVX512-NEXT:    callq __truncsfbf2@PLT2488; AVX512-NEXT:    vpextrw $0, %xmm0, {{[0-9]+}}(%rsp)2489; AVX512-NEXT:    shll $16, %r14d2490; AVX512-NEXT:    sets %al2491; AVX512-NEXT:    kmovw %eax, %k12492; AVX512-NEXT:    shll $16, %ebx2493; AVX512-NEXT:    vmovd %ebx, %xmm12494; AVX512-NEXT:    vmovd %r14d, %xmm02495; AVX512-NEXT:    vmovdqa %xmm0, %xmm22496; AVX512-NEXT:    vmovss %xmm1, %xmm2, %xmm2 {%k1}2497; AVX512-NEXT:    vmovss %xmm0, %xmm1, %xmm1 {%k1}2498; AVX512-NEXT:    vmaxss %xmm2, %xmm1, %xmm02499; AVX512-NEXT:    vcmpunordss %xmm1, %xmm1, %k12500; AVX512-NEXT:    vmovss %xmm1, %xmm0, %xmm0 {%k1}2501; AVX512-NEXT:    callq __truncsfbf2@PLT2502; AVX512-NEXT:    vpextrw $0, %xmm0, {{[0-9]+}}(%rsp)2503; AVX512-NEXT:    vmovaps (%rsp), %xmm02504; AVX512-NEXT:    addq $8, %rsp2505; AVX512-NEXT:    .cfi_def_cfa_offset 562506; AVX512-NEXT:    popq %rbx2507; AVX512-NEXT:    .cfi_def_cfa_offset 482508; AVX512-NEXT:    popq %r122509; AVX512-NEXT:    .cfi_def_cfa_offset 402510; AVX512-NEXT:    popq %r132511; AVX512-NEXT:    .cfi_def_cfa_offset 322512; AVX512-NEXT:    popq %r142513; AVX512-NEXT:    .cfi_def_cfa_offset 242514; AVX512-NEXT:    popq %r152515; AVX512-NEXT:    .cfi_def_cfa_offset 162516; AVX512-NEXT:    popq %rbp2517; AVX512-NEXT:    .cfi_def_cfa_offset 82518; AVX512-NEXT:    retq2519;2520; AVX10_2-LABEL: test_fmaximum_v4bf16:2521; AVX10_2:       # %bb.0:2522; AVX10_2-NEXT:    vminmaxbf16 $1, %xmm1, %xmm0, %xmm02523; AVX10_2-NEXT:    retq2524;2525; X86-LABEL: test_fmaximum_v4bf16:2526; X86:       # %bb.0:2527; X86-NEXT:    pushl %ebp2528; X86-NEXT:    .cfi_def_cfa_offset 82529; X86-NEXT:    pushl %ebx2530; X86-NEXT:    .cfi_def_cfa_offset 122531; X86-NEXT:    pushl %edi2532; X86-NEXT:    .cfi_def_cfa_offset 162533; X86-NEXT:    pushl %esi2534; X86-NEXT:    .cfi_def_cfa_offset 202535; X86-NEXT:    subl $68, %esp2536; X86-NEXT:    .cfi_def_cfa_offset 882537; X86-NEXT:    .cfi_offset %esi, -202538; X86-NEXT:    .cfi_offset %edi, -162539; X86-NEXT:    .cfi_offset %ebx, -122540; X86-NEXT:    .cfi_offset %ebp, -82541; X86-NEXT:    vpsrlq $48, %xmm0, %xmm22542; X86-NEXT:    vpsrlq $48, %xmm1, %xmm32543; X86-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]2544; X86-NEXT:    vpextrw $0, %xmm4, %esi2545; X86-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm1[1,1,3,3]2546; X86-NEXT:    vpextrw $0, %xmm4, %ebx2547; X86-NEXT:    vpextrw $0, %xmm0, %eax2548; X86-NEXT:    vpextrw $0, %xmm1, %ecx2549; X86-NEXT:    vpsrld $16, %xmm0, %xmm02550; X86-NEXT:    vpextrw $0, %xmm0, %edx2551; X86-NEXT:    vpsrld $16, %xmm1, %xmm02552; X86-NEXT:    vpextrw $0, %xmm0, %edi2553; X86-NEXT:    shll $16, %edi2554; X86-NEXT:    vmovd %edi, %xmm02555; X86-NEXT:    shll $16, %edx2556; X86-NEXT:    vmovd %edx, %xmm42557; X86-NEXT:    js .LBB34_12558; X86-NEXT:  # %bb.2:2559; X86-NEXT:    vmovdqa %xmm4, %xmm12560; X86-NEXT:    jmp .LBB34_32561; X86-NEXT:  .LBB34_1:2562; X86-NEXT:    vmovdqa %xmm0, %xmm12563; X86-NEXT:    vmovdqa %xmm4, %xmm02564; X86-NEXT:  .LBB34_3:2565; X86-NEXT:    vpextrw $0, %xmm2, %edi2566; X86-NEXT:    vpextrw $0, %xmm3, %ebp2567; X86-NEXT:    vmaxss %xmm1, %xmm0, %xmm12568; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22569; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02570; X86-NEXT:    vmovss %xmm0, (%esp)2571; X86-NEXT:    shll $16, %ecx2572; X86-NEXT:    vmovd %ecx, %xmm02573; X86-NEXT:    shll $16, %eax2574; X86-NEXT:    vmovd %eax, %xmm22575; X86-NEXT:    js .LBB34_42576; X86-NEXT:  # %bb.5:2577; X86-NEXT:    vmovdqa %xmm2, %xmm12578; X86-NEXT:    jmp .LBB34_62579; X86-NEXT:  .LBB34_4:2580; X86-NEXT:    vmovdqa %xmm0, %xmm12581; X86-NEXT:    vmovdqa %xmm2, %xmm02582; X86-NEXT:  .LBB34_6:2583; X86-NEXT:    vmaxss %xmm1, %xmm0, %xmm12584; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22585; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02586; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2587; X86-NEXT:    calll __truncsfbf22588; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2589; X86-NEXT:    vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2590; X86-NEXT:    vmovss %xmm0, (%esp)2591; X86-NEXT:    shll $16, %ebx2592; X86-NEXT:    vmovd %ebx, %xmm02593; X86-NEXT:    shll $16, %esi2594; X86-NEXT:    vmovd %esi, %xmm22595; X86-NEXT:    js .LBB34_72596; X86-NEXT:  # %bb.8:2597; X86-NEXT:    vmovdqa %xmm2, %xmm12598; X86-NEXT:    jmp .LBB34_92599; X86-NEXT:  .LBB34_7:2600; X86-NEXT:    vmovdqa %xmm0, %xmm12601; X86-NEXT:    vmovdqa %xmm2, %xmm02602; X86-NEXT:  .LBB34_9:2603; X86-NEXT:    vmaxss %xmm1, %xmm0, %xmm12604; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22605; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02606; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2607; X86-NEXT:    calll __truncsfbf22608; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2609; X86-NEXT:    vmovups {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2610; X86-NEXT:    vmovss %xmm0, (%esp)2611; X86-NEXT:    shll $16, %ebp2612; X86-NEXT:    vmovd %ebp, %xmm02613; X86-NEXT:    shll $16, %edi2614; X86-NEXT:    vmovd %edi, %xmm22615; X86-NEXT:    js .LBB34_102616; X86-NEXT:  # %bb.11:2617; X86-NEXT:    vmovdqa %xmm2, %xmm12618; X86-NEXT:    jmp .LBB34_122619; X86-NEXT:  .LBB34_10:2620; X86-NEXT:    vmovdqa %xmm0, %xmm12621; X86-NEXT:    vmovdqa %xmm2, %xmm02622; X86-NEXT:  .LBB34_12:2623; X86-NEXT:    vmaxss %xmm1, %xmm0, %xmm12624; X86-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm22625; X86-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm02626; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2627; X86-NEXT:    calll __truncsfbf22628; X86-NEXT:    vmovups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill2629; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload2630; X86-NEXT:    vmovd %xmm0, (%esp)2631; X86-NEXT:    calll __truncsfbf22632; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Reload2633; X86-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2634; X86-NEXT:    vmovdqu {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Reload2635; X86-NEXT:    vpunpcklwd {{[-0-9]+}}(%e{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2636; X86-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2637; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2638; X86-NEXT:    addl $68, %esp2639; X86-NEXT:    .cfi_def_cfa_offset 202640; X86-NEXT:    popl %esi2641; X86-NEXT:    .cfi_def_cfa_offset 162642; X86-NEXT:    popl %edi2643; X86-NEXT:    .cfi_def_cfa_offset 122644; X86-NEXT:    popl %ebx2645; X86-NEXT:    .cfi_def_cfa_offset 82646; X86-NEXT:    popl %ebp2647; X86-NEXT:    .cfi_def_cfa_offset 42648; X86-NEXT:    retl2649  %r = call <4 x bfloat> @llvm.maximum.v4bf16(<4 x bfloat> %x, <4 x bfloat> %y)2650  ret <4 x bfloat> %r2651}2652 2653; nnan minimum(Y, +inf) -> Y2654define float @test_fminimum_inf_nnan(float %x, float %y) nounwind {2655; SSE2-LABEL: test_fminimum_inf_nnan:2656; SSE2:       # %bb.0:2657; SSE2-NEXT:    movaps %xmm1, %xmm02658; SSE2-NEXT:    retq2659;2660; AVX-LABEL: test_fminimum_inf_nnan:2661; AVX:       # %bb.0:2662; AVX-NEXT:    vmovaps %xmm1, %xmm02663; AVX-NEXT:    retq2664;2665; AVX10_2-LABEL: test_fminimum_inf_nnan:2666; AVX10_2:       # %bb.0:2667; AVX10_2-NEXT:    vmovaps %xmm1, %xmm02668; AVX10_2-NEXT:    retq2669;2670; X86-LABEL: test_fminimum_inf_nnan:2671; X86:       # %bb.0:2672; X86-NEXT:    flds {{[0-9]+}}(%esp)2673; X86-NEXT:    retl2674  %1 = call nnan float @llvm.minimum.f32(float %y, float 0x7ff0000000000000)2675  ret float %12676}2677 2678; nnan maximum(Y, -inf) -> Y2679define float @test_fmaximum_neg_inf_nnan(float %x, float %y) nounwind {2680; SSE2-LABEL: test_fmaximum_neg_inf_nnan:2681; SSE2:       # %bb.0:2682; SSE2-NEXT:    movaps %xmm1, %xmm02683; SSE2-NEXT:    retq2684;2685; AVX-LABEL: test_fmaximum_neg_inf_nnan:2686; AVX:       # %bb.0:2687; AVX-NEXT:    vmovaps %xmm1, %xmm02688; AVX-NEXT:    retq2689;2690; AVX10_2-LABEL: test_fmaximum_neg_inf_nnan:2691; AVX10_2:       # %bb.0:2692; AVX10_2-NEXT:    vmovaps %xmm1, %xmm02693; AVX10_2-NEXT:    retq2694;2695; X86-LABEL: test_fmaximum_neg_inf_nnan:2696; X86:       # %bb.0:2697; X86-NEXT:    flds {{[0-9]+}}(%esp)2698; X86-NEXT:    retl2699  %1 = call nnan float @llvm.maximum.f32(float %y, float 0xfff0000000000000)2700  ret float %12701}2702 2703; Test SNaN quieting2704define float @test_fmaximum_snan(float %x) {2705; SSE2-LABEL: test_fmaximum_snan:2706; SSE2:       # %bb.0:2707; SSE2-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]2708; SSE2-NEXT:    retq2709;2710; AVX-LABEL: test_fmaximum_snan:2711; AVX:       # %bb.0:2712; AVX-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]2713; AVX-NEXT:    retq2714;2715; AVX10_2-LABEL: test_fmaximum_snan:2716; AVX10_2:       # %bb.0:2717; AVX10_2-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]2718; AVX10_2-NEXT:    retq2719;2720; X86-LABEL: test_fmaximum_snan:2721; X86:       # %bb.0:2722; X86-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2723; X86-NEXT:    retl2724  %1 = tail call float @llvm.maximum.f32(float 0x7ff4000000000000, float %x)2725  ret float %12726}2727 2728define float @test_fminimum_snan(float %x) {2729; SSE2-LABEL: test_fminimum_snan:2730; SSE2:       # %bb.0:2731; SSE2-NEXT:    movss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]2732; SSE2-NEXT:    retq2733;2734; AVX-LABEL: test_fminimum_snan:2735; AVX:       # %bb.0:2736; AVX-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]2737; AVX-NEXT:    retq2738;2739; AVX10_2-LABEL: test_fminimum_snan:2740; AVX10_2:       # %bb.0:2741; AVX10_2-NEXT:    vmovss {{.*#+}} xmm0 = [NaN,0.0E+0,0.0E+0,0.0E+0]2742; AVX10_2-NEXT:    retq2743;2744; X86-LABEL: test_fminimum_snan:2745; X86:       # %bb.0:2746; X86-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}2747; X86-NEXT:    retl2748  %1 = tail call float @llvm.minimum.f32(float 0x7ff4000000000000, float %x)2749  ret float %12750}2751