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