brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.4 KiB · d19c9bb Raw
659 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx -mattr=+avx512fp16 | FileCheck %s3 4define <32 x half> @vaddph_512_test(<32 x half> %i, <32 x half> %j) nounwind readnone {5; CHECK-LABEL: vaddph_512_test:6; CHECK:       ## %bb.0:7; CHECK-NEXT:    vaddph %zmm1, %zmm0, %zmm08; CHECK-NEXT:    retq9  %x = fadd  <32 x half> %i, %j10  ret <32 x half> %x11}12 13define <32 x half> @vaddph_512_fold_test(<32 x half> %i, ptr %j) nounwind {14; CHECK-LABEL: vaddph_512_fold_test:15; CHECK:       ## %bb.0:16; CHECK-NEXT:    vaddph (%rdi), %zmm0, %zmm017; CHECK-NEXT:    retq18  %tmp = load <32 x half>, ptr %j, align 419  %x = fadd  <32 x half> %i, %tmp20  ret <32 x half> %x21}22 23define <32 x half> @vaddph_512_broadc_test(<32 x half> %a) nounwind {24; CHECK-LABEL: vaddph_512_broadc_test:25; CHECK:       ## %bb.0:26; CHECK-NEXT:    vaddph {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to32}, %zmm0, %zmm027; CHECK-NEXT:    retq28  %b = fadd <32 x half> %a, <half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0>29  ret <32 x half> %b30}31 32define <16 x half> @vaddph_256_broadc_test(<16 x half> %a) nounwind {33; CHECK-LABEL: vaddph_256_broadc_test:34; CHECK:       ## %bb.0:35; CHECK-NEXT:    vaddph {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %ymm0, %ymm036; CHECK-NEXT:    retq37  %b = fadd <16 x half> %a, <half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0>38  ret <16 x half> %b39}40 41define <8 x half> @vaddph_128_broadc_test(<8 x half> %a) nounwind {42; CHECK-LABEL: vaddph_128_broadc_test:43; CHECK:       ## %bb.0:44; CHECK-NEXT:    vaddph {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %xmm0, %xmm045; CHECK-NEXT:    retq46  %b = fadd <8 x half> %a, <half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0>47  ret <8 x half> %b48}49 50define <32 x half> @vaddph_512_mask_test1(<32 x half> %i, <32 x half> %j, <32 x i1> %mask) nounwind readnone {51; CHECK-LABEL: vaddph_512_mask_test1:52; CHECK:       ## %bb.0:53; CHECK-NEXT:    vpsllw $7, %ymm2, %ymm254; CHECK-NEXT:    vpmovb2m %ymm2, %k155; CHECK-NEXT:    vaddph %zmm1, %zmm0, %zmm0 {%k1}56; CHECK-NEXT:    retq57  %x = fadd  <32 x half> %i, %j58  %r = select <32 x i1> %mask, <32 x half> %x, <32 x half> %i59  ret <32 x half> %r60}61 62define <32 x half> @vaddph_512_mask_test(<32 x half> %i, <32 x half> %j, <32 x half> %mask1) nounwind readnone {63; CHECK-LABEL: vaddph_512_mask_test:64; CHECK:       ## %bb.0:65; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm366; CHECK-NEXT:    vcmpneq_oqph %zmm3, %zmm2, %k167; CHECK-NEXT:    vaddph %zmm1, %zmm0, %zmm0 {%k1}68; CHECK-NEXT:    retq69  %mask = fcmp one <32 x half> %mask1, zeroinitializer70  %x = fadd  <32 x half> %i, %j71  %r = select <32 x i1> %mask, <32 x half> %x, <32 x half> %i72  ret <32 x half> %r73}74 75define <32 x half> @vaddph_512_maskz_test(<32 x half> %i, <32 x half> %j, <32 x half> %mask1) nounwind readnone {76; CHECK-LABEL: vaddph_512_maskz_test:77; CHECK:       ## %bb.0:78; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm379; CHECK-NEXT:    vcmpneq_oqph %zmm3, %zmm2, %k180; CHECK-NEXT:    vaddph %zmm1, %zmm0, %zmm0 {%k1} {z}81; CHECK-NEXT:    retq82  %mask = fcmp one <32 x half> %mask1, zeroinitializer83  %x = fadd  <32 x half> %i, %j84  %r = select <32 x i1> %mask, <32 x half> %x, <32 x half> zeroinitializer85  ret <32 x half> %r86}87 88define <32 x half> @vaddph_512_mask_fold_test(<32 x half> %i, ptr %j.ptr, <32 x half> %mask1) nounwind readnone {89; CHECK-LABEL: vaddph_512_mask_fold_test:90; CHECK:       ## %bb.0:91; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm292; CHECK-NEXT:    vcmpneq_oqph %zmm2, %zmm1, %k193; CHECK-NEXT:    vaddph (%rdi), %zmm0, %zmm0 {%k1}94; CHECK-NEXT:    retq95  %mask = fcmp one <32 x half> %mask1, zeroinitializer96  %j = load <32 x half>, ptr %j.ptr97  %x = fadd  <32 x half> %i, %j98  %r = select <32 x i1> %mask, <32 x half> %x, <32 x half> %i99  ret <32 x half> %r100}101 102define <32 x half> @vaddph_512_maskz_fold_test(<32 x half> %i, ptr %j.ptr, <32 x half> %mask1) nounwind readnone {103; CHECK-LABEL: vaddph_512_maskz_fold_test:104; CHECK:       ## %bb.0:105; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2106; CHECK-NEXT:    vcmpneq_oqph %zmm2, %zmm1, %k1107; CHECK-NEXT:    vaddph (%rdi), %zmm0, %zmm0 {%k1} {z}108; CHECK-NEXT:    retq109  %mask = fcmp one <32 x half> %mask1, zeroinitializer110  %j = load <32 x half>, ptr %j.ptr111  %x = fadd  <32 x half> %i, %j112  %r = select <32 x i1> %mask, <32 x half> %x, <32 x half> zeroinitializer113  ret <32 x half> %r114}115 116define <32 x half> @vaddph_512_maskz_fold_test_2(<32 x half> %i, ptr %j.ptr, <32 x half> %mask1) nounwind readnone {117; CHECK-LABEL: vaddph_512_maskz_fold_test_2:118; CHECK:       ## %bb.0:119; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2120; CHECK-NEXT:    vcmpneq_oqph %zmm2, %zmm1, %k1121; CHECK-NEXT:    vaddph (%rdi), %zmm0, %zmm0 {%k1} {z}122; CHECK-NEXT:    retq123  %mask = fcmp one <32 x half> %mask1, zeroinitializer124  %j = load <32 x half>, ptr %j.ptr125  %x = fadd  <32 x half> %j, %i126  %r = select <32 x i1> %mask, <32 x half> %x, <32 x half> zeroinitializer127  ret <32 x half> %r128}129 130define <32 x half> @vsubph_512_test(<32 x half> %i, <32 x half> %j) nounwind readnone {131; CHECK-LABEL: vsubph_512_test:132; CHECK:       ## %bb.0:133; CHECK-NEXT:    vsubph %zmm1, %zmm0, %zmm0134; CHECK-NEXT:    retq135  %x = fsub  <32 x half> %i, %j136  ret <32 x half> %x137}138 139define <32 x half> @vmulph_512_test(<32 x half> %i, <32 x half> %j) nounwind readnone {140; CHECK-LABEL: vmulph_512_test:141; CHECK:       ## %bb.0:142; CHECK-NEXT:    vmulph %zmm1, %zmm0, %zmm0143; CHECK-NEXT:    retq144  %x = fmul  <32 x half> %i, %j145  ret <32 x half> %x146}147 148define <32 x half> @vdivph_512_test(<32 x half> %i, <32 x half> %j) nounwind readnone {149; CHECK-LABEL: vdivph_512_test:150; CHECK:       ## %bb.0:151; CHECK-NEXT:    vdivph %zmm1, %zmm0, %zmm0152; CHECK-NEXT:    retq153  %x = fdiv  <32 x half> %i, %j154  ret <32 x half> %x155}156 157define <32 x half> @vdivph_512_test_fast(<32 x half> %i, <32 x half> %j) nounwind readnone {158; CHECK-LABEL: vdivph_512_test_fast:159; CHECK:       ## %bb.0:160; CHECK-NEXT:    vrcpph %zmm1, %zmm1161; CHECK-NEXT:    vmulph %zmm0, %zmm1, %zmm0162; CHECK-NEXT:    retq163  %x = fdiv fast <32 x half> %i, %j164  ret <32 x half> %x165}166 167define half @add_sh(half %i, half %j, ptr %x.ptr) nounwind readnone {168; CHECK-LABEL: add_sh:169; CHECK:       ## %bb.0:170; CHECK-NEXT:    vaddsh %xmm1, %xmm0, %xmm0171; CHECK-NEXT:    vaddsh (%rdi), %xmm0, %xmm0172; CHECK-NEXT:    retq173  %x = load half, ptr %x.ptr174  %y = fadd  half %i, %j175  %r = fadd  half %x, %y176  ret half %r177}178 179define half @sub_sh(half %i, half %j, ptr %x.ptr) nounwind readnone {180; CHECK-LABEL: sub_sh:181; CHECK:       ## %bb.0:182; CHECK-NEXT:    vmovsh {{.*#+}} xmm2 = mem[0],zero,zero,zero,zero,zero,zero,zero183; CHECK-NEXT:    vsubsh %xmm1, %xmm0, %xmm0184; CHECK-NEXT:    vsubsh %xmm0, %xmm2, %xmm0185; CHECK-NEXT:    retq186  %x = load half, ptr %x.ptr187  %y = fsub  half %i, %j188  %r = fsub  half %x, %y189  ret half %r190}191 192define half @sub_sh_2(half %i, half %j, ptr %x.ptr) nounwind readnone {193; CHECK-LABEL: sub_sh_2:194; CHECK:       ## %bb.0:195; CHECK-NEXT:    vsubsh %xmm1, %xmm0, %xmm0196; CHECK-NEXT:    vsubsh (%rdi), %xmm0, %xmm0197; CHECK-NEXT:    retq198  %x = load half, ptr %x.ptr199  %y = fsub  half %i, %j200  %r = fsub  half %y, %x201  ret half %r202}203 204define half @mul_sh(half %i, half %j, ptr %x.ptr) nounwind readnone {205; CHECK-LABEL: mul_sh:206; CHECK:       ## %bb.0:207; CHECK-NEXT:    vmulsh %xmm1, %xmm0, %xmm0208; CHECK-NEXT:    vmulsh (%rdi), %xmm0, %xmm0209; CHECK-NEXT:    retq210  %x = load half, ptr %x.ptr211  %y = fmul  half %i, %j212  %r = fmul  half %x, %y213  ret half %r214}215 216define half @div_sh(half %i, half %j, ptr %x.ptr) nounwind readnone {217; CHECK-LABEL: div_sh:218; CHECK:       ## %bb.0:219; CHECK-NEXT:    vmovsh {{.*#+}} xmm2 = mem[0],zero,zero,zero,zero,zero,zero,zero220; CHECK-NEXT:    vdivsh %xmm1, %xmm0, %xmm0221; CHECK-NEXT:    vdivsh %xmm0, %xmm2, %xmm0222; CHECK-NEXT:    retq223  %x = load half, ptr %x.ptr224  %y = fdiv  half %i, %j225  %r = fdiv  half %x, %y226  ret half %r227}228 229define half @div_sh_2(half %i, half %j, ptr %x.ptr) nounwind readnone {230; CHECK-LABEL: div_sh_2:231; CHECK:       ## %bb.0:232; CHECK-NEXT:    vdivsh %xmm1, %xmm0, %xmm0233; CHECK-NEXT:    vdivsh (%rdi), %xmm0, %xmm0234; CHECK-NEXT:    retq235  %x = load half, ptr %x.ptr236  %y = fdiv  half %i, %j237  %r = fdiv  half %y, %x238  ret half %r239}240 241define half @div_sh_3(half %i, half %j) nounwind readnone {242; CHECK-LABEL: div_sh_3:243; CHECK:       ## %bb.0:244; CHECK-NEXT:    vrcpsh %xmm1, %xmm1, %xmm1245; CHECK-NEXT:    vmulsh %xmm0, %xmm1, %xmm0246; CHECK-NEXT:    retq247  %r = fdiv fast half %i, %j248  ret half %r249}250 251define i1 @cmp_une_sh(half %x, half %y) {252; CHECK-LABEL: cmp_une_sh:253; CHECK:       ## %bb.0: ## %entry254; CHECK-NEXT:    vcmpneqsh %xmm1, %xmm0, %k0255; CHECK-NEXT:    kmovd %k0, %eax256; CHECK-NEXT:    ## kill: def $al killed $al killed $eax257; CHECK-NEXT:    retq258entry:259  %0 = fcmp une half %x, %y260  ret i1 %0261}262 263define i1 @cmp_oeq_sh(half %x, half %y) {264; CHECK-LABEL: cmp_oeq_sh:265; CHECK:       ## %bb.0: ## %entry266; CHECK-NEXT:    vcmpeqsh %xmm1, %xmm0, %k0267; CHECK-NEXT:    kmovd %k0, %eax268; CHECK-NEXT:    ## kill: def $al killed $al killed $eax269; CHECK-NEXT:    retq270entry:271  %0 = fcmp oeq half %x, %y272  ret i1 %0273}274 275define i1 @cmp_olt_sh(half %x, half %y) {276; CHECK-LABEL: cmp_olt_sh:277; CHECK:       ## %bb.0: ## %entry278; CHECK-NEXT:    vucomish %xmm0, %xmm1279; CHECK-NEXT:    seta %al280; CHECK-NEXT:    retq281  entry:282  %0 = fcmp olt half %x, %y283  ret i1 %0284}285 286define <32 x i1> @cmp_ph(<32 x half> %x, <32 x half> %y) {287; CHECK-LABEL: cmp_ph:288; CHECK:       ## %bb.0: ## %entry289; CHECK-NEXT:    vcmpneqph %zmm1, %zmm0, %k0290; CHECK-NEXT:    vpmovm2b %k0, %ymm0291; CHECK-NEXT:    retq292entry:293  %0 = fcmp une <32 x half> %x, %y294  ret <32 x i1> %0295}296 297define half @fneg(half %x) {298; CHECK-LABEL: fneg:299; CHECK:       ## %bb.0:300; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]301; CHECK-NEXT:    vpxor %xmm1, %xmm0, %xmm0302; CHECK-NEXT:    retq303  %a = fneg half %x304  ret half %a305}306 307define half @fneg_idiom(half %x) {308; CHECK-LABEL: fneg_idiom:309; CHECK:       ## %bb.0:310; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]311; CHECK-NEXT:    vpxor %xmm1, %xmm0, %xmm0312; CHECK-NEXT:    retq313  %a = fsub half -0.0, %x314  ret half %a315}316 317define half @fabs(half %x) {318; CHECK-LABEL: fabs:319; CHECK:       ## %bb.0:320; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]321; CHECK-NEXT:    vpand %xmm1, %xmm0, %xmm0322; CHECK-NEXT:    retq323  %a = call half @llvm.fabs.f16(half %x)324  ret half %a325}326declare half @llvm.fabs.f16(half)327 328define half @fcopysign(half %x, half %y) {329; CHECK-LABEL: fcopysign:330; CHECK:       ## %bb.0:331; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]332; CHECK-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm1 ^ (xmm2 & (xmm0 ^ xmm1))333; CHECK-NEXT:    retq334  %a = call half @llvm.copysign.f16(half %x, half %y)335  ret half %a336}337declare half @llvm.copysign.f16(half, half)338 339define half @fround(half %x) {340; CHECK-LABEL: fround:341; CHECK:       ## %bb.0:342; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]343; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1]344; CHECK-NEXT:    vpternlogq {{.*#+}} xmm2 = xmm2 | (xmm0 & xmm1)345; CHECK-NEXT:    vaddsh %xmm2, %xmm0, %xmm0346; CHECK-NEXT:    vrndscalesh $11, %xmm0, %xmm0, %xmm0347; CHECK-NEXT:    retq348  %a = call half @llvm.round.f16(half %x)349  ret half %a350}351declare half @llvm.round.f16(half)352 353define <8 x half> @fnegv8f16(<8 x half> %x) {354; CHECK-LABEL: fnegv8f16:355; CHECK:       ## %bb.0:356; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]357; CHECK-NEXT:    vpxor %xmm1, %xmm0, %xmm0358; CHECK-NEXT:    retq359  %a = fneg <8 x half> %x360  ret <8 x half> %a361}362 363define <8 x half> @fneg_idiomv8f16(<8 x half> %x) {364; CHECK-LABEL: fneg_idiomv8f16:365; CHECK:       ## %bb.0:366; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]367; CHECK-NEXT:    vpxor %xmm1, %xmm0, %xmm0368; CHECK-NEXT:    retq369  %a = fsub <8 x half> <half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0>, %x370  ret <8 x half> %a371}372 373define <8 x half> @fabsv8f16(<8 x half> %x) {374; CHECK-LABEL: fabsv8f16:375; CHECK:       ## %bb.0:376; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]377; CHECK-NEXT:    vpand %xmm1, %xmm0, %xmm0378; CHECK-NEXT:    retq379  %a = call <8 x half> @llvm.fabs.v8f16(<8 x half> %x)380  ret <8 x half> %a381}382declare <8 x half> @llvm.fabs.v8f16(<8 x half>)383 384define <8 x half> @fcopysignv8f16(<8 x half> %x, <8 x half> %y) {385; CHECK-LABEL: fcopysignv8f16:386; CHECK:       ## %bb.0:387; CHECK-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm1 ^ (m32bcst & (xmm0 ^ xmm1))388; CHECK-NEXT:    retq389  %a = call <8 x half> @llvm.copysign.v8f16(<8 x half> %x, <8 x half> %y)390  ret <8 x half> %a391}392declare <8 x half> @llvm.copysign.v8f16(<8 x half>, <8 x half>)393 394define <8 x half> @roundv8f16(<8 x half> %x) {395; CHECK-LABEL: roundv8f16:396; CHECK:       ## %bb.0:397; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]398; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1]399; CHECK-NEXT:    vpternlogq {{.*#+}} xmm2 = xmm2 | (xmm0 & xmm1)400; CHECK-NEXT:    vaddph %xmm2, %xmm0, %xmm0401; CHECK-NEXT:    vrndscaleph $11, %xmm0, %xmm0402; CHECK-NEXT:    retq403  %a = call <8 x half> @llvm.round.v8f16(<8 x half> %x)404  ret <8 x half> %a405}406declare <8 x half> @llvm.round.v8f16(<8 x half>)407 408define <16 x half> @fnegv16f16(<16 x half> %x) {409; CHECK-LABEL: fnegv16f16:410; CHECK:       ## %bb.0:411; CHECK-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]412; CHECK-NEXT:    vpxor %ymm1, %ymm0, %ymm0413; CHECK-NEXT:    retq414  %a = fneg <16 x half> %x415  ret <16 x half> %a416}417 418define <16 x half> @fneg_idiomv16f16(<16 x half> %x) {419; CHECK-LABEL: fneg_idiomv16f16:420; CHECK:       ## %bb.0:421; CHECK-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]422; CHECK-NEXT:    vpxor %ymm1, %ymm0, %ymm0423; CHECK-NEXT:    retq424  %a = fsub <16 x half> <half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0>, %x425  ret <16 x half> %a426}427 428define <16 x half> @fabsv16f16(<16 x half> %x) {429; CHECK-LABEL: fabsv16f16:430; CHECK:       ## %bb.0:431; CHECK-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]432; CHECK-NEXT:    vpand %ymm1, %ymm0, %ymm0433; CHECK-NEXT:    retq434  %a = call <16 x half> @llvm.fabs.v16f16(<16 x half> %x)435  ret <16 x half> %a436}437declare <16 x half> @llvm.fabs.v16f16(<16 x half>)438 439define <16 x half> @fcopysignv16f16(<16 x half> %x, <16 x half> %y) {440; CHECK-LABEL: fcopysignv16f16:441; CHECK:       ## %bb.0:442; CHECK-NEXT:    vpternlogd {{.*#+}} ymm0 = ymm1 ^ (m32bcst & (ymm0 ^ ymm1))443; CHECK-NEXT:    retq444  %a = call <16 x half> @llvm.copysign.v16f16(<16 x half> %x, <16 x half> %y)445  ret <16 x half> %a446}447declare <16 x half> @llvm.copysign.v16f16(<16 x half>, <16 x half>)448 449define <16 x half> @roundv16f16(<16 x half> %x) {450; CHECK-LABEL: roundv16f16:451; CHECK:       ## %bb.0:452; CHECK-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]453; CHECK-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1]454; CHECK-NEXT:    vpternlogq {{.*#+}} ymm2 = ymm2 | (ymm0 & ymm1)455; CHECK-NEXT:    vaddph %ymm2, %ymm0, %ymm0456; CHECK-NEXT:    vrndscaleph $11, %ymm0, %ymm0457; CHECK-NEXT:    retq458  %a = call <16 x half> @llvm.round.v16f16(<16 x half> %x)459  ret <16 x half> %a460}461declare <16 x half> @llvm.round.v16f16(<16 x half>)462 463define <32 x half> @fnegv32f16(<32 x half> %x) {464; CHECK-LABEL: fnegv32f16:465; CHECK:       ## %bb.0:466; CHECK-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]467; CHECK-NEXT:    vpxorq %zmm1, %zmm0, %zmm0468; CHECK-NEXT:    retq469  %a = fneg <32 x half> %x470  ret <32 x half> %a471}472 473define <32 x half> @fneg_idiomv32f16(<32 x half> %x) {474; CHECK-LABEL: fneg_idiomv32f16:475; CHECK:       ## %bb.0:476; CHECK-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]477; CHECK-NEXT:    vpxorq %zmm1, %zmm0, %zmm0478; CHECK-NEXT:    retq479  %a = fsub <32 x half> <half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0>, %x480  ret <32 x half> %a481}482 483define <32 x half> @fabsv32f16(<32 x half> %x) {484; CHECK-LABEL: fabsv32f16:485; CHECK:       ## %bb.0:486; CHECK-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]487; CHECK-NEXT:    vpandq %zmm1, %zmm0, %zmm0488; CHECK-NEXT:    retq489  %a = call <32 x half> @llvm.fabs.v32f16(<32 x half> %x)490  ret <32 x half> %a491}492declare <32 x half> @llvm.fabs.v32f16(<32 x half>)493 494define <32 x half> @fcopysignv32f16(<32 x half> %x, <32 x half> %y) {495; CHECK-LABEL: fcopysignv32f16:496; CHECK:       ## %bb.0:497; CHECK-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm1 ^ (m32bcst & (zmm0 ^ zmm1))498; CHECK-NEXT:    retq499  %a = call <32 x half> @llvm.copysign.v32f16(<32 x half> %x, <32 x half> %y)500  ret <32 x half> %a501}502declare <32 x half> @llvm.copysign.v32f16(<32 x half>, <32 x half>)503 504define <32 x half> @roundv32f16(<32 x half> %x) {505; CHECK-LABEL: roundv32f16:506; CHECK:       ## %bb.0:507; CHECK-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]508; CHECK-NEXT:    vpbroadcastw {{.*#+}} zmm2 = [4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1]509; CHECK-NEXT:    vpternlogq {{.*#+}} zmm2 = zmm2 | (zmm0 & zmm1)510; CHECK-NEXT:    vaddph %zmm2, %zmm0, %zmm0511; CHECK-NEXT:    vrndscaleph $11, %zmm0, %zmm0512; CHECK-NEXT:    retq513  %a = call <32 x half> @llvm.round.v32f16(<32 x half> %x)514  ret <32 x half> %a515}516declare <32 x half> @llvm.round.v32f16(<32 x half>)517 518define <8 x half>  @regression_test1(<8 x half> %x, <8 x half> %y) #0 {519; CHECK-LABEL: regression_test1:520; CHECK:       ## %bb.0: ## %entry521; CHECK-NEXT:    vsubph %xmm1, %xmm0, %xmm2522; CHECK-NEXT:    vaddph %xmm1, %xmm0, %xmm0523; CHECK-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1],xmm2[2],xmm0[3],xmm2[4],xmm0[5],xmm2[6],xmm0[7]524; CHECK-NEXT:    retq525entry:526  %a = fsub <8 x half> %x, %y527  %b = fadd <8 x half> %x, %y528  %c = shufflevector <8 x half> %a, <8 x half> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>529  ret <8 x half> %c530}531 532define <8 x i16>  @regression_test2(<8 x float> %x) #0 {533; CHECK-LABEL: regression_test2:534; CHECK:       ## %bb.0: ## %entry535; CHECK-NEXT:    vcvttps2udq %ymm0, %ymm0536; CHECK-NEXT:    vpmovdw %ymm0, %xmm0537; CHECK-NEXT:    vzeroupper538; CHECK-NEXT:    retq539entry:540  %a = fptoui <8 x float> %x to  <8 x i16>541  ret <8 x i16> %a542}543 544define <8 x i16>  @regression_test3(<8 x float> %x) #0 {545; CHECK-LABEL: regression_test3:546; CHECK:       ## %bb.0: ## %entry547; CHECK-NEXT:    vcvttps2dq %ymm0, %ymm0548; CHECK-NEXT:    vpmovdw %ymm0, %xmm0549; CHECK-NEXT:    vzeroupper550; CHECK-NEXT:    retq551entry:552  %a = fptosi <8 x float> %x to  <8 x i16>553  ret <8 x i16> %a554}555 556define <8 x i16>  @regression_test4(<8 x double> %x) #0 {557; CHECK-LABEL: regression_test4:558; CHECK:       ## %bb.0: ## %entry559; CHECK-NEXT:    vcvttpd2udq %zmm0, %ymm0560; CHECK-NEXT:    vpmovdw %ymm0, %xmm0561; CHECK-NEXT:    vzeroupper562; CHECK-NEXT:    retq563entry:564  %a = fptoui <8 x double> %x to  <8 x i16>565  ret <8 x i16> %a566}567 568define <8 x i16>  @regression_test5(<8 x double> %x) #0 {569; CHECK-LABEL: regression_test5:570; CHECK:       ## %bb.0: ## %entry571; CHECK-NEXT:    vcvttpd2dq %zmm0, %ymm0572; CHECK-NEXT:    vpmovdw %ymm0, %xmm0573; CHECK-NEXT:    vzeroupper574; CHECK-NEXT:    retq575entry:576  %a = fptosi <8 x double> %x to  <8 x i16>577  ret <8 x i16> %a578}579 580define <8 x i1> @fcmp_v8f16(<8 x half> %a, <8 x half> %b)581; CHECK-LABEL: fcmp_v8f16:582; CHECK:       ## %bb.0: ## %entry583; CHECK-NEXT:    vcmpeqph %xmm1, %xmm0, %k0584; CHECK-NEXT:    vpmovm2w %k0, %xmm0585; CHECK-NEXT:    retq586{587entry:588  %0 = fcmp oeq <8 x half> %a, %b589  ret <8 x i1> %0590}591 592define <16 x i1> @fcmp_v16f16(<16 x half> %a, <16 x half> %b)593; CHECK-LABEL: fcmp_v16f16:594; CHECK:       ## %bb.0: ## %entry595; CHECK-NEXT:    vcmpeqph %ymm1, %ymm0, %k0596; CHECK-NEXT:    vpmovm2b %k0, %xmm0597; CHECK-NEXT:    vzeroupper598; CHECK-NEXT:    retq599{600entry:601  %0 = fcmp oeq <16 x half> %a, %b602  ret <16 x i1> %0603}604 605define <32 x i1> @fcmp_v32f16(<32 x half> %a, <32 x half> %b)606; CHECK-LABEL: fcmp_v32f16:607; CHECK:       ## %bb.0: ## %entry608; CHECK-NEXT:    vcmpeqph %zmm1, %zmm0, %k0609; CHECK-NEXT:    vpmovm2b %k0, %ymm0610; CHECK-NEXT:    retq611{612entry:613  %0 = fcmp oeq <32 x half> %a, %b614  ret <32 x i1> %0615}616 617define <8 x i16> @zext_fcmp_v8f16(<8 x half> %a, <8 x half> %b)618; CHECK-LABEL: zext_fcmp_v8f16:619; CHECK:       ## %bb.0: ## %entry620; CHECK-NEXT:    vcmpeqph %xmm1, %xmm0, %k0621; CHECK-NEXT:    vpmovm2w %k0, %xmm0622; CHECK-NEXT:    vpsrlw $15, %xmm0, %xmm0623; CHECK-NEXT:    retq624{625entry:626  %0 = fcmp oeq <8 x half> %a, %b627  %1 = zext <8 x i1> %0 to <8 x i16>628  ret <8 x i16> %1629}630 631define <16 x i16> @zext_fcmp_v16f16(<16 x half> %a, <16 x half> %b)632; CHECK-LABEL: zext_fcmp_v16f16:633; CHECK:       ## %bb.0: ## %entry634; CHECK-NEXT:    vcmpeqph %ymm1, %ymm0, %k0635; CHECK-NEXT:    vpmovm2w %k0, %ymm0636; CHECK-NEXT:    vpsrlw $15, %ymm0, %ymm0637; CHECK-NEXT:    retq638{639entry:640  %0 = fcmp oeq <16 x half> %a, %b641  %1 = zext <16 x i1> %0 to <16 x i16>642  ret <16 x i16> %1643}644 645define <32 x i16> @zext_fcmp_v32f16(<32 x half> %a, <32 x half> %b)646; CHECK-LABEL: zext_fcmp_v32f16:647; CHECK:       ## %bb.0: ## %entry648; CHECK-NEXT:    vcmpeqph %zmm1, %zmm0, %k0649; CHECK-NEXT:    vpmovm2w %k0, %zmm0650; CHECK-NEXT:    vpsrlw $15, %zmm0, %zmm0651; CHECK-NEXT:    retq652{653entry:654  %0 = fcmp oeq <32 x half> %a, %b655  %1 = zext <32 x i1> %0 to <32 x i16>656  ret <32 x i16> %1657}658 659