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