brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.3 KiB · 81987dc Raw
709 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=AVX512-323; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512fp16 -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=AVX512-644 5define <16 x i16> @test_v16f16_oeq_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {6; AVX512-32-LABEL: test_v16f16_oeq_q:7; AVX512-32:       # %bb.0:8; AVX512-32-NEXT:    pushl %ebp9; AVX512-32-NEXT:    movl %esp, %ebp10; AVX512-32-NEXT:    andl $-32, %esp11; AVX512-32-NEXT:    subl $32, %esp12; AVX512-32-NEXT:    vcmpeqph 8(%ebp), %ymm2, %k113; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}14; AVX512-32-NEXT:    movl %ebp, %esp15; AVX512-32-NEXT:    popl %ebp16; AVX512-32-NEXT:    retl17;18; AVX512-64-LABEL: test_v16f16_oeq_q:19; AVX512-64:       # %bb.0:20; AVX512-64-NEXT:    vcmpeqph %ymm3, %ymm2, %k121; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}22; AVX512-64-NEXT:    retq23  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(24                                               <16 x half> %f1, <16 x half> %f2, metadata !"oeq",25                                               metadata !"fpexcept.strict") #026  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b27  ret <16 x i16> %res28}29 30define <16 x i16> @test_v16f16_ogt_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {31; AVX512-32-LABEL: test_v16f16_ogt_q:32; AVX512-32:       # %bb.0:33; AVX512-32-NEXT:    pushl %ebp34; AVX512-32-NEXT:    movl %esp, %ebp35; AVX512-32-NEXT:    andl $-32, %esp36; AVX512-32-NEXT:    subl $32, %esp37; AVX512-32-NEXT:    vcmpgt_oqph 8(%ebp), %ymm2, %k138; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}39; AVX512-32-NEXT:    movl %ebp, %esp40; AVX512-32-NEXT:    popl %ebp41; AVX512-32-NEXT:    retl42;43; AVX512-64-LABEL: test_v16f16_ogt_q:44; AVX512-64:       # %bb.0:45; AVX512-64-NEXT:    vcmplt_oqph %ymm2, %ymm3, %k146; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}47; AVX512-64-NEXT:    retq48  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(49                                               <16 x half> %f1, <16 x half> %f2, metadata !"ogt",50                                               metadata !"fpexcept.strict") #051  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b52  ret <16 x i16> %res53}54 55define <16 x i16> @test_v16f16_oge_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {56; AVX512-32-LABEL: test_v16f16_oge_q:57; AVX512-32:       # %bb.0:58; AVX512-32-NEXT:    pushl %ebp59; AVX512-32-NEXT:    movl %esp, %ebp60; AVX512-32-NEXT:    andl $-32, %esp61; AVX512-32-NEXT:    subl $32, %esp62; AVX512-32-NEXT:    vcmpge_oqph 8(%ebp), %ymm2, %k163; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}64; AVX512-32-NEXT:    movl %ebp, %esp65; AVX512-32-NEXT:    popl %ebp66; AVX512-32-NEXT:    retl67;68; AVX512-64-LABEL: test_v16f16_oge_q:69; AVX512-64:       # %bb.0:70; AVX512-64-NEXT:    vcmple_oqph %ymm2, %ymm3, %k171; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}72; AVX512-64-NEXT:    retq73  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(74                                               <16 x half> %f1, <16 x half> %f2, metadata !"oge",75                                               metadata !"fpexcept.strict") #076  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b77  ret <16 x i16> %res78}79 80define <16 x i16> @test_v16f16_olt_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {81; AVX512-32-LABEL: test_v16f16_olt_q:82; AVX512-32:       # %bb.0:83; AVX512-32-NEXT:    pushl %ebp84; AVX512-32-NEXT:    movl %esp, %ebp85; AVX512-32-NEXT:    andl $-32, %esp86; AVX512-32-NEXT:    subl $32, %esp87; AVX512-32-NEXT:    vcmplt_oqph 8(%ebp), %ymm2, %k188; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}89; AVX512-32-NEXT:    movl %ebp, %esp90; AVX512-32-NEXT:    popl %ebp91; AVX512-32-NEXT:    retl92;93; AVX512-64-LABEL: test_v16f16_olt_q:94; AVX512-64:       # %bb.0:95; AVX512-64-NEXT:    vcmplt_oqph %ymm3, %ymm2, %k196; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}97; AVX512-64-NEXT:    retq98  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(99                                               <16 x half> %f1, <16 x half> %f2, metadata !"olt",100                                               metadata !"fpexcept.strict") #0101  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b102  ret <16 x i16> %res103}104 105define <16 x i16> @test_v16f16_ole_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {106; AVX512-32-LABEL: test_v16f16_ole_q:107; AVX512-32:       # %bb.0:108; AVX512-32-NEXT:    pushl %ebp109; AVX512-32-NEXT:    movl %esp, %ebp110; AVX512-32-NEXT:    andl $-32, %esp111; AVX512-32-NEXT:    subl $32, %esp112; AVX512-32-NEXT:    vcmple_oqph 8(%ebp), %ymm2, %k1113; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}114; AVX512-32-NEXT:    movl %ebp, %esp115; AVX512-32-NEXT:    popl %ebp116; AVX512-32-NEXT:    retl117;118; AVX512-64-LABEL: test_v16f16_ole_q:119; AVX512-64:       # %bb.0:120; AVX512-64-NEXT:    vcmple_oqph %ymm3, %ymm2, %k1121; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}122; AVX512-64-NEXT:    retq123  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(124                                               <16 x half> %f1, <16 x half> %f2, metadata !"ole",125                                               metadata !"fpexcept.strict") #0126  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b127  ret <16 x i16> %res128}129 130define <16 x i16> @test_v16f16_one_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {131; AVX512-32-LABEL: test_v16f16_one_q:132; AVX512-32:       # %bb.0:133; AVX512-32-NEXT:    pushl %ebp134; AVX512-32-NEXT:    movl %esp, %ebp135; AVX512-32-NEXT:    andl $-32, %esp136; AVX512-32-NEXT:    subl $32, %esp137; AVX512-32-NEXT:    vcmpneq_oqph 8(%ebp), %ymm2, %k1138; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}139; AVX512-32-NEXT:    movl %ebp, %esp140; AVX512-32-NEXT:    popl %ebp141; AVX512-32-NEXT:    retl142;143; AVX512-64-LABEL: test_v16f16_one_q:144; AVX512-64:       # %bb.0:145; AVX512-64-NEXT:    vcmpneq_oqph %ymm3, %ymm2, %k1146; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}147; AVX512-64-NEXT:    retq148  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(149                                               <16 x half> %f1, <16 x half> %f2, metadata !"one",150                                               metadata !"fpexcept.strict") #0151  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b152  ret <16 x i16> %res153}154 155define <16 x i16> @test_v16f16_ord_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {156; AVX512-32-LABEL: test_v16f16_ord_q:157; AVX512-32:       # %bb.0:158; AVX512-32-NEXT:    pushl %ebp159; AVX512-32-NEXT:    movl %esp, %ebp160; AVX512-32-NEXT:    andl $-32, %esp161; AVX512-32-NEXT:    subl $32, %esp162; AVX512-32-NEXT:    vcmpordph 8(%ebp), %ymm2, %k1163; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}164; AVX512-32-NEXT:    movl %ebp, %esp165; AVX512-32-NEXT:    popl %ebp166; AVX512-32-NEXT:    retl167;168; AVX512-64-LABEL: test_v16f16_ord_q:169; AVX512-64:       # %bb.0:170; AVX512-64-NEXT:    vcmpordph %ymm3, %ymm2, %k1171; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}172; AVX512-64-NEXT:    retq173  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(174                                               <16 x half> %f1, <16 x half> %f2, metadata !"ord",175                                               metadata !"fpexcept.strict") #0176  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b177  ret <16 x i16> %res178}179 180define <16 x i16> @test_v16f16_ueq_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {181; AVX512-32-LABEL: test_v16f16_ueq_q:182; AVX512-32:       # %bb.0:183; AVX512-32-NEXT:    pushl %ebp184; AVX512-32-NEXT:    movl %esp, %ebp185; AVX512-32-NEXT:    andl $-32, %esp186; AVX512-32-NEXT:    subl $32, %esp187; AVX512-32-NEXT:    vcmpeq_uqph 8(%ebp), %ymm2, %k1188; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}189; AVX512-32-NEXT:    movl %ebp, %esp190; AVX512-32-NEXT:    popl %ebp191; AVX512-32-NEXT:    retl192;193; AVX512-64-LABEL: test_v16f16_ueq_q:194; AVX512-64:       # %bb.0:195; AVX512-64-NEXT:    vcmpeq_uqph %ymm3, %ymm2, %k1196; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}197; AVX512-64-NEXT:    retq198  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(199                                               <16 x half> %f1, <16 x half> %f2, metadata !"ueq",200                                               metadata !"fpexcept.strict") #0201  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b202  ret <16 x i16> %res203}204 205define <16 x i16> @test_v16f16_ugt_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {206; AVX512-32-LABEL: test_v16f16_ugt_q:207; AVX512-32:       # %bb.0:208; AVX512-32-NEXT:    pushl %ebp209; AVX512-32-NEXT:    movl %esp, %ebp210; AVX512-32-NEXT:    andl $-32, %esp211; AVX512-32-NEXT:    subl $32, %esp212; AVX512-32-NEXT:    vcmpnle_uqph 8(%ebp), %ymm2, %k1213; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}214; AVX512-32-NEXT:    movl %ebp, %esp215; AVX512-32-NEXT:    popl %ebp216; AVX512-32-NEXT:    retl217;218; AVX512-64-LABEL: test_v16f16_ugt_q:219; AVX512-64:       # %bb.0:220; AVX512-64-NEXT:    vcmpnle_uqph %ymm3, %ymm2, %k1221; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}222; AVX512-64-NEXT:    retq223  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(224                                               <16 x half> %f1, <16 x half> %f2, metadata !"ugt",225                                               metadata !"fpexcept.strict") #0226  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b227  ret <16 x i16> %res228}229 230define <16 x i16> @test_v16f16_uge_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {231; AVX512-32-LABEL: test_v16f16_uge_q:232; AVX512-32:       # %bb.0:233; AVX512-32-NEXT:    pushl %ebp234; AVX512-32-NEXT:    movl %esp, %ebp235; AVX512-32-NEXT:    andl $-32, %esp236; AVX512-32-NEXT:    subl $32, %esp237; AVX512-32-NEXT:    vcmpnlt_uqph 8(%ebp), %ymm2, %k1238; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}239; AVX512-32-NEXT:    movl %ebp, %esp240; AVX512-32-NEXT:    popl %ebp241; AVX512-32-NEXT:    retl242;243; AVX512-64-LABEL: test_v16f16_uge_q:244; AVX512-64:       # %bb.0:245; AVX512-64-NEXT:    vcmpnlt_uqph %ymm3, %ymm2, %k1246; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}247; AVX512-64-NEXT:    retq248  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(249                                               <16 x half> %f1, <16 x half> %f2, metadata !"uge",250                                               metadata !"fpexcept.strict") #0251  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b252  ret <16 x i16> %res253}254 255define <16 x i16> @test_v16f16_ult_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {256; AVX512-32-LABEL: test_v16f16_ult_q:257; AVX512-32:       # %bb.0:258; AVX512-32-NEXT:    pushl %ebp259; AVX512-32-NEXT:    movl %esp, %ebp260; AVX512-32-NEXT:    andl $-32, %esp261; AVX512-32-NEXT:    subl $32, %esp262; AVX512-32-NEXT:    vcmpnge_uqph 8(%ebp), %ymm2, %k1263; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}264; AVX512-32-NEXT:    movl %ebp, %esp265; AVX512-32-NEXT:    popl %ebp266; AVX512-32-NEXT:    retl267;268; AVX512-64-LABEL: test_v16f16_ult_q:269; AVX512-64:       # %bb.0:270; AVX512-64-NEXT:    vcmpnle_uqph %ymm2, %ymm3, %k1271; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}272; AVX512-64-NEXT:    retq273  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(274                                               <16 x half> %f1, <16 x half> %f2, metadata !"ult",275                                               metadata !"fpexcept.strict") #0276  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b277  ret <16 x i16> %res278}279 280define <16 x i16> @test_v16f16_ule_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {281; AVX512-32-LABEL: test_v16f16_ule_q:282; AVX512-32:       # %bb.0:283; AVX512-32-NEXT:    pushl %ebp284; AVX512-32-NEXT:    movl %esp, %ebp285; AVX512-32-NEXT:    andl $-32, %esp286; AVX512-32-NEXT:    subl $32, %esp287; AVX512-32-NEXT:    vcmpngt_uqph 8(%ebp), %ymm2, %k1288; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}289; AVX512-32-NEXT:    movl %ebp, %esp290; AVX512-32-NEXT:    popl %ebp291; AVX512-32-NEXT:    retl292;293; AVX512-64-LABEL: test_v16f16_ule_q:294; AVX512-64:       # %bb.0:295; AVX512-64-NEXT:    vcmpnlt_uqph %ymm2, %ymm3, %k1296; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}297; AVX512-64-NEXT:    retq298  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(299                                               <16 x half> %f1, <16 x half> %f2, metadata !"ule",300                                               metadata !"fpexcept.strict") #0301  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b302  ret <16 x i16> %res303}304 305define <16 x i16> @test_v16f16_une_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {306; AVX512-32-LABEL: test_v16f16_une_q:307; AVX512-32:       # %bb.0:308; AVX512-32-NEXT:    pushl %ebp309; AVX512-32-NEXT:    movl %esp, %ebp310; AVX512-32-NEXT:    andl $-32, %esp311; AVX512-32-NEXT:    subl $32, %esp312; AVX512-32-NEXT:    vcmpneqph 8(%ebp), %ymm2, %k1313; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}314; AVX512-32-NEXT:    movl %ebp, %esp315; AVX512-32-NEXT:    popl %ebp316; AVX512-32-NEXT:    retl317;318; AVX512-64-LABEL: test_v16f16_une_q:319; AVX512-64:       # %bb.0:320; AVX512-64-NEXT:    vcmpneqph %ymm3, %ymm2, %k1321; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}322; AVX512-64-NEXT:    retq323  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(324                                               <16 x half> %f1, <16 x half> %f2, metadata !"une",325                                               metadata !"fpexcept.strict") #0326  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b327  ret <16 x i16> %res328}329 330define <16 x i16> @test_v16f16_uno_q(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {331; AVX512-32-LABEL: test_v16f16_uno_q:332; AVX512-32:       # %bb.0:333; AVX512-32-NEXT:    pushl %ebp334; AVX512-32-NEXT:    movl %esp, %ebp335; AVX512-32-NEXT:    andl $-32, %esp336; AVX512-32-NEXT:    subl $32, %esp337; AVX512-32-NEXT:    vcmpunordph 8(%ebp), %ymm2, %k1338; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}339; AVX512-32-NEXT:    movl %ebp, %esp340; AVX512-32-NEXT:    popl %ebp341; AVX512-32-NEXT:    retl342;343; AVX512-64-LABEL: test_v16f16_uno_q:344; AVX512-64:       # %bb.0:345; AVX512-64-NEXT:    vcmpunordph %ymm3, %ymm2, %k1346; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}347; AVX512-64-NEXT:    retq348  %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(349                                               <16 x half> %f1, <16 x half> %f2, metadata !"uno",350                                               metadata !"fpexcept.strict") #0351  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b352  ret <16 x i16> %res353}354 355define <16 x i16> @test_v16f16_oeq_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {356; AVX512-32-LABEL: test_v16f16_oeq_s:357; AVX512-32:       # %bb.0:358; AVX512-32-NEXT:    pushl %ebp359; AVX512-32-NEXT:    movl %esp, %ebp360; AVX512-32-NEXT:    andl $-32, %esp361; AVX512-32-NEXT:    subl $32, %esp362; AVX512-32-NEXT:    vcmpeq_osph 8(%ebp), %ymm2, %k1363; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}364; AVX512-32-NEXT:    movl %ebp, %esp365; AVX512-32-NEXT:    popl %ebp366; AVX512-32-NEXT:    retl367;368; AVX512-64-LABEL: test_v16f16_oeq_s:369; AVX512-64:       # %bb.0:370; AVX512-64-NEXT:    vcmpeq_osph %ymm3, %ymm2, %k1371; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}372; AVX512-64-NEXT:    retq373  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(374                                               <16 x half> %f1, <16 x half> %f2, metadata !"oeq",375                                               metadata !"fpexcept.strict") #0376  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b377  ret <16 x i16> %res378}379 380define <16 x i16> @test_v16f16_ogt_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {381; AVX512-32-LABEL: test_v16f16_ogt_s:382; AVX512-32:       # %bb.0:383; AVX512-32-NEXT:    pushl %ebp384; AVX512-32-NEXT:    movl %esp, %ebp385; AVX512-32-NEXT:    andl $-32, %esp386; AVX512-32-NEXT:    subl $32, %esp387; AVX512-32-NEXT:    vcmpgtph 8(%ebp), %ymm2, %k1388; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}389; AVX512-32-NEXT:    movl %ebp, %esp390; AVX512-32-NEXT:    popl %ebp391; AVX512-32-NEXT:    retl392;393; AVX512-64-LABEL: test_v16f16_ogt_s:394; AVX512-64:       # %bb.0:395; AVX512-64-NEXT:    vcmpltph %ymm2, %ymm3, %k1396; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}397; AVX512-64-NEXT:    retq398  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(399                                               <16 x half> %f1, <16 x half> %f2, metadata !"ogt",400                                               metadata !"fpexcept.strict") #0401  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b402  ret <16 x i16> %res403}404 405define <16 x i16> @test_v16f16_oge_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {406; AVX512-32-LABEL: test_v16f16_oge_s:407; AVX512-32:       # %bb.0:408; AVX512-32-NEXT:    pushl %ebp409; AVX512-32-NEXT:    movl %esp, %ebp410; AVX512-32-NEXT:    andl $-32, %esp411; AVX512-32-NEXT:    subl $32, %esp412; AVX512-32-NEXT:    vcmpgeph 8(%ebp), %ymm2, %k1413; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}414; AVX512-32-NEXT:    movl %ebp, %esp415; AVX512-32-NEXT:    popl %ebp416; AVX512-32-NEXT:    retl417;418; AVX512-64-LABEL: test_v16f16_oge_s:419; AVX512-64:       # %bb.0:420; AVX512-64-NEXT:    vcmpleph %ymm2, %ymm3, %k1421; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}422; AVX512-64-NEXT:    retq423  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(424                                               <16 x half> %f1, <16 x half> %f2, metadata !"oge",425                                               metadata !"fpexcept.strict") #0426  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b427  ret <16 x i16> %res428}429 430define <16 x i16> @test_v16f16_olt_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {431; AVX512-32-LABEL: test_v16f16_olt_s:432; AVX512-32:       # %bb.0:433; AVX512-32-NEXT:    pushl %ebp434; AVX512-32-NEXT:    movl %esp, %ebp435; AVX512-32-NEXT:    andl $-32, %esp436; AVX512-32-NEXT:    subl $32, %esp437; AVX512-32-NEXT:    vcmpltph 8(%ebp), %ymm2, %k1438; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}439; AVX512-32-NEXT:    movl %ebp, %esp440; AVX512-32-NEXT:    popl %ebp441; AVX512-32-NEXT:    retl442;443; AVX512-64-LABEL: test_v16f16_olt_s:444; AVX512-64:       # %bb.0:445; AVX512-64-NEXT:    vcmpltph %ymm3, %ymm2, %k1446; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}447; AVX512-64-NEXT:    retq448  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(449                                               <16 x half> %f1, <16 x half> %f2, metadata !"olt",450                                               metadata !"fpexcept.strict") #0451  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b452  ret <16 x i16> %res453}454 455define <16 x i16> @test_v16f16_ole_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {456; AVX512-32-LABEL: test_v16f16_ole_s:457; AVX512-32:       # %bb.0:458; AVX512-32-NEXT:    pushl %ebp459; AVX512-32-NEXT:    movl %esp, %ebp460; AVX512-32-NEXT:    andl $-32, %esp461; AVX512-32-NEXT:    subl $32, %esp462; AVX512-32-NEXT:    vcmpleph 8(%ebp), %ymm2, %k1463; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}464; AVX512-32-NEXT:    movl %ebp, %esp465; AVX512-32-NEXT:    popl %ebp466; AVX512-32-NEXT:    retl467;468; AVX512-64-LABEL: test_v16f16_ole_s:469; AVX512-64:       # %bb.0:470; AVX512-64-NEXT:    vcmpleph %ymm3, %ymm2, %k1471; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}472; AVX512-64-NEXT:    retq473  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(474                                               <16 x half> %f1, <16 x half> %f2, metadata !"ole",475                                               metadata !"fpexcept.strict") #0476  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b477  ret <16 x i16> %res478}479 480define <16 x i16> @test_v16f16_one_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {481; AVX512-32-LABEL: test_v16f16_one_s:482; AVX512-32:       # %bb.0:483; AVX512-32-NEXT:    pushl %ebp484; AVX512-32-NEXT:    movl %esp, %ebp485; AVX512-32-NEXT:    andl $-32, %esp486; AVX512-32-NEXT:    subl $32, %esp487; AVX512-32-NEXT:    vcmpneq_osph 8(%ebp), %ymm2, %k1488; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}489; AVX512-32-NEXT:    movl %ebp, %esp490; AVX512-32-NEXT:    popl %ebp491; AVX512-32-NEXT:    retl492;493; AVX512-64-LABEL: test_v16f16_one_s:494; AVX512-64:       # %bb.0:495; AVX512-64-NEXT:    vcmpneq_osph %ymm3, %ymm2, %k1496; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}497; AVX512-64-NEXT:    retq498  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(499                                               <16 x half> %f1, <16 x half> %f2, metadata !"one",500                                               metadata !"fpexcept.strict") #0501  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b502  ret <16 x i16> %res503}504 505define <16 x i16> @test_v16f16_ord_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {506; AVX512-32-LABEL: test_v16f16_ord_s:507; AVX512-32:       # %bb.0:508; AVX512-32-NEXT:    pushl %ebp509; AVX512-32-NEXT:    movl %esp, %ebp510; AVX512-32-NEXT:    andl $-32, %esp511; AVX512-32-NEXT:    subl $32, %esp512; AVX512-32-NEXT:    vcmpord_sph 8(%ebp), %ymm2, %k1513; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}514; AVX512-32-NEXT:    movl %ebp, %esp515; AVX512-32-NEXT:    popl %ebp516; AVX512-32-NEXT:    retl517;518; AVX512-64-LABEL: test_v16f16_ord_s:519; AVX512-64:       # %bb.0:520; AVX512-64-NEXT:    vcmpord_sph %ymm3, %ymm2, %k1521; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}522; AVX512-64-NEXT:    retq523  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(524                                               <16 x half> %f1, <16 x half> %f2, metadata !"ord",525                                               metadata !"fpexcept.strict") #0526  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b527  ret <16 x i16> %res528}529 530define <16 x i16> @test_v16f16_ueq_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {531; AVX512-32-LABEL: test_v16f16_ueq_s:532; AVX512-32:       # %bb.0:533; AVX512-32-NEXT:    pushl %ebp534; AVX512-32-NEXT:    movl %esp, %ebp535; AVX512-32-NEXT:    andl $-32, %esp536; AVX512-32-NEXT:    subl $32, %esp537; AVX512-32-NEXT:    vcmpeq_usph 8(%ebp), %ymm2, %k1538; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}539; AVX512-32-NEXT:    movl %ebp, %esp540; AVX512-32-NEXT:    popl %ebp541; AVX512-32-NEXT:    retl542;543; AVX512-64-LABEL: test_v16f16_ueq_s:544; AVX512-64:       # %bb.0:545; AVX512-64-NEXT:    vcmpeq_usph %ymm3, %ymm2, %k1546; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}547; AVX512-64-NEXT:    retq548  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(549                                               <16 x half> %f1, <16 x half> %f2, metadata !"ueq",550                                               metadata !"fpexcept.strict") #0551  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b552  ret <16 x i16> %res553}554 555define <16 x i16> @test_v16f16_ugt_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {556; AVX512-32-LABEL: test_v16f16_ugt_s:557; AVX512-32:       # %bb.0:558; AVX512-32-NEXT:    pushl %ebp559; AVX512-32-NEXT:    movl %esp, %ebp560; AVX512-32-NEXT:    andl $-32, %esp561; AVX512-32-NEXT:    subl $32, %esp562; AVX512-32-NEXT:    vcmpnleph 8(%ebp), %ymm2, %k1563; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}564; AVX512-32-NEXT:    movl %ebp, %esp565; AVX512-32-NEXT:    popl %ebp566; AVX512-32-NEXT:    retl567;568; AVX512-64-LABEL: test_v16f16_ugt_s:569; AVX512-64:       # %bb.0:570; AVX512-64-NEXT:    vcmpnleph %ymm3, %ymm2, %k1571; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}572; AVX512-64-NEXT:    retq573  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(574                                               <16 x half> %f1, <16 x half> %f2, metadata !"ugt",575                                               metadata !"fpexcept.strict") #0576  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b577  ret <16 x i16> %res578}579 580define <16 x i16> @test_v16f16_uge_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {581; AVX512-32-LABEL: test_v16f16_uge_s:582; AVX512-32:       # %bb.0:583; AVX512-32-NEXT:    pushl %ebp584; AVX512-32-NEXT:    movl %esp, %ebp585; AVX512-32-NEXT:    andl $-32, %esp586; AVX512-32-NEXT:    subl $32, %esp587; AVX512-32-NEXT:    vcmpnltph 8(%ebp), %ymm2, %k1588; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}589; AVX512-32-NEXT:    movl %ebp, %esp590; AVX512-32-NEXT:    popl %ebp591; AVX512-32-NEXT:    retl592;593; AVX512-64-LABEL: test_v16f16_uge_s:594; AVX512-64:       # %bb.0:595; AVX512-64-NEXT:    vcmpnltph %ymm3, %ymm2, %k1596; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}597; AVX512-64-NEXT:    retq598  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(599                                               <16 x half> %f1, <16 x half> %f2, metadata !"uge",600                                               metadata !"fpexcept.strict") #0601  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b602  ret <16 x i16> %res603}604 605define <16 x i16> @test_v16f16_ult_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {606; AVX512-32-LABEL: test_v16f16_ult_s:607; AVX512-32:       # %bb.0:608; AVX512-32-NEXT:    pushl %ebp609; AVX512-32-NEXT:    movl %esp, %ebp610; AVX512-32-NEXT:    andl $-32, %esp611; AVX512-32-NEXT:    subl $32, %esp612; AVX512-32-NEXT:    vcmpngeph 8(%ebp), %ymm2, %k1613; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}614; AVX512-32-NEXT:    movl %ebp, %esp615; AVX512-32-NEXT:    popl %ebp616; AVX512-32-NEXT:    retl617;618; AVX512-64-LABEL: test_v16f16_ult_s:619; AVX512-64:       # %bb.0:620; AVX512-64-NEXT:    vcmpnleph %ymm2, %ymm3, %k1621; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}622; AVX512-64-NEXT:    retq623  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(624                                               <16 x half> %f1, <16 x half> %f2, metadata !"ult",625                                               metadata !"fpexcept.strict") #0626  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b627  ret <16 x i16> %res628}629 630define <16 x i16> @test_v16f16_ule_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {631; AVX512-32-LABEL: test_v16f16_ule_s:632; AVX512-32:       # %bb.0:633; AVX512-32-NEXT:    pushl %ebp634; AVX512-32-NEXT:    movl %esp, %ebp635; AVX512-32-NEXT:    andl $-32, %esp636; AVX512-32-NEXT:    subl $32, %esp637; AVX512-32-NEXT:    vcmpngtph 8(%ebp), %ymm2, %k1638; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}639; AVX512-32-NEXT:    movl %ebp, %esp640; AVX512-32-NEXT:    popl %ebp641; AVX512-32-NEXT:    retl642;643; AVX512-64-LABEL: test_v16f16_ule_s:644; AVX512-64:       # %bb.0:645; AVX512-64-NEXT:    vcmpnltph %ymm2, %ymm3, %k1646; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}647; AVX512-64-NEXT:    retq648  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(649                                               <16 x half> %f1, <16 x half> %f2, metadata !"ule",650                                               metadata !"fpexcept.strict") #0651  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b652  ret <16 x i16> %res653}654 655define <16 x i16> @test_v16f16_une_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {656; AVX512-32-LABEL: test_v16f16_une_s:657; AVX512-32:       # %bb.0:658; AVX512-32-NEXT:    pushl %ebp659; AVX512-32-NEXT:    movl %esp, %ebp660; AVX512-32-NEXT:    andl $-32, %esp661; AVX512-32-NEXT:    subl $32, %esp662; AVX512-32-NEXT:    vcmpneq_usph 8(%ebp), %ymm2, %k1663; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}664; AVX512-32-NEXT:    movl %ebp, %esp665; AVX512-32-NEXT:    popl %ebp666; AVX512-32-NEXT:    retl667;668; AVX512-64-LABEL: test_v16f16_une_s:669; AVX512-64:       # %bb.0:670; AVX512-64-NEXT:    vcmpneq_usph %ymm3, %ymm2, %k1671; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}672; AVX512-64-NEXT:    retq673  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(674                                               <16 x half> %f1, <16 x half> %f2, metadata !"une",675                                               metadata !"fpexcept.strict") #0676  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b677  ret <16 x i16> %res678}679 680define <16 x i16> @test_v16f16_uno_s(<16 x i16> %a, <16 x i16> %b, <16 x half> %f1, <16 x half> %f2) #0 {681; AVX512-32-LABEL: test_v16f16_uno_s:682; AVX512-32:       # %bb.0:683; AVX512-32-NEXT:    pushl %ebp684; AVX512-32-NEXT:    movl %esp, %ebp685; AVX512-32-NEXT:    andl $-32, %esp686; AVX512-32-NEXT:    subl $32, %esp687; AVX512-32-NEXT:    vcmpunord_sph 8(%ebp), %ymm2, %k1688; AVX512-32-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}689; AVX512-32-NEXT:    movl %ebp, %esp690; AVX512-32-NEXT:    popl %ebp691; AVX512-32-NEXT:    retl692;693; AVX512-64-LABEL: test_v16f16_uno_s:694; AVX512-64:       # %bb.0:695; AVX512-64-NEXT:    vcmpunord_sph %ymm3, %ymm2, %k1696; AVX512-64-NEXT:    vpblendmw %ymm0, %ymm1, %ymm0 {%k1}697; AVX512-64-NEXT:    retq698  %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(699                                               <16 x half> %f1, <16 x half> %f2, metadata !"uno",700                                               metadata !"fpexcept.strict") #0701  %res = select <16 x i1> %cond, <16 x i16> %a, <16 x i16> %b702  ret <16 x i16> %res703}704 705attributes #0 = { strictfp nounwind }706 707declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f16(<16 x half>, <16 x half>, metadata, metadata)708declare <16 x i1> @llvm.experimental.constrained.fcmps.v16f16(<16 x half>, <16 x half>, metadata, metadata)709