brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.1 KiB · d17cacc Raw
225 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=x86_64 -mattr=+avx512fp16 | FileCheck %s3 4define <2 x half> @vector_sint64ToHalf(<2 x i64> %int64) {5; CHECK-LABEL: vector_sint64ToHalf:6; CHECK:       # %bb.0:7; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm08; CHECK-NEXT:    vcvtqq2ph %zmm0, %xmm09; CHECK-NEXT:    vzeroupper10; CHECK-NEXT:    retq11  %fp16 = sitofp <2 x i64> %int64 to <2 x half>12  ret <2 x half> %fp1613}14 15define <4 x half> @vector_sint32ToHalf(<4 x i32> %int32) {16; CHECK-LABEL: vector_sint32ToHalf:17; CHECK:       # %bb.0:18; CHECK-NEXT:    vextractps $3, %xmm0, %eax19; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm120; CHECK-NEXT:    vextractps $2, %xmm0, %eax21; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm222; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]23; CHECK-NEXT:    vextractps $1, %xmm0, %eax24; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm225; CHECK-NEXT:    vmovd %xmm0, %eax26; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm027; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]28; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero29; CHECK-NEXT:    retq30  %fp16 = sitofp <4 x i32> %int32 to <4 x half>31  ret <4 x half> %fp1632}33 34define <8 x half> @vector_sint16ToHalf(<8 x i16> %int16) {35; CHECK-LABEL: vector_sint16ToHalf:36; CHECK:       # %bb.0:37; CHECK-NEXT:    vpextrw $7, %xmm0, %eax38; CHECK-NEXT:    cwtl39; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm140; CHECK-NEXT:    vpextrw $6, %xmm0, %eax41; CHECK-NEXT:    cwtl42; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm243; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]44; CHECK-NEXT:    vpextrw $5, %xmm0, %eax45; CHECK-NEXT:    cwtl46; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm247; CHECK-NEXT:    vpextrw $4, %xmm0, %eax48; CHECK-NEXT:    cwtl49; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm350; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]51; CHECK-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]52; CHECK-NEXT:    vpextrw $3, %xmm0, %eax53; CHECK-NEXT:    cwtl54; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm255; CHECK-NEXT:    vpextrw $2, %xmm0, %eax56; CHECK-NEXT:    cwtl57; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm358; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]59; CHECK-NEXT:    vpextrw $1, %xmm0, %eax60; CHECK-NEXT:    cwtl61; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm362; CHECK-NEXT:    vmovw %xmm0, %eax63; CHECK-NEXT:    cwtl64; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm065; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]66; CHECK-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]67; CHECK-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]68; CHECK-NEXT:    retq69  %fp16 = sitofp <8 x i16> %int16 to <8 x half>70  ret <8 x half> %fp1671}72 73define <2 x half> @vector_uint64ToHalf(<2 x i64> %int64) {74; CHECK-LABEL: vector_uint64ToHalf:75; CHECK:       # %bb.0:76; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm077; CHECK-NEXT:    vcvtuqq2ph %zmm0, %xmm078; CHECK-NEXT:    vzeroupper79; CHECK-NEXT:    retq80  %fp16 = uitofp <2 x i64> %int64 to <2 x half>81  ret <2 x half> %fp1682}83 84define <4 x half> @vector_uint32ToHalf(<4 x i32> %int32) {85; CHECK-LABEL: vector_uint32ToHalf:86; CHECK:       # %bb.0:87; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm088; CHECK-NEXT:    vcvtudq2ph %zmm0, %ymm089; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm090; CHECK-NEXT:    vzeroupper91; CHECK-NEXT:    retq92  %fp16 = uitofp <4 x i32> %int32 to <4 x half>93  ret <4 x half> %fp1694}95 96define <8 x half> @vector_uint16ToHalf(<8 x i16> %int16) {97; CHECK-LABEL: vector_uint16ToHalf:98; CHECK:       # %bb.0:99; CHECK-NEXT:    vpextrw $7, %xmm0, %eax100; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm1101; CHECK-NEXT:    vpextrw $6, %xmm0, %eax102; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm2103; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]104; CHECK-NEXT:    vpextrw $5, %xmm0, %eax105; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm2106; CHECK-NEXT:    vpextrw $4, %xmm0, %eax107; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm3108; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]109; CHECK-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]110; CHECK-NEXT:    vpextrw $3, %xmm0, %eax111; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm2112; CHECK-NEXT:    vpextrw $2, %xmm0, %eax113; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm3114; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]115; CHECK-NEXT:    vpextrw $1, %xmm0, %eax116; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm3117; CHECK-NEXT:    vpextrw $0, %xmm0, %eax118; CHECK-NEXT:    vcvtsi2sh %eax, %xmm31, %xmm0119; CHECK-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]120; CHECK-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]121; CHECK-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]122; CHECK-NEXT:    retq123  %fp16 = uitofp <8 x i16> %int16 to <8 x half>124  ret <8 x half> %fp16125}126 127define <8 x half> @select(<8 x half> %x) {128; CHECK-LABEL: select:129; CHECK:       # %bb.0: # %entry130; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0131; CHECK-NEXT:    vmovsh {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0,0.0E+0]132; CHECK-NEXT:    vucomish %xmm1, %xmm0133; CHECK-NEXT:    seta %al134; CHECK-NEXT:    andl $1, %eax135; CHECK-NEXT:    kmovw %eax, %k0136; CHECK-NEXT:    vpsrld $16, %xmm0, %xmm2137; CHECK-NEXT:    vucomish %xmm1, %xmm2138; CHECK-NEXT:    seta %al139; CHECK-NEXT:    kmovd %eax, %k1140; CHECK-NEXT:    kshiftlw $15, %k1, %k1141; CHECK-NEXT:    kshiftrw $14, %k1, %k1142; CHECK-NEXT:    korw %k1, %k0, %k0143; CHECK-NEXT:    movw $-5, %ax144; CHECK-NEXT:    kmovd %eax, %k1145; CHECK-NEXT:    kandw %k1, %k0, %k0146; CHECK-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]147; CHECK-NEXT:    vucomish %xmm1, %xmm2148; CHECK-NEXT:    seta %al149; CHECK-NEXT:    kmovd %eax, %k1150; CHECK-NEXT:    kshiftlw $15, %k1, %k1151; CHECK-NEXT:    kshiftrw $13, %k1, %k1152; CHECK-NEXT:    korw %k1, %k0, %k0153; CHECK-NEXT:    movw $-9, %ax154; CHECK-NEXT:    kmovd %eax, %k1155; CHECK-NEXT:    kandw %k1, %k0, %k0156; CHECK-NEXT:    vpsrlq $48, %xmm0, %xmm2157; CHECK-NEXT:    vucomish %xmm1, %xmm2158; CHECK-NEXT:    seta %al159; CHECK-NEXT:    kmovd %eax, %k1160; CHECK-NEXT:    kshiftlw $15, %k1, %k1161; CHECK-NEXT:    kshiftrw $12, %k1, %k1162; CHECK-NEXT:    korw %k1, %k0, %k0163; CHECK-NEXT:    movw $-17, %ax164; CHECK-NEXT:    kmovd %eax, %k1165; CHECK-NEXT:    kandw %k1, %k0, %k0166; CHECK-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]167; CHECK-NEXT:    vucomish %xmm1, %xmm2168; CHECK-NEXT:    seta %al169; CHECK-NEXT:    kmovd %eax, %k1170; CHECK-NEXT:    kshiftlw $15, %k1, %k1171; CHECK-NEXT:    kshiftrw $11, %k1, %k1172; CHECK-NEXT:    korw %k1, %k0, %k0173; CHECK-NEXT:    movw $-33, %ax174; CHECK-NEXT:    kmovd %eax, %k1175; CHECK-NEXT:    kandw %k1, %k0, %k0176; CHECK-NEXT:    vpsrldq {{.*#+}} xmm2 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero177; CHECK-NEXT:    vucomish %xmm1, %xmm2178; CHECK-NEXT:    seta %al179; CHECK-NEXT:    kmovd %eax, %k1180; CHECK-NEXT:    kshiftlw $15, %k1, %k1181; CHECK-NEXT:    kshiftrw $10, %k1, %k1182; CHECK-NEXT:    korw %k1, %k0, %k0183; CHECK-NEXT:    movw $-65, %ax184; CHECK-NEXT:    kmovd %eax, %k1185; CHECK-NEXT:    kandw %k1, %k0, %k0186; CHECK-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]187; CHECK-NEXT:    vucomish %xmm1, %xmm2188; CHECK-NEXT:    seta %al189; CHECK-NEXT:    kmovd %eax, %k1190; CHECK-NEXT:    kshiftlw $6, %k1, %k1191; CHECK-NEXT:    korw %k1, %k0, %k0192; CHECK-NEXT:    kshiftlw $9, %k0, %k0193; CHECK-NEXT:    kshiftrw $9, %k0, %k0194; CHECK-NEXT:    vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero195; CHECK-NEXT:    vucomish %xmm1, %xmm2196; CHECK-NEXT:    seta %al197; CHECK-NEXT:    kmovd %eax, %k1198; CHECK-NEXT:    kshiftlw $7, %k1, %k1199; CHECK-NEXT:    korw %k1, %k0, %k1200; CHECK-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]201; CHECK-NEXT:    vmovdqu16 %zmm1, %zmm0 {%k1}202; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0203; CHECK-NEXT:    vzeroupper204; CHECK-NEXT:    retq205entry:206  %c = fcmp ogt <8 x half> %x, splat (half 0xH3C00)207  %s = select <8 x i1> %c, <8 x half> splat (half 0xH3C00), <8 x half> %x208  ret <8 x half> %s209}210 211define <4 x half> @select2(<4 x i32> %0, <4 x half> %1) {212; CHECK-LABEL: select2:213; CHECK:       # %bb.0: # %entry214; CHECK-NEXT:    vpxor %xmm2, %xmm2, %xmm2215; CHECK-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0216; CHECK-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0217; CHECK-NEXT:    vmovq {{.*#+}} xmm2 = [9.6E+1,9.7E+1,9.8E+1,9.9E+1,0.0E+0,0.0E+0,0.0E+0,0.0E+0]218; CHECK-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm0219; CHECK-NEXT:    retq220entry:221  %2 = icmp eq <4 x i32> %0, zeroinitializer222  %3 = select <4 x i1> %2, <4 x half> %1, <4 x half> <half 0xH5600, half 0xH5610, half 0xH5620, half 0xH5630>223  ret <4 x half> %3224}225