brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.5 KiB · 8c64dd2 Raw
997 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512fp16 -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512fp16 -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=X644 5define <8 x i16> @test_v8f16_oeq_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {6; X86-LABEL: test_v8f16_oeq_q:7; X86:       # %bb.0:8; X86-NEXT:    pushl %ebp9; X86-NEXT:    movl %esp, %ebp10; X86-NEXT:    andl $-16, %esp11; X86-NEXT:    subl $16, %esp12; X86-NEXT:    vcmpeqph 8(%ebp), %xmm2, %k113; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}14; X86-NEXT:    movl %ebp, %esp15; X86-NEXT:    popl %ebp16; X86-NEXT:    retl17;18; X64-LABEL: test_v8f16_oeq_q:19; X64:       # %bb.0:20; X64-NEXT:    vcmpeqph %xmm3, %xmm2, %k121; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}22; X64-NEXT:    retq23  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(24                                               <8 x half> %f1, <8 x half> %f2, metadata !"oeq",25                                               metadata !"fpexcept.strict") #026  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b27  ret <8 x i16> %res28}29 30define <8 x i16> @test_v8f16_ogt_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {31; X86-LABEL: test_v8f16_ogt_q:32; X86:       # %bb.0:33; X86-NEXT:    pushl %ebp34; X86-NEXT:    movl %esp, %ebp35; X86-NEXT:    andl $-16, %esp36; X86-NEXT:    subl $16, %esp37; X86-NEXT:    vcmpgt_oqph 8(%ebp), %xmm2, %k138; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}39; X86-NEXT:    movl %ebp, %esp40; X86-NEXT:    popl %ebp41; X86-NEXT:    retl42;43; X64-LABEL: test_v8f16_ogt_q:44; X64:       # %bb.0:45; X64-NEXT:    vcmplt_oqph %xmm2, %xmm3, %k146; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}47; X64-NEXT:    retq48  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(49                                               <8 x half> %f1, <8 x half> %f2, metadata !"ogt",50                                               metadata !"fpexcept.strict") #051  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b52  ret <8 x i16> %res53}54 55define <8 x i16> @test_v8f16_oge_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {56; X86-LABEL: test_v8f16_oge_q:57; X86:       # %bb.0:58; X86-NEXT:    pushl %ebp59; X86-NEXT:    movl %esp, %ebp60; X86-NEXT:    andl $-16, %esp61; X86-NEXT:    subl $16, %esp62; X86-NEXT:    vcmpge_oqph 8(%ebp), %xmm2, %k163; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}64; X86-NEXT:    movl %ebp, %esp65; X86-NEXT:    popl %ebp66; X86-NEXT:    retl67;68; X64-LABEL: test_v8f16_oge_q:69; X64:       # %bb.0:70; X64-NEXT:    vcmple_oqph %xmm2, %xmm3, %k171; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}72; X64-NEXT:    retq73  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(74                                               <8 x half> %f1, <8 x half> %f2, metadata !"oge",75                                               metadata !"fpexcept.strict") #076  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b77  ret <8 x i16> %res78}79 80define <8 x i16> @test_v8f16_olt_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {81; X86-LABEL: test_v8f16_olt_q:82; X86:       # %bb.0:83; X86-NEXT:    pushl %ebp84; X86-NEXT:    movl %esp, %ebp85; X86-NEXT:    andl $-16, %esp86; X86-NEXT:    subl $16, %esp87; X86-NEXT:    vcmplt_oqph 8(%ebp), %xmm2, %k188; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}89; X86-NEXT:    movl %ebp, %esp90; X86-NEXT:    popl %ebp91; X86-NEXT:    retl92;93; X64-LABEL: test_v8f16_olt_q:94; X64:       # %bb.0:95; X64-NEXT:    vcmplt_oqph %xmm3, %xmm2, %k196; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}97; X64-NEXT:    retq98  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(99                                               <8 x half> %f1, <8 x half> %f2, metadata !"olt",100                                               metadata !"fpexcept.strict") #0101  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b102  ret <8 x i16> %res103}104 105define <8 x i16> @test_v8f16_ole_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {106; X86-LABEL: test_v8f16_ole_q:107; X86:       # %bb.0:108; X86-NEXT:    pushl %ebp109; X86-NEXT:    movl %esp, %ebp110; X86-NEXT:    andl $-16, %esp111; X86-NEXT:    subl $16, %esp112; X86-NEXT:    vcmple_oqph 8(%ebp), %xmm2, %k1113; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}114; X86-NEXT:    movl %ebp, %esp115; X86-NEXT:    popl %ebp116; X86-NEXT:    retl117;118; X64-LABEL: test_v8f16_ole_q:119; X64:       # %bb.0:120; X64-NEXT:    vcmple_oqph %xmm3, %xmm2, %k1121; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}122; X64-NEXT:    retq123  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(124                                               <8 x half> %f1, <8 x half> %f2, metadata !"ole",125                                               metadata !"fpexcept.strict") #0126  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b127  ret <8 x i16> %res128}129 130define <8 x i16> @test_v8f16_one_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {131; X86-LABEL: test_v8f16_one_q:132; X86:       # %bb.0:133; X86-NEXT:    pushl %ebp134; X86-NEXT:    movl %esp, %ebp135; X86-NEXT:    andl $-16, %esp136; X86-NEXT:    subl $16, %esp137; X86-NEXT:    vcmpneq_oqph 8(%ebp), %xmm2, %k1138; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}139; X86-NEXT:    movl %ebp, %esp140; X86-NEXT:    popl %ebp141; X86-NEXT:    retl142;143; X64-LABEL: test_v8f16_one_q:144; X64:       # %bb.0:145; X64-NEXT:    vcmpneq_oqph %xmm3, %xmm2, %k1146; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}147; X64-NEXT:    retq148  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(149                                               <8 x half> %f1, <8 x half> %f2, metadata !"one",150                                               metadata !"fpexcept.strict") #0151  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b152  ret <8 x i16> %res153}154 155define <8 x i16> @test_v8f16_ord_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {156; X86-LABEL: test_v8f16_ord_q:157; X86:       # %bb.0:158; X86-NEXT:    pushl %ebp159; X86-NEXT:    movl %esp, %ebp160; X86-NEXT:    andl $-16, %esp161; X86-NEXT:    subl $16, %esp162; X86-NEXT:    vcmpordph 8(%ebp), %xmm2, %k1163; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}164; X86-NEXT:    movl %ebp, %esp165; X86-NEXT:    popl %ebp166; X86-NEXT:    retl167;168; X64-LABEL: test_v8f16_ord_q:169; X64:       # %bb.0:170; X64-NEXT:    vcmpordph %xmm3, %xmm2, %k1171; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}172; X64-NEXT:    retq173  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(174                                               <8 x half> %f1, <8 x half> %f2, metadata !"ord",175                                               metadata !"fpexcept.strict") #0176  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b177  ret <8 x i16> %res178}179 180define <8 x i16> @test_v8f16_ueq_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {181; X86-LABEL: test_v8f16_ueq_q:182; X86:       # %bb.0:183; X86-NEXT:    pushl %ebp184; X86-NEXT:    movl %esp, %ebp185; X86-NEXT:    andl $-16, %esp186; X86-NEXT:    subl $16, %esp187; X86-NEXT:    vcmpeq_uqph 8(%ebp), %xmm2, %k1188; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}189; X86-NEXT:    movl %ebp, %esp190; X86-NEXT:    popl %ebp191; X86-NEXT:    retl192;193; X64-LABEL: test_v8f16_ueq_q:194; X64:       # %bb.0:195; X64-NEXT:    vcmpeq_uqph %xmm3, %xmm2, %k1196; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}197; X64-NEXT:    retq198  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(199                                               <8 x half> %f1, <8 x half> %f2, metadata !"ueq",200                                               metadata !"fpexcept.strict") #0201  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b202  ret <8 x i16> %res203}204 205define <8 x i16> @test_v8f16_ugt_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {206; X86-LABEL: test_v8f16_ugt_q:207; X86:       # %bb.0:208; X86-NEXT:    pushl %ebp209; X86-NEXT:    movl %esp, %ebp210; X86-NEXT:    andl $-16, %esp211; X86-NEXT:    subl $16, %esp212; X86-NEXT:    vcmpnle_uqph 8(%ebp), %xmm2, %k1213; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}214; X86-NEXT:    movl %ebp, %esp215; X86-NEXT:    popl %ebp216; X86-NEXT:    retl217;218; X64-LABEL: test_v8f16_ugt_q:219; X64:       # %bb.0:220; X64-NEXT:    vcmpnle_uqph %xmm3, %xmm2, %k1221; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}222; X64-NEXT:    retq223  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(224                                               <8 x half> %f1, <8 x half> %f2, metadata !"ugt",225                                               metadata !"fpexcept.strict") #0226  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b227  ret <8 x i16> %res228}229 230define <8 x i16> @test_v8f16_uge_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {231; X86-LABEL: test_v8f16_uge_q:232; X86:       # %bb.0:233; X86-NEXT:    pushl %ebp234; X86-NEXT:    movl %esp, %ebp235; X86-NEXT:    andl $-16, %esp236; X86-NEXT:    subl $16, %esp237; X86-NEXT:    vcmpnlt_uqph 8(%ebp), %xmm2, %k1238; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}239; X86-NEXT:    movl %ebp, %esp240; X86-NEXT:    popl %ebp241; X86-NEXT:    retl242;243; X64-LABEL: test_v8f16_uge_q:244; X64:       # %bb.0:245; X64-NEXT:    vcmpnlt_uqph %xmm3, %xmm2, %k1246; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}247; X64-NEXT:    retq248  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(249                                               <8 x half> %f1, <8 x half> %f2, metadata !"uge",250                                               metadata !"fpexcept.strict") #0251  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b252  ret <8 x i16> %res253}254 255define <8 x i16> @test_v8f16_ult_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {256; X86-LABEL: test_v8f16_ult_q:257; X86:       # %bb.0:258; X86-NEXT:    pushl %ebp259; X86-NEXT:    movl %esp, %ebp260; X86-NEXT:    andl $-16, %esp261; X86-NEXT:    subl $16, %esp262; X86-NEXT:    vcmpnge_uqph 8(%ebp), %xmm2, %k1263; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}264; X86-NEXT:    movl %ebp, %esp265; X86-NEXT:    popl %ebp266; X86-NEXT:    retl267;268; X64-LABEL: test_v8f16_ult_q:269; X64:       # %bb.0:270; X64-NEXT:    vcmpnle_uqph %xmm2, %xmm3, %k1271; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}272; X64-NEXT:    retq273  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(274                                               <8 x half> %f1, <8 x half> %f2, metadata !"ult",275                                               metadata !"fpexcept.strict") #0276  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b277  ret <8 x i16> %res278}279 280define <8 x i16> @test_v8f16_ule_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {281; X86-LABEL: test_v8f16_ule_q:282; X86:       # %bb.0:283; X86-NEXT:    pushl %ebp284; X86-NEXT:    movl %esp, %ebp285; X86-NEXT:    andl $-16, %esp286; X86-NEXT:    subl $16, %esp287; X86-NEXT:    vcmpngt_uqph 8(%ebp), %xmm2, %k1288; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}289; X86-NEXT:    movl %ebp, %esp290; X86-NEXT:    popl %ebp291; X86-NEXT:    retl292;293; X64-LABEL: test_v8f16_ule_q:294; X64:       # %bb.0:295; X64-NEXT:    vcmpnlt_uqph %xmm2, %xmm3, %k1296; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}297; X64-NEXT:    retq298  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(299                                               <8 x half> %f1, <8 x half> %f2, metadata !"ule",300                                               metadata !"fpexcept.strict") #0301  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b302  ret <8 x i16> %res303}304 305define <8 x i16> @test_v8f16_une_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {306; X86-LABEL: test_v8f16_une_q:307; X86:       # %bb.0:308; X86-NEXT:    pushl %ebp309; X86-NEXT:    movl %esp, %ebp310; X86-NEXT:    andl $-16, %esp311; X86-NEXT:    subl $16, %esp312; X86-NEXT:    vcmpneqph 8(%ebp), %xmm2, %k1313; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}314; X86-NEXT:    movl %ebp, %esp315; X86-NEXT:    popl %ebp316; X86-NEXT:    retl317;318; X64-LABEL: test_v8f16_une_q:319; X64:       # %bb.0:320; X64-NEXT:    vcmpneqph %xmm3, %xmm2, %k1321; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}322; X64-NEXT:    retq323  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(324                                               <8 x half> %f1, <8 x half> %f2, metadata !"une",325                                               metadata !"fpexcept.strict") #0326  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b327  ret <8 x i16> %res328}329 330define <8 x i16> @test_v8f16_uno_q(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {331; X86-LABEL: test_v8f16_uno_q:332; X86:       # %bb.0:333; X86-NEXT:    pushl %ebp334; X86-NEXT:    movl %esp, %ebp335; X86-NEXT:    andl $-16, %esp336; X86-NEXT:    subl $16, %esp337; X86-NEXT:    vcmpunordph 8(%ebp), %xmm2, %k1338; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}339; X86-NEXT:    movl %ebp, %esp340; X86-NEXT:    popl %ebp341; X86-NEXT:    retl342;343; X64-LABEL: test_v8f16_uno_q:344; X64:       # %bb.0:345; X64-NEXT:    vcmpunordph %xmm3, %xmm2, %k1346; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}347; X64-NEXT:    retq348  %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(349                                               <8 x half> %f1, <8 x half> %f2, metadata !"uno",350                                               metadata !"fpexcept.strict") #0351  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b352  ret <8 x i16> %res353}354 355define <8 x i16> @test_v8f16_oeq_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {356; X86-LABEL: test_v8f16_oeq_s:357; X86:       # %bb.0:358; X86-NEXT:    pushl %ebp359; X86-NEXT:    movl %esp, %ebp360; X86-NEXT:    andl $-16, %esp361; X86-NEXT:    subl $16, %esp362; X86-NEXT:    vcmpeq_osph 8(%ebp), %xmm2, %k1363; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}364; X86-NEXT:    movl %ebp, %esp365; X86-NEXT:    popl %ebp366; X86-NEXT:    retl367;368; X64-LABEL: test_v8f16_oeq_s:369; X64:       # %bb.0:370; X64-NEXT:    vcmpeq_osph %xmm3, %xmm2, %k1371; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}372; X64-NEXT:    retq373  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(374                                               <8 x half> %f1, <8 x half> %f2, metadata !"oeq",375                                               metadata !"fpexcept.strict") #0376  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b377  ret <8 x i16> %res378}379 380define <8 x i16> @test_v8f16_ogt_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {381; X86-LABEL: test_v8f16_ogt_s:382; X86:       # %bb.0:383; X86-NEXT:    pushl %ebp384; X86-NEXT:    movl %esp, %ebp385; X86-NEXT:    andl $-16, %esp386; X86-NEXT:    subl $16, %esp387; X86-NEXT:    vcmpgtph 8(%ebp), %xmm2, %k1388; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}389; X86-NEXT:    movl %ebp, %esp390; X86-NEXT:    popl %ebp391; X86-NEXT:    retl392;393; X64-LABEL: test_v8f16_ogt_s:394; X64:       # %bb.0:395; X64-NEXT:    vcmpltph %xmm2, %xmm3, %k1396; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}397; X64-NEXT:    retq398  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(399                                               <8 x half> %f1, <8 x half> %f2, metadata !"ogt",400                                               metadata !"fpexcept.strict") #0401  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b402  ret <8 x i16> %res403}404 405define <8 x i16> @test_v8f16_oge_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {406; X86-LABEL: test_v8f16_oge_s:407; X86:       # %bb.0:408; X86-NEXT:    pushl %ebp409; X86-NEXT:    movl %esp, %ebp410; X86-NEXT:    andl $-16, %esp411; X86-NEXT:    subl $16, %esp412; X86-NEXT:    vcmpgeph 8(%ebp), %xmm2, %k1413; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}414; X86-NEXT:    movl %ebp, %esp415; X86-NEXT:    popl %ebp416; X86-NEXT:    retl417;418; X64-LABEL: test_v8f16_oge_s:419; X64:       # %bb.0:420; X64-NEXT:    vcmpleph %xmm2, %xmm3, %k1421; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}422; X64-NEXT:    retq423  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(424                                               <8 x half> %f1, <8 x half> %f2, metadata !"oge",425                                               metadata !"fpexcept.strict") #0426  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b427  ret <8 x i16> %res428}429 430define <8 x i16> @test_v8f16_olt_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {431; X86-LABEL: test_v8f16_olt_s:432; X86:       # %bb.0:433; X86-NEXT:    pushl %ebp434; X86-NEXT:    movl %esp, %ebp435; X86-NEXT:    andl $-16, %esp436; X86-NEXT:    subl $16, %esp437; X86-NEXT:    vcmpltph 8(%ebp), %xmm2, %k1438; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}439; X86-NEXT:    movl %ebp, %esp440; X86-NEXT:    popl %ebp441; X86-NEXT:    retl442;443; X64-LABEL: test_v8f16_olt_s:444; X64:       # %bb.0:445; X64-NEXT:    vcmpltph %xmm3, %xmm2, %k1446; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}447; X64-NEXT:    retq448  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(449                                               <8 x half> %f1, <8 x half> %f2, metadata !"olt",450                                               metadata !"fpexcept.strict") #0451  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b452  ret <8 x i16> %res453}454 455define <8 x i16> @test_v8f16_ole_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {456; X86-LABEL: test_v8f16_ole_s:457; X86:       # %bb.0:458; X86-NEXT:    pushl %ebp459; X86-NEXT:    movl %esp, %ebp460; X86-NEXT:    andl $-16, %esp461; X86-NEXT:    subl $16, %esp462; X86-NEXT:    vcmpleph 8(%ebp), %xmm2, %k1463; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}464; X86-NEXT:    movl %ebp, %esp465; X86-NEXT:    popl %ebp466; X86-NEXT:    retl467;468; X64-LABEL: test_v8f16_ole_s:469; X64:       # %bb.0:470; X64-NEXT:    vcmpleph %xmm3, %xmm2, %k1471; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}472; X64-NEXT:    retq473  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(474                                               <8 x half> %f1, <8 x half> %f2, metadata !"ole",475                                               metadata !"fpexcept.strict") #0476  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b477  ret <8 x i16> %res478}479 480define <8 x i16> @test_v8f16_one_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {481; X86-LABEL: test_v8f16_one_s:482; X86:       # %bb.0:483; X86-NEXT:    pushl %ebp484; X86-NEXT:    movl %esp, %ebp485; X86-NEXT:    andl $-16, %esp486; X86-NEXT:    subl $16, %esp487; X86-NEXT:    vcmpneq_osph 8(%ebp), %xmm2, %k1488; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}489; X86-NEXT:    movl %ebp, %esp490; X86-NEXT:    popl %ebp491; X86-NEXT:    retl492;493; X64-LABEL: test_v8f16_one_s:494; X64:       # %bb.0:495; X64-NEXT:    vcmpneq_osph %xmm3, %xmm2, %k1496; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}497; X64-NEXT:    retq498  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(499                                               <8 x half> %f1, <8 x half> %f2, metadata !"one",500                                               metadata !"fpexcept.strict") #0501  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b502  ret <8 x i16> %res503}504 505define <8 x i16> @test_v8f16_ord_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {506; X86-LABEL: test_v8f16_ord_s:507; X86:       # %bb.0:508; X86-NEXT:    pushl %ebp509; X86-NEXT:    movl %esp, %ebp510; X86-NEXT:    andl $-16, %esp511; X86-NEXT:    subl $16, %esp512; X86-NEXT:    vcmpord_sph 8(%ebp), %xmm2, %k1513; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}514; X86-NEXT:    movl %ebp, %esp515; X86-NEXT:    popl %ebp516; X86-NEXT:    retl517;518; X64-LABEL: test_v8f16_ord_s:519; X64:       # %bb.0:520; X64-NEXT:    vcmpord_sph %xmm3, %xmm2, %k1521; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}522; X64-NEXT:    retq523  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(524                                               <8 x half> %f1, <8 x half> %f2, metadata !"ord",525                                               metadata !"fpexcept.strict") #0526  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b527  ret <8 x i16> %res528}529 530define <8 x i16> @test_v8f16_ueq_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {531; X86-LABEL: test_v8f16_ueq_s:532; X86:       # %bb.0:533; X86-NEXT:    pushl %ebp534; X86-NEXT:    movl %esp, %ebp535; X86-NEXT:    andl $-16, %esp536; X86-NEXT:    subl $16, %esp537; X86-NEXT:    vcmpeq_usph 8(%ebp), %xmm2, %k1538; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}539; X86-NEXT:    movl %ebp, %esp540; X86-NEXT:    popl %ebp541; X86-NEXT:    retl542;543; X64-LABEL: test_v8f16_ueq_s:544; X64:       # %bb.0:545; X64-NEXT:    vcmpeq_usph %xmm3, %xmm2, %k1546; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}547; X64-NEXT:    retq548  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(549                                               <8 x half> %f1, <8 x half> %f2, metadata !"ueq",550                                               metadata !"fpexcept.strict") #0551  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b552  ret <8 x i16> %res553}554 555define <8 x i16> @test_v8f16_ugt_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {556; X86-LABEL: test_v8f16_ugt_s:557; X86:       # %bb.0:558; X86-NEXT:    pushl %ebp559; X86-NEXT:    movl %esp, %ebp560; X86-NEXT:    andl $-16, %esp561; X86-NEXT:    subl $16, %esp562; X86-NEXT:    vcmpnleph 8(%ebp), %xmm2, %k1563; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}564; X86-NEXT:    movl %ebp, %esp565; X86-NEXT:    popl %ebp566; X86-NEXT:    retl567;568; X64-LABEL: test_v8f16_ugt_s:569; X64:       # %bb.0:570; X64-NEXT:    vcmpnleph %xmm3, %xmm2, %k1571; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}572; X64-NEXT:    retq573  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(574                                               <8 x half> %f1, <8 x half> %f2, metadata !"ugt",575                                               metadata !"fpexcept.strict") #0576  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b577  ret <8 x i16> %res578}579 580define <8 x i16> @test_v8f16_uge_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {581; X86-LABEL: test_v8f16_uge_s:582; X86:       # %bb.0:583; X86-NEXT:    pushl %ebp584; X86-NEXT:    movl %esp, %ebp585; X86-NEXT:    andl $-16, %esp586; X86-NEXT:    subl $16, %esp587; X86-NEXT:    vcmpnltph 8(%ebp), %xmm2, %k1588; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}589; X86-NEXT:    movl %ebp, %esp590; X86-NEXT:    popl %ebp591; X86-NEXT:    retl592;593; X64-LABEL: test_v8f16_uge_s:594; X64:       # %bb.0:595; X64-NEXT:    vcmpnltph %xmm3, %xmm2, %k1596; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}597; X64-NEXT:    retq598  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(599                                               <8 x half> %f1, <8 x half> %f2, metadata !"uge",600                                               metadata !"fpexcept.strict") #0601  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b602  ret <8 x i16> %res603}604 605define <8 x i16> @test_v8f16_ult_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {606; X86-LABEL: test_v8f16_ult_s:607; X86:       # %bb.0:608; X86-NEXT:    pushl %ebp609; X86-NEXT:    movl %esp, %ebp610; X86-NEXT:    andl $-16, %esp611; X86-NEXT:    subl $16, %esp612; X86-NEXT:    vcmpngeph 8(%ebp), %xmm2, %k1613; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}614; X86-NEXT:    movl %ebp, %esp615; X86-NEXT:    popl %ebp616; X86-NEXT:    retl617;618; X64-LABEL: test_v8f16_ult_s:619; X64:       # %bb.0:620; X64-NEXT:    vcmpnleph %xmm2, %xmm3, %k1621; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}622; X64-NEXT:    retq623  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(624                                               <8 x half> %f1, <8 x half> %f2, metadata !"ult",625                                               metadata !"fpexcept.strict") #0626  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b627  ret <8 x i16> %res628}629 630define <8 x i16> @test_v8f16_ule_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {631; X86-LABEL: test_v8f16_ule_s:632; X86:       # %bb.0:633; X86-NEXT:    pushl %ebp634; X86-NEXT:    movl %esp, %ebp635; X86-NEXT:    andl $-16, %esp636; X86-NEXT:    subl $16, %esp637; X86-NEXT:    vcmpngtph 8(%ebp), %xmm2, %k1638; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}639; X86-NEXT:    movl %ebp, %esp640; X86-NEXT:    popl %ebp641; X86-NEXT:    retl642;643; X64-LABEL: test_v8f16_ule_s:644; X64:       # %bb.0:645; X64-NEXT:    vcmpnltph %xmm2, %xmm3, %k1646; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}647; X64-NEXT:    retq648  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(649                                               <8 x half> %f1, <8 x half> %f2, metadata !"ule",650                                               metadata !"fpexcept.strict") #0651  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b652  ret <8 x i16> %res653}654 655define <8 x i16> @test_v8f16_une_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {656; X86-LABEL: test_v8f16_une_s:657; X86:       # %bb.0:658; X86-NEXT:    pushl %ebp659; X86-NEXT:    movl %esp, %ebp660; X86-NEXT:    andl $-16, %esp661; X86-NEXT:    subl $16, %esp662; X86-NEXT:    vcmpneq_usph 8(%ebp), %xmm2, %k1663; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}664; X86-NEXT:    movl %ebp, %esp665; X86-NEXT:    popl %ebp666; X86-NEXT:    retl667;668; X64-LABEL: test_v8f16_une_s:669; X64:       # %bb.0:670; X64-NEXT:    vcmpneq_usph %xmm3, %xmm2, %k1671; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}672; X64-NEXT:    retq673  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(674                                               <8 x half> %f1, <8 x half> %f2, metadata !"une",675                                               metadata !"fpexcept.strict") #0676  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b677  ret <8 x i16> %res678}679 680define <8 x i16> @test_v8f16_uno_s(<8 x i16> %a, <8 x i16> %b, <8 x half> %f1, <8 x half> %f2) #0 {681; X86-LABEL: test_v8f16_uno_s:682; X86:       # %bb.0:683; X86-NEXT:    pushl %ebp684; X86-NEXT:    movl %esp, %ebp685; X86-NEXT:    andl $-16, %esp686; X86-NEXT:    subl $16, %esp687; X86-NEXT:    vcmpunord_sph 8(%ebp), %xmm2, %k1688; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}689; X86-NEXT:    movl %ebp, %esp690; X86-NEXT:    popl %ebp691; X86-NEXT:    retl692;693; X64-LABEL: test_v8f16_uno_s:694; X64:       # %bb.0:695; X64-NEXT:    vcmpunord_sph %xmm3, %xmm2, %k1696; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}697; X64-NEXT:    retq698  %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(699                                               <8 x half> %f1, <8 x half> %f2, metadata !"uno",700                                               metadata !"fpexcept.strict") #0701  %res = select <8 x i1> %cond, <8 x i16> %a, <8 x i16> %b702  ret <8 x i16> %res703}704 705define <2 x i16> @test_v2f16_oeq_q(<2 x i16> %a, <2 x i16> %b, <2 x half> %f1, <2 x half> %f2) #0 {706; X86-LABEL: test_v2f16_oeq_q:707; X86:       # %bb.0:708; X86-NEXT:    pushl %ebp709; X86-NEXT:    movl %esp, %ebp710; X86-NEXT:    andl $-16, %esp711; X86-NEXT:    subl $16, %esp712; X86-NEXT:    vucomish 8(%ebp), %xmm2713; X86-NEXT:    setnp %al714; X86-NEXT:    sete %cl715; X86-NEXT:    testb %al, %cl716; X86-NEXT:    setne %al717; X86-NEXT:    andl $1, %eax718; X86-NEXT:    kmovw %eax, %k0719; X86-NEXT:    vpsrld $16, %xmm2, %xmm2720; X86-NEXT:    vucomish 10(%ebp), %xmm2721; X86-NEXT:    setnp %al722; X86-NEXT:    sete %cl723; X86-NEXT:    testb %al, %cl724; X86-NEXT:    setne %al725; X86-NEXT:    kmovd %eax, %k1726; X86-NEXT:    kshiftlw $15, %k1, %k1727; X86-NEXT:    kshiftrw $14, %k1, %k1728; X86-NEXT:    korw %k1, %k0, %k1729; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}730; X86-NEXT:    movl %ebp, %esp731; X86-NEXT:    popl %ebp732; X86-NEXT:    retl733;734; X64-LABEL: test_v2f16_oeq_q:735; X64:       # %bb.0:736; X64-NEXT:    vucomish %xmm3, %xmm2737; X64-NEXT:    setnp %al738; X64-NEXT:    sete %cl739; X64-NEXT:    testb %al, %cl740; X64-NEXT:    setne %al741; X64-NEXT:    andl $1, %eax742; X64-NEXT:    kmovw %eax, %k0743; X64-NEXT:    vpsrld $16, %xmm3, %xmm3744; X64-NEXT:    vpsrld $16, %xmm2, %xmm2745; X64-NEXT:    vucomish %xmm3, %xmm2746; X64-NEXT:    setnp %al747; X64-NEXT:    sete %cl748; X64-NEXT:    testb %al, %cl749; X64-NEXT:    setne %al750; X64-NEXT:    kmovd %eax, %k1751; X64-NEXT:    kshiftlw $15, %k1, %k1752; X64-NEXT:    kshiftrw $14, %k1, %k1753; X64-NEXT:    korw %k1, %k0, %k1754; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}755; X64-NEXT:    retq756  %cond = call <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(757                                               <2 x half> %f1, <2 x half> %f2, metadata !"oeq",758                                               metadata !"fpexcept.strict") #0759  %res = select <2 x i1> %cond, <2 x i16> %a, <2 x i16> %b760  ret <2 x i16> %res761}762 763define <2 x i16> @test_v2f16_ogt_q(<2 x i16> %a, <2 x i16> %b, <2 x half> %f1, <2 x half> %f2) #0 {764; X86-LABEL: test_v2f16_ogt_q:765; X86:       # %bb.0:766; X86-NEXT:    pushl %ebp767; X86-NEXT:    movl %esp, %ebp768; X86-NEXT:    andl $-16, %esp769; X86-NEXT:    subl $16, %esp770; X86-NEXT:    vcomish 8(%ebp), %xmm2771; X86-NEXT:    seta %al772; X86-NEXT:    andl $1, %eax773; X86-NEXT:    kmovw %eax, %k0774; X86-NEXT:    vpsrld $16, %xmm2, %xmm2775; X86-NEXT:    vcomish 10(%ebp), %xmm2776; X86-NEXT:    seta %al777; X86-NEXT:    kmovd %eax, %k1778; X86-NEXT:    kshiftlw $15, %k1, %k1779; X86-NEXT:    kshiftrw $14, %k1, %k1780; X86-NEXT:    korw %k1, %k0, %k1781; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}782; X86-NEXT:    movl %ebp, %esp783; X86-NEXT:    popl %ebp784; X86-NEXT:    retl785;786; X64-LABEL: test_v2f16_ogt_q:787; X64:       # %bb.0:788; X64-NEXT:    vcomish %xmm3, %xmm2789; X64-NEXT:    seta %al790; X64-NEXT:    andl $1, %eax791; X64-NEXT:    kmovw %eax, %k0792; X64-NEXT:    vpsrld $16, %xmm3, %xmm3793; X64-NEXT:    vpsrld $16, %xmm2, %xmm2794; X64-NEXT:    vcomish %xmm3, %xmm2795; X64-NEXT:    seta %al796; X64-NEXT:    kmovd %eax, %k1797; X64-NEXT:    kshiftlw $15, %k1, %k1798; X64-NEXT:    kshiftrw $14, %k1, %k1799; X64-NEXT:    korw %k1, %k0, %k1800; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}801; X64-NEXT:    retq802  %cond = call <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(803                                               <2 x half> %f1, <2 x half> %f2, metadata !"ogt",804                                               metadata !"fpexcept.strict") #0805  %res = select <2 x i1> %cond, <2 x i16> %a, <2 x i16> %b806  ret <2 x i16> %res807}808 809define <4 x i16> @test_v4f16_oge_q(<4 x i16> %a, <4 x i16> %b, <4 x half> %f1, <4 x half> %f2) #0 {810; X86-LABEL: test_v4f16_oge_q:811; X86:       # %bb.0:812; X86-NEXT:    pushl %ebp813; X86-NEXT:    movl %esp, %ebp814; X86-NEXT:    andl $-16, %esp815; X86-NEXT:    subl $16, %esp816; X86-NEXT:    vucomish 8(%ebp), %xmm2817; X86-NEXT:    setae %al818; X86-NEXT:    andl $1, %eax819; X86-NEXT:    kmovw %eax, %k0820; X86-NEXT:    vpsrld $16, %xmm2, %xmm3821; X86-NEXT:    vucomish 10(%ebp), %xmm3822; X86-NEXT:    setae %al823; X86-NEXT:    kmovd %eax, %k1824; X86-NEXT:    kshiftlw $15, %k1, %k1825; X86-NEXT:    kshiftrw $14, %k1, %k1826; X86-NEXT:    korw %k1, %k0, %k0827; X86-NEXT:    movw $-5, %ax828; X86-NEXT:    kmovd %eax, %k1829; X86-NEXT:    kandw %k1, %k0, %k0830; X86-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm2[1,1,3,3]831; X86-NEXT:    vucomish 12(%ebp), %xmm3832; X86-NEXT:    setae %al833; X86-NEXT:    kmovd %eax, %k1834; X86-NEXT:    kshiftlw $15, %k1, %k1835; X86-NEXT:    kshiftrw $13, %k1, %k1836; X86-NEXT:    korw %k1, %k0, %k0837; X86-NEXT:    movw $-9, %ax838; X86-NEXT:    kmovd %eax, %k1839; X86-NEXT:    kandw %k1, %k0, %k0840; X86-NEXT:    vpsrlq $48, %xmm2, %xmm2841; X86-NEXT:    vucomish 14(%ebp), %xmm2842; X86-NEXT:    setae %al843; X86-NEXT:    kmovd %eax, %k1844; X86-NEXT:    kshiftlw $15, %k1, %k1845; X86-NEXT:    kshiftrw $12, %k1, %k1846; X86-NEXT:    korw %k1, %k0, %k1847; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}848; X86-NEXT:    movl %ebp, %esp849; X86-NEXT:    popl %ebp850; X86-NEXT:    retl851;852; X64-LABEL: test_v4f16_oge_q:853; X64:       # %bb.0:854; X64-NEXT:    vucomish %xmm3, %xmm2855; X64-NEXT:    setae %al856; X64-NEXT:    andl $1, %eax857; X64-NEXT:    kmovw %eax, %k0858; X64-NEXT:    vpsrld $16, %xmm3, %xmm4859; X64-NEXT:    vpsrld $16, %xmm2, %xmm5860; X64-NEXT:    vucomish %xmm4, %xmm5861; X64-NEXT:    setae %al862; X64-NEXT:    kmovd %eax, %k1863; X64-NEXT:    kshiftlw $15, %k1, %k1864; X64-NEXT:    kshiftrw $14, %k1, %k1865; X64-NEXT:    korw %k1, %k0, %k0866; X64-NEXT:    movw $-5, %ax867; X64-NEXT:    kmovd %eax, %k1868; X64-NEXT:    kandw %k1, %k0, %k0869; X64-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]870; X64-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]871; X64-NEXT:    vucomish %xmm4, %xmm5872; X64-NEXT:    setae %al873; X64-NEXT:    kmovd %eax, %k1874; X64-NEXT:    kshiftlw $15, %k1, %k1875; X64-NEXT:    kshiftrw $13, %k1, %k1876; X64-NEXT:    korw %k1, %k0, %k0877; X64-NEXT:    movw $-9, %ax878; X64-NEXT:    kmovd %eax, %k1879; X64-NEXT:    kandw %k1, %k0, %k0880; X64-NEXT:    vpsrlq $48, %xmm3, %xmm3881; X64-NEXT:    vpsrlq $48, %xmm2, %xmm2882; X64-NEXT:    vucomish %xmm3, %xmm2883; X64-NEXT:    setae %al884; X64-NEXT:    kmovd %eax, %k1885; X64-NEXT:    kshiftlw $15, %k1, %k1886; X64-NEXT:    kshiftrw $12, %k1, %k1887; X64-NEXT:    korw %k1, %k0, %k1888; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}889; X64-NEXT:    retq890  %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(891                                               <4 x half> %f1, <4 x half> %f2, metadata !"oge",892                                               metadata !"fpexcept.strict") #0893  %res = select <4 x i1> %cond, <4 x i16> %a, <4 x i16> %b894  ret <4 x i16> %res895}896 897define <4 x i16> @test_v4f16_olt_q(<4 x i16> %a, <4 x i16> %b, <4 x half> %f1, <4 x half> %f2) #0 {898; X86-LABEL: test_v4f16_olt_q:899; X86:       # %bb.0:900; X86-NEXT:    pushl %ebp901; X86-NEXT:    movl %esp, %ebp902; X86-NEXT:    andl $-16, %esp903; X86-NEXT:    subl $16, %esp904; X86-NEXT:    vmovsh {{.*#+}} xmm3 = mem[0],zero,zero,zero,zero,zero,zero,zero905; X86-NEXT:    vcomish %xmm2, %xmm3906; X86-NEXT:    seta %al907; X86-NEXT:    andl $1, %eax908; X86-NEXT:    kmovw %eax, %k0909; X86-NEXT:    vpsrld $16, %xmm2, %xmm3910; X86-NEXT:    vmovsh {{.*#+}} xmm4 = mem[0],zero,zero,zero,zero,zero,zero,zero911; X86-NEXT:    vcomish %xmm3, %xmm4912; X86-NEXT:    seta %al913; X86-NEXT:    kmovd %eax, %k1914; X86-NEXT:    kshiftlw $15, %k1, %k1915; X86-NEXT:    kshiftrw $14, %k1, %k1916; X86-NEXT:    korw %k1, %k0, %k0917; X86-NEXT:    movw $-5, %ax918; X86-NEXT:    kmovd %eax, %k1919; X86-NEXT:    kandw %k1, %k0, %k0920; X86-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm2[1,1,3,3]921; X86-NEXT:    vmovsh {{.*#+}} xmm4 = mem[0],zero,zero,zero,zero,zero,zero,zero922; X86-NEXT:    vcomish %xmm3, %xmm4923; X86-NEXT:    seta %al924; X86-NEXT:    kmovd %eax, %k1925; X86-NEXT:    kshiftlw $15, %k1, %k1926; X86-NEXT:    kshiftrw $13, %k1, %k1927; X86-NEXT:    korw %k1, %k0, %k0928; X86-NEXT:    movw $-9, %ax929; X86-NEXT:    kmovd %eax, %k1930; X86-NEXT:    kandw %k1, %k0, %k0931; X86-NEXT:    vpsrlq $48, %xmm2, %xmm2932; X86-NEXT:    vmovsh {{.*#+}} xmm3 = mem[0],zero,zero,zero,zero,zero,zero,zero933; X86-NEXT:    vcomish %xmm2, %xmm3934; X86-NEXT:    seta %al935; X86-NEXT:    kmovd %eax, %k1936; X86-NEXT:    kshiftlw $15, %k1, %k1937; X86-NEXT:    kshiftrw $12, %k1, %k1938; X86-NEXT:    korw %k1, %k0, %k1939; X86-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}940; X86-NEXT:    movl %ebp, %esp941; X86-NEXT:    popl %ebp942; X86-NEXT:    retl943;944; X64-LABEL: test_v4f16_olt_q:945; X64:       # %bb.0:946; X64-NEXT:    vcomish %xmm2, %xmm3947; X64-NEXT:    seta %al948; X64-NEXT:    andl $1, %eax949; X64-NEXT:    kmovw %eax, %k0950; X64-NEXT:    vpsrld $16, %xmm2, %xmm4951; X64-NEXT:    vpsrld $16, %xmm3, %xmm5952; X64-NEXT:    vcomish %xmm4, %xmm5953; X64-NEXT:    seta %al954; X64-NEXT:    kmovd %eax, %k1955; X64-NEXT:    kshiftlw $15, %k1, %k1956; X64-NEXT:    kshiftrw $14, %k1, %k1957; X64-NEXT:    korw %k1, %k0, %k0958; X64-NEXT:    movw $-5, %ax959; X64-NEXT:    kmovd %eax, %k1960; X64-NEXT:    kandw %k1, %k0, %k0961; X64-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]962; X64-NEXT:    vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]963; X64-NEXT:    vcomish %xmm4, %xmm5964; X64-NEXT:    seta %al965; X64-NEXT:    kmovd %eax, %k1966; X64-NEXT:    kshiftlw $15, %k1, %k1967; X64-NEXT:    kshiftrw $13, %k1, %k1968; X64-NEXT:    korw %k1, %k0, %k0969; X64-NEXT:    movw $-9, %ax970; X64-NEXT:    kmovd %eax, %k1971; X64-NEXT:    kandw %k1, %k0, %k0972; X64-NEXT:    vpsrlq $48, %xmm2, %xmm2973; X64-NEXT:    vpsrlq $48, %xmm3, %xmm3974; X64-NEXT:    vcomish %xmm2, %xmm3975; X64-NEXT:    seta %al976; X64-NEXT:    kmovd %eax, %k1977; X64-NEXT:    kshiftlw $15, %k1, %k1978; X64-NEXT:    kshiftrw $12, %k1, %k1979; X64-NEXT:    korw %k1, %k0, %k1980; X64-NEXT:    vpblendmw %xmm0, %xmm1, %xmm0 {%k1}981; X64-NEXT:    retq982  %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(983                                               <4 x half> %f1, <4 x half> %f2, metadata !"olt",984                                               metadata !"fpexcept.strict") #0985  %res = select <4 x i1> %cond, <4 x i16> %a, <4 x i16> %b986  ret <4 x i16> %res987}988 989attributes #0 = { strictfp nounwind }990 991declare <2 x i1> @llvm.experimental.constrained.fcmp.v2f16(<2 x half>, <2 x half>, metadata, metadata)992declare <2 x i1> @llvm.experimental.constrained.fcmps.v2f16(<2 x half>, <2 x half>, metadata, metadata)993declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f16(<4 x half>, <4 x half>, metadata, metadata)994declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f16(<4 x half>, <4 x half>, metadata, metadata)995declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f16(<8 x half>, <8 x half>, metadata, metadata)996declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f16(<8 x half>, <8 x half>, metadata, metadata)997