brintos

brintos / llvm-project-archived public Read only

0
0
Text · 54.2 KiB · d087491 Raw
1161 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -fast-isel=false -mtriple=x86_64-linux-unknown -mattr=+sse2 < %s | FileCheck -check-prefixes=SSE2 %s3; RUN: llc -fast-isel -mtriple=x86_64-linux-unknown -mattr=+sse2 < %s | FileCheck -check-prefixes=FAST_ISEL_SSE2 %s4; RUN: llc -fast-isel=false -mtriple=x86_64-linux-unknown -mattr=+avx512bf16,avx512vl < %s | FileCheck -check-prefixes=AVX512BF16 %s5; RUN: llc -fast-isel -mtriple=x86_64-linux-unknown -mattr=+avx512bf16,avx512vl < %s | FileCheck -check-prefixes=FAST_ISEL_AVX512BF16 %s6; RUN: llc -fast-isel=false -mtriple=x86_64-linux-unknown -mattr=+avxneconvert < %s | FileCheck -check-prefixes=AVXNECONVERT %s7; RUN: llc -fast-isel -mtriple=x86_64-linux-unknown -mattr=+avxneconvert < %s | FileCheck -check-prefixes=FAST_ISEL_AVXNECONVERT %s8 9define bfloat @return_arg_bf16(bfloat %x) #0 {10; SSE2-LABEL: return_arg_bf16:11; SSE2:       # %bb.0:12; SSE2-NEXT:    retq13;14; FAST_ISEL_SSE2-LABEL: return_arg_bf16:15; FAST_ISEL_SSE2:       # %bb.0:16; FAST_ISEL_SSE2-NEXT:    pushq %rax17; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax18; FAST_ISEL_SSE2-NEXT:    shll $16, %eax19; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm020; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT21; FAST_ISEL_SSE2-NEXT:    popq %rax22; FAST_ISEL_SSE2-NEXT:    retq23;24; AVX512BF16-LABEL: return_arg_bf16:25; AVX512BF16:       # %bb.0:26; AVX512BF16-NEXT:    retq27;28; FAST_ISEL_AVX512BF16-LABEL: return_arg_bf16:29; FAST_ISEL_AVX512BF16:       # %bb.0:30; FAST_ISEL_AVX512BF16-NEXT:    vpextrw $0, %xmm0, %eax31; FAST_ISEL_AVX512BF16-NEXT:    shll $16, %eax32; FAST_ISEL_AVX512BF16-NEXT:    vmovd %eax, %xmm033; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm0, %xmm034; FAST_ISEL_AVX512BF16-NEXT:    retq35;36; AVXNECONVERT-LABEL: return_arg_bf16:37; AVXNECONVERT:       # %bb.0:38; AVXNECONVERT-NEXT:    retq39;40; FAST_ISEL_AVXNECONVERT-LABEL: return_arg_bf16:41; FAST_ISEL_AVXNECONVERT:       # %bb.0:42; FAST_ISEL_AVXNECONVERT-NEXT:    vpextrw $0, %xmm0, %eax43; FAST_ISEL_AVXNECONVERT-NEXT:    shll $16, %eax44; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm045; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm0, %xmm046; FAST_ISEL_AVXNECONVERT-NEXT:    retq47  ret bfloat %x48}49 50define <2 x bfloat> @return_arg_v2bf16(<2 x bfloat> %x) #0 {51; SSE2-LABEL: return_arg_v2bf16:52; SSE2:       # %bb.0:53; SSE2-NEXT:    retq54;55; FAST_ISEL_SSE2-LABEL: return_arg_v2bf16:56; FAST_ISEL_SSE2:       # %bb.0:57; FAST_ISEL_SSE2-NEXT:    subq $40, %rsp58; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax59; FAST_ISEL_SSE2-NEXT:    shll $16, %eax60; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill61; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax62; FAST_ISEL_SSE2-NEXT:    shll $16, %eax63; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm064; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT65; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill66; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload67; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero68; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT69; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload70; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]71; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, %xmm072; FAST_ISEL_SSE2-NEXT:    addq $40, %rsp73; FAST_ISEL_SSE2-NEXT:    retq74;75; AVX512BF16-LABEL: return_arg_v2bf16:76; AVX512BF16:       # %bb.0:77; AVX512BF16-NEXT:    retq78;79; FAST_ISEL_AVX512BF16-LABEL: return_arg_v2bf16:80; FAST_ISEL_AVX512BF16:       # %bb.0:81; FAST_ISEL_AVX512BF16-NEXT:    retq82;83; AVXNECONVERT-LABEL: return_arg_v2bf16:84; AVXNECONVERT:       # %bb.0:85; AVXNECONVERT-NEXT:    retq86;87; FAST_ISEL_AVXNECONVERT-LABEL: return_arg_v2bf16:88; FAST_ISEL_AVXNECONVERT:       # %bb.0:89; FAST_ISEL_AVXNECONVERT-NEXT:    retq90  ret <2 x bfloat> %x91}92 93define <3 x bfloat> @return_arg_v3bf16(<3 x bfloat> %x) #0 {94; SSE2-LABEL: return_arg_v3bf16:95; SSE2:       # %bb.0:96; SSE2-NEXT:    retq97;98; FAST_ISEL_SSE2-LABEL: return_arg_v3bf16:99; FAST_ISEL_SSE2:       # %bb.0:100; FAST_ISEL_SSE2-NEXT:    subq $40, %rsp101; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm0, %eax102; FAST_ISEL_SSE2-NEXT:    shll $16, %eax103; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill104; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax105; FAST_ISEL_SSE2-NEXT:    shll $16, %eax106; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill107; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax108; FAST_ISEL_SSE2-NEXT:    shll $16, %eax109; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm0110; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT111; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill112; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload113; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero114; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT115; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload116; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]117; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill118; FAST_ISEL_SSE2-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload119; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero120; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT121; FAST_ISEL_SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload122; FAST_ISEL_SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]123; FAST_ISEL_SSE2-NEXT:    movaps %xmm1, %xmm0124; FAST_ISEL_SSE2-NEXT:    addq $40, %rsp125; FAST_ISEL_SSE2-NEXT:    retq126;127; AVX512BF16-LABEL: return_arg_v3bf16:128; AVX512BF16:       # %bb.0:129; AVX512BF16-NEXT:    retq130;131; FAST_ISEL_AVX512BF16-LABEL: return_arg_v3bf16:132; FAST_ISEL_AVX512BF16:       # %bb.0:133; FAST_ISEL_AVX512BF16-NEXT:    vpextrw $2, %xmm0, %eax134; FAST_ISEL_AVX512BF16-NEXT:    shll $16, %eax135; FAST_ISEL_AVX512BF16-NEXT:    vmovd %eax, %xmm1136; FAST_ISEL_AVX512BF16-NEXT:    vpextrw $1, %xmm0, %eax137; FAST_ISEL_AVX512BF16-NEXT:    shll $16, %eax138; FAST_ISEL_AVX512BF16-NEXT:    vmovd %eax, %xmm2139; FAST_ISEL_AVX512BF16-NEXT:    vmovd %xmm0, %eax140; FAST_ISEL_AVX512BF16-NEXT:    shll $16, %eax141; FAST_ISEL_AVX512BF16-NEXT:    vmovd %eax, %xmm0142; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm1, %xmm1143; FAST_ISEL_AVX512BF16-NEXT:    vmovd %xmm1, %eax144; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm0, %xmm0145; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm2, %xmm1146; FAST_ISEL_AVX512BF16-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]147; FAST_ISEL_AVX512BF16-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0148; FAST_ISEL_AVX512BF16-NEXT:    retq149;150; AVXNECONVERT-LABEL: return_arg_v3bf16:151; AVXNECONVERT:       # %bb.0:152; AVXNECONVERT-NEXT:    retq153;154; FAST_ISEL_AVXNECONVERT-LABEL: return_arg_v3bf16:155; FAST_ISEL_AVXNECONVERT:       # %bb.0:156; FAST_ISEL_AVXNECONVERT-NEXT:    vpextrw $2, %xmm0, %eax157; FAST_ISEL_AVXNECONVERT-NEXT:    shll $16, %eax158; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm1159; FAST_ISEL_AVXNECONVERT-NEXT:    vpextrw $1, %xmm0, %eax160; FAST_ISEL_AVXNECONVERT-NEXT:    shll $16, %eax161; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm2162; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %xmm0, %eax163; FAST_ISEL_AVXNECONVERT-NEXT:    shll $16, %eax164; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm0165; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm1, %xmm1166; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %xmm1, %eax167; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm0, %xmm0168; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm2, %xmm1169; FAST_ISEL_AVXNECONVERT-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]170; FAST_ISEL_AVXNECONVERT-NEXT:    vpinsrw $2, %eax, %xmm1, %xmm1171; FAST_ISEL_AVXNECONVERT-NEXT:    vmovq %xmm1, %rax172; FAST_ISEL_AVXNECONVERT-NEXT:    movl %eax, %ecx173; FAST_ISEL_AVXNECONVERT-NEXT:    shrl $16, %ecx174; FAST_ISEL_AVXNECONVERT-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm1175; FAST_ISEL_AVXNECONVERT-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]176; FAST_ISEL_AVXNECONVERT-NEXT:    shrq $32, %rax177; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm1178; FAST_ISEL_AVXNECONVERT-NEXT:    vpbroadcastw %xmm1, %xmm1179; FAST_ISEL_AVXNECONVERT-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]180; FAST_ISEL_AVXNECONVERT-NEXT:    retq181  ret <3 x bfloat> %x182}183 184define <4 x bfloat> @return_arg_v4bf16(<4 x bfloat> %x) #0 {185; SSE2-LABEL: return_arg_v4bf16:186; SSE2:       # %bb.0:187; SSE2-NEXT:    retq188;189; FAST_ISEL_SSE2-LABEL: return_arg_v4bf16:190; FAST_ISEL_SSE2:       # %bb.0:191; FAST_ISEL_SSE2-NEXT:    subq $56, %rsp192; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm0, %eax193; FAST_ISEL_SSE2-NEXT:    shll $16, %eax194; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill195; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm0, %eax196; FAST_ISEL_SSE2-NEXT:    shll $16, %eax197; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill198; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax199; FAST_ISEL_SSE2-NEXT:    shll $16, %eax200; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill201; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax202; FAST_ISEL_SSE2-NEXT:    shll $16, %eax203; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm0204; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT205; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill206; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload207; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero208; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT209; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload210; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]211; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill212; FAST_ISEL_SSE2-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload213; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero214; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT215; FAST_ISEL_SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill216; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload217; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero218; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT219; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload220; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]221; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload222; FAST_ISEL_SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]223; FAST_ISEL_SSE2-NEXT:    addq $56, %rsp224; FAST_ISEL_SSE2-NEXT:    retq225;226; AVX512BF16-LABEL: return_arg_v4bf16:227; AVX512BF16:       # %bb.0:228; AVX512BF16-NEXT:    retq229;230; FAST_ISEL_AVX512BF16-LABEL: return_arg_v4bf16:231; FAST_ISEL_AVX512BF16:       # %bb.0:232; FAST_ISEL_AVX512BF16-NEXT:    retq233;234; AVXNECONVERT-LABEL: return_arg_v4bf16:235; AVXNECONVERT:       # %bb.0:236; AVXNECONVERT-NEXT:    retq237;238; FAST_ISEL_AVXNECONVERT-LABEL: return_arg_v4bf16:239; FAST_ISEL_AVXNECONVERT:       # %bb.0:240; FAST_ISEL_AVXNECONVERT-NEXT:    retq241  ret <4 x bfloat> %x242}243 244define <8 x bfloat> @return_arg_v8bf16(<8 x bfloat> %x) #0 {245; SSE2-LABEL: return_arg_v8bf16:246; SSE2:       # %bb.0:247; SSE2-NEXT:    retq248;249; FAST_ISEL_SSE2-LABEL: return_arg_v8bf16:250; FAST_ISEL_SSE2:       # %bb.0:251; FAST_ISEL_SSE2-NEXT:    pushq %r14252; FAST_ISEL_SSE2-NEXT:    pushq %rbx253; FAST_ISEL_SSE2-NEXT:    subq $56, %rsp254; FAST_ISEL_SSE2-NEXT:    pextrw $7, %xmm0, %eax255; FAST_ISEL_SSE2-NEXT:    shll $16, %eax256; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill257; FAST_ISEL_SSE2-NEXT:    pextrw $6, %xmm0, %eax258; FAST_ISEL_SSE2-NEXT:    shll $16, %eax259; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill260; FAST_ISEL_SSE2-NEXT:    pextrw $5, %xmm0, %eax261; FAST_ISEL_SSE2-NEXT:    shll $16, %eax262; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill263; FAST_ISEL_SSE2-NEXT:    pextrw $4, %xmm0, %eax264; FAST_ISEL_SSE2-NEXT:    shll $16, %eax265; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill266; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm0, %eax267; FAST_ISEL_SSE2-NEXT:    shll $16, %eax268; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill269; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm0, %eax270; FAST_ISEL_SSE2-NEXT:    shll $16, %eax271; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill272; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax273; FAST_ISEL_SSE2-NEXT:    shll $16, %eax274; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm1275; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax276; FAST_ISEL_SSE2-NEXT:    shll $16, %eax277; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill278; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, %xmm0279; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT280; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx281; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx282; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload283; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero284; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT285; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax286; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d287; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d288; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload289; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero290; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT291; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx292; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx293; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload294; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero295; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT296; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax297; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax298; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax299; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax300; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax301; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm0302; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill303; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload304; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero305; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT306; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx307; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx308; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload309; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero310; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT311; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax312; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d313; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d314; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload315; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero316; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT317; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx318; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx319; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload320; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero321; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT322; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax323; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax324; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax325; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax326; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax327; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm1328; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload329; FAST_ISEL_SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]330; FAST_ISEL_SSE2-NEXT:    addq $56, %rsp331; FAST_ISEL_SSE2-NEXT:    popq %rbx332; FAST_ISEL_SSE2-NEXT:    popq %r14333; FAST_ISEL_SSE2-NEXT:    retq334;335; AVX512BF16-LABEL: return_arg_v8bf16:336; AVX512BF16:       # %bb.0:337; AVX512BF16-NEXT:    retq338;339; FAST_ISEL_AVX512BF16-LABEL: return_arg_v8bf16:340; FAST_ISEL_AVX512BF16:       # %bb.0:341; FAST_ISEL_AVX512BF16-NEXT:    retq342;343; AVXNECONVERT-LABEL: return_arg_v8bf16:344; AVXNECONVERT:       # %bb.0:345; AVXNECONVERT-NEXT:    retq346;347; FAST_ISEL_AVXNECONVERT-LABEL: return_arg_v8bf16:348; FAST_ISEL_AVXNECONVERT:       # %bb.0:349; FAST_ISEL_AVXNECONVERT-NEXT:    retq350  ret <8 x bfloat> %x351}352 353define <16 x bfloat> @return_arg_v16bf16(<16 x bfloat> %x) #0 {354;355; SSE2-LABEL: return_arg_v16bf16:356; SSE2:       # %bb.0:357; SSE2-NEXT:    retq358;359; FAST_ISEL_SSE2-LABEL: return_arg_v16bf16:360; FAST_ISEL_SSE2:       # %bb.0:361; FAST_ISEL_SSE2-NEXT:    pushq %r14362; FAST_ISEL_SSE2-NEXT:    pushq %rbx363; FAST_ISEL_SSE2-NEXT:    subq $104, %rsp364; FAST_ISEL_SSE2-NEXT:    pextrw $7, %xmm1, %eax365; FAST_ISEL_SSE2-NEXT:    shll $16, %eax366; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill367; FAST_ISEL_SSE2-NEXT:    pextrw $6, %xmm1, %eax368; FAST_ISEL_SSE2-NEXT:    shll $16, %eax369; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill370; FAST_ISEL_SSE2-NEXT:    pextrw $5, %xmm1, %eax371; FAST_ISEL_SSE2-NEXT:    shll $16, %eax372; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill373; FAST_ISEL_SSE2-NEXT:    pextrw $4, %xmm1, %eax374; FAST_ISEL_SSE2-NEXT:    shll $16, %eax375; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill376; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm1, %eax377; FAST_ISEL_SSE2-NEXT:    shll $16, %eax378; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill379; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm1, %eax380; FAST_ISEL_SSE2-NEXT:    shll $16, %eax381; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill382; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm1, %eax383; FAST_ISEL_SSE2-NEXT:    shll $16, %eax384; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill385; FAST_ISEL_SSE2-NEXT:    movd %xmm1, %eax386; FAST_ISEL_SSE2-NEXT:    shll $16, %eax387; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill388; FAST_ISEL_SSE2-NEXT:    pextrw $7, %xmm0, %eax389; FAST_ISEL_SSE2-NEXT:    shll $16, %eax390; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill391; FAST_ISEL_SSE2-NEXT:    pextrw $6, %xmm0, %eax392; FAST_ISEL_SSE2-NEXT:    shll $16, %eax393; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill394; FAST_ISEL_SSE2-NEXT:    pextrw $5, %xmm0, %eax395; FAST_ISEL_SSE2-NEXT:    shll $16, %eax396; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill397; FAST_ISEL_SSE2-NEXT:    pextrw $4, %xmm0, %eax398; FAST_ISEL_SSE2-NEXT:    shll $16, %eax399; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill400; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm0, %eax401; FAST_ISEL_SSE2-NEXT:    shll $16, %eax402; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill403; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm0, %eax404; FAST_ISEL_SSE2-NEXT:    shll $16, %eax405; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill406; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax407; FAST_ISEL_SSE2-NEXT:    shll $16, %eax408; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm1409; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax410; FAST_ISEL_SSE2-NEXT:    shll $16, %eax411; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill412; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, %xmm0413; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT414; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx415; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx416; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload417; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero418; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT419; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax420; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d421; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d422; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload423; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero424; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT425; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx426; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx427; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload428; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero429; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT430; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax431; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax432; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax433; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax434; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax435; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm0436; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill437; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload438; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero439; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT440; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx441; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx442; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload443; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero444; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT445; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax446; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d447; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d448; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload449; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero450; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT451; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx452; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx453; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload454; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero455; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT456; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax457; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax458; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax459; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax460; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax461; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm0462; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload463; FAST_ISEL_SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]464; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill465; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload466; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero467; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT468; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx469; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx470; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload471; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero472; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT473; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax474; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d475; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d476; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload477; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero478; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT479; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx480; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx481; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload482; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero483; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT484; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax485; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax486; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax487; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax488; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax489; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm0490; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill491; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload492; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero493; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT494; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx495; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx496; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload497; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero498; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT499; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax500; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d501; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d502; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload503; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero504; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT505; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx506; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx507; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload508; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero509; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT510; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax511; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax512; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax513; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax514; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax515; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm0516; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload517; FAST_ISEL_SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]518; FAST_ISEL_SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload519; FAST_ISEL_SSE2-NEXT:    addq $104, %rsp520; FAST_ISEL_SSE2-NEXT:    popq %rbx521; FAST_ISEL_SSE2-NEXT:    popq %r14522; FAST_ISEL_SSE2-NEXT:    retq523;524; AVX512BF16-LABEL: return_arg_v16bf16:525; AVX512BF16:       # %bb.0:526; AVX512BF16-NEXT:    retq527;528; FAST_ISEL_AVX512BF16-LABEL: return_arg_v16bf16:529; FAST_ISEL_AVX512BF16:       # %bb.0:530; FAST_ISEL_AVX512BF16-NEXT:    retq531;532; AVXNECONVERT-LABEL: return_arg_v16bf16:533; AVXNECONVERT:       # %bb.0:534; AVXNECONVERT-NEXT:    retq535;536; FAST_ISEL_AVXNECONVERT-LABEL: return_arg_v16bf16:537; FAST_ISEL_AVXNECONVERT:       # %bb.0:538; FAST_ISEL_AVXNECONVERT-NEXT:    retq539  ret <16 x bfloat> %x540}541 542declare bfloat @returns_bf16(bfloat)543declare <2 x bfloat> @returns_v2bf16(<2 x bfloat>)544declare <3 x bfloat> @returns_v3bf16(<3 x bfloat>)545declare <4 x bfloat> @returns_v4bf16(<4 x bfloat>)546declare <8 x bfloat> @returns_v8bf16(<8 x bfloat>)547declare <16 x bfloat> @returns_v16bf16(<16 x bfloat>)548 549define bfloat @call_ret_bf16(ptr %ptr) #0 {550;551; SSE2-LABEL: call_ret_bf16:552; SSE2:       # %bb.0:553; SSE2-NEXT:    pushq %rax554; SSE2-NEXT:    pinsrw $0, (%rdi), %xmm0555; SSE2-NEXT:    callq returns_bf16@PLT556;557; FAST_ISEL_SSE2-LABEL: call_ret_bf16:558; FAST_ISEL_SSE2:       # %bb.0:559; FAST_ISEL_SSE2-NEXT:    pushq %rax560; FAST_ISEL_SSE2-NEXT:    movzwl (%rdi), %eax561; FAST_ISEL_SSE2-NEXT:    shll $16, %eax562; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm0563; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT564; FAST_ISEL_SSE2-NEXT:    callq returns_bf16@PLT565;566; AVX512BF16-LABEL: call_ret_bf16:567; AVX512BF16:       # %bb.0:568; AVX512BF16-NEXT:    pushq %rax569; AVX512BF16-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0570; AVX512BF16-NEXT:    callq returns_bf16@PLT571;572; FAST_ISEL_AVX512BF16-LABEL: call_ret_bf16:573; FAST_ISEL_AVX512BF16:       # %bb.0:574; FAST_ISEL_AVX512BF16-NEXT:    pushq %rax575; FAST_ISEL_AVX512BF16-NEXT:    movzwl (%rdi), %eax576; FAST_ISEL_AVX512BF16-NEXT:    shll $16, %eax577; FAST_ISEL_AVX512BF16-NEXT:    vmovd %eax, %xmm0578; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm0, %xmm0579; FAST_ISEL_AVX512BF16-NEXT:    callq returns_bf16@PLT580;581; AVXNECONVERT-LABEL: call_ret_bf16:582; AVXNECONVERT:       # %bb.0:583; AVXNECONVERT-NEXT:    pushq %rax584; AVXNECONVERT-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0585; AVXNECONVERT-NEXT:    callq returns_bf16@PLT586;587; FAST_ISEL_AVXNECONVERT-LABEL: call_ret_bf16:588; FAST_ISEL_AVXNECONVERT:       # %bb.0:589; FAST_ISEL_AVXNECONVERT-NEXT:    pushq %rax590; FAST_ISEL_AVXNECONVERT-NEXT:    movzwl (%rdi), %eax591; FAST_ISEL_AVXNECONVERT-NEXT:    shll $16, %eax592; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm0593; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm0, %xmm0594; FAST_ISEL_AVXNECONVERT-NEXT:    callq returns_bf16@PLT595  %val = load bfloat, ptr %ptr596  call bfloat @returns_bf16(bfloat %val)597  unreachable598}599 600define <2 x bfloat> @call_ret_v2bf16(ptr %ptr) #0 {601;602; SSE2-LABEL: call_ret_v2bf16:603; SSE2:       # %bb.0:604; SSE2-NEXT:    pushq %rax605; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero606; SSE2-NEXT:    callq returns_v2bf16@PLT607;608; FAST_ISEL_SSE2-LABEL: call_ret_v2bf16:609; FAST_ISEL_SSE2:       # %bb.0:610; FAST_ISEL_SSE2-NEXT:    subq $40, %rsp611; FAST_ISEL_SSE2-NEXT:    movl (%rdi), %eax612; FAST_ISEL_SSE2-NEXT:    movl %eax, (%rsp)613; FAST_ISEL_SSE2-NEXT:    movdqa (%rsp), %xmm0614; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax615; FAST_ISEL_SSE2-NEXT:    shll $16, %eax616; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill617; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax618; FAST_ISEL_SSE2-NEXT:    shll $16, %eax619; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm0620; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT621; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill622; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload623; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero624; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT625; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload626; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]627; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, %xmm0628; FAST_ISEL_SSE2-NEXT:    callq returns_v2bf16@PLT629;630; AVX512BF16-LABEL: call_ret_v2bf16:631; AVX512BF16:       # %bb.0:632; AVX512BF16-NEXT:    pushq %rax633; AVX512BF16-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero634; AVX512BF16-NEXT:    callq returns_v2bf16@PLT635;636; FAST_ISEL_AVX512BF16-LABEL: call_ret_v2bf16:637; FAST_ISEL_AVX512BF16:       # %bb.0:638; FAST_ISEL_AVX512BF16-NEXT:    pushq %rax639; FAST_ISEL_AVX512BF16-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero640; FAST_ISEL_AVX512BF16-NEXT:    callq returns_v2bf16@PLT641;642; AVXNECONVERT-LABEL: call_ret_v2bf16:643; AVXNECONVERT:       # %bb.0:644; AVXNECONVERT-NEXT:    pushq %rax645; AVXNECONVERT-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero646; AVXNECONVERT-NEXT:    callq returns_v2bf16@PLT647;648; FAST_ISEL_AVXNECONVERT-LABEL: call_ret_v2bf16:649; FAST_ISEL_AVXNECONVERT:       # %bb.0:650; FAST_ISEL_AVXNECONVERT-NEXT:    pushq %rax651; FAST_ISEL_AVXNECONVERT-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero652; FAST_ISEL_AVXNECONVERT-NEXT:    callq returns_v2bf16@PLT653  %val = load <2 x bfloat>, ptr %ptr654  call <2 x bfloat> @returns_v2bf16(<2 x bfloat> %val)655  unreachable656}657 658define <3 x bfloat> @call_ret_v3bf16(ptr %ptr) #0 {659;660; SSE2-LABEL: call_ret_v3bf16:661; SSE2:       # %bb.0:662; SSE2-NEXT:    pushq %rax663; SSE2-NEXT:    pinsrw $0, 4(%rdi), %xmm1664; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero665; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]666; SSE2-NEXT:    callq returns_v3bf16@PLT667;668; FAST_ISEL_SSE2-LABEL: call_ret_v3bf16:669; FAST_ISEL_SSE2:       # %bb.0:670; FAST_ISEL_SSE2-NEXT:    subq $40, %rsp671; FAST_ISEL_SSE2-NEXT:    movq (%rdi), %rax672; FAST_ISEL_SSE2-NEXT:    movl %eax, %ecx673; FAST_ISEL_SSE2-NEXT:    andl $-65536, %ecx # imm = 0xFFFF0000674; FAST_ISEL_SSE2-NEXT:    movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill675; FAST_ISEL_SSE2-NEXT:    movl %eax, %ecx676; FAST_ISEL_SSE2-NEXT:    shll $16, %ecx677; FAST_ISEL_SSE2-NEXT:    movd %ecx, %xmm0678; FAST_ISEL_SSE2-NEXT:    shrq $32, %rax679; FAST_ISEL_SSE2-NEXT:    shll $16, %eax680; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill681; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT682; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill683; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload684; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero685; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT686; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload687; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]688; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill689; FAST_ISEL_SSE2-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload690; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero691; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT692; FAST_ISEL_SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload693; FAST_ISEL_SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]694; FAST_ISEL_SSE2-NEXT:    movaps %xmm1, %xmm0695; FAST_ISEL_SSE2-NEXT:    callq returns_v3bf16@PLT696;697; AVX512BF16-LABEL: call_ret_v3bf16:698; AVX512BF16:       # %bb.0:699; AVX512BF16-NEXT:    pushq %rax700; AVX512BF16-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero701; AVX512BF16-NEXT:    callq returns_v3bf16@PLT702;703; FAST_ISEL_AVX512BF16-LABEL: call_ret_v3bf16:704; FAST_ISEL_AVX512BF16:       # %bb.0:705; FAST_ISEL_AVX512BF16-NEXT:    pushq %rax706; FAST_ISEL_AVX512BF16-NEXT:    movq (%rdi), %rax707; FAST_ISEL_AVX512BF16-NEXT:    movl %eax, %ecx708; FAST_ISEL_AVX512BF16-NEXT:    andl $-65536, %ecx # imm = 0xFFFF0000709; FAST_ISEL_AVX512BF16-NEXT:    vmovd %ecx, %xmm0710; FAST_ISEL_AVX512BF16-NEXT:    movl %eax, %ecx711; FAST_ISEL_AVX512BF16-NEXT:    shll $16, %ecx712; FAST_ISEL_AVX512BF16-NEXT:    vmovd %ecx, %xmm1713; FAST_ISEL_AVX512BF16-NEXT:    shrq $32, %rax714; FAST_ISEL_AVX512BF16-NEXT:    shll $16, %eax715; FAST_ISEL_AVX512BF16-NEXT:    vmovd %eax, %xmm2716; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm2, %xmm2717; FAST_ISEL_AVX512BF16-NEXT:    vmovd %xmm2, %eax718; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm1, %xmm1719; FAST_ISEL_AVX512BF16-NEXT:    vcvtneps2bf16 %xmm0, %xmm0720; FAST_ISEL_AVX512BF16-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]721; FAST_ISEL_AVX512BF16-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0722; FAST_ISEL_AVX512BF16-NEXT:    callq returns_v3bf16@PLT723;724; AVXNECONVERT-LABEL: call_ret_v3bf16:725; AVXNECONVERT:       # %bb.0:726; AVXNECONVERT-NEXT:    pushq %rax727; AVXNECONVERT-NEXT:    vpinsrw $0, 4(%rdi), %xmm0, %xmm0728; AVXNECONVERT-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero729; AVXNECONVERT-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero730; AVXNECONVERT-NEXT:    callq returns_v3bf16@PLT731;732; FAST_ISEL_AVXNECONVERT-LABEL: call_ret_v3bf16:733; FAST_ISEL_AVXNECONVERT:       # %bb.0:734; FAST_ISEL_AVXNECONVERT-NEXT:    pushq %rax735; FAST_ISEL_AVXNECONVERT-NEXT:    movq (%rdi), %rax736; FAST_ISEL_AVXNECONVERT-NEXT:    movl %eax, %ecx737; FAST_ISEL_AVXNECONVERT-NEXT:    andl $-65536, %ecx # imm = 0xFFFF0000738; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %ecx, %xmm0739; FAST_ISEL_AVXNECONVERT-NEXT:    movl %eax, %ecx740; FAST_ISEL_AVXNECONVERT-NEXT:    shll $16, %ecx741; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %ecx, %xmm1742; FAST_ISEL_AVXNECONVERT-NEXT:    shrq $32, %rax743; FAST_ISEL_AVXNECONVERT-NEXT:    shll $16, %eax744; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm2745; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm2, %xmm2746; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %xmm2, %eax747; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm1, %xmm1748; FAST_ISEL_AVXNECONVERT-NEXT:    {vex} vcvtneps2bf16 %xmm0, %xmm0749; FAST_ISEL_AVXNECONVERT-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]750; FAST_ISEL_AVXNECONVERT-NEXT:    vpinsrw $2, %eax, %xmm0, %xmm0751; FAST_ISEL_AVXNECONVERT-NEXT:    vmovq %xmm0, %rax752; FAST_ISEL_AVXNECONVERT-NEXT:    movl %eax, %ecx753; FAST_ISEL_AVXNECONVERT-NEXT:    shrl $16, %ecx754; FAST_ISEL_AVXNECONVERT-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0755; FAST_ISEL_AVXNECONVERT-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]756; FAST_ISEL_AVXNECONVERT-NEXT:    shrq $32, %rax757; FAST_ISEL_AVXNECONVERT-NEXT:    vmovd %eax, %xmm1758; FAST_ISEL_AVXNECONVERT-NEXT:    vpbroadcastw %xmm1, %xmm1759; FAST_ISEL_AVXNECONVERT-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]760; FAST_ISEL_AVXNECONVERT-NEXT:    callq returns_v3bf16@PLT761  %val = load <3 x bfloat>, ptr %ptr762  call <3 x bfloat> @returns_v3bf16(<3 x bfloat> %val)763  unreachable764}765 766define <4 x bfloat> @call_ret_v4bf16(ptr %ptr) #0 {767;768; SSE2-LABEL: call_ret_v4bf16:769; SSE2:       # %bb.0:770; SSE2-NEXT:    pushq %rax771; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero772; SSE2-NEXT:    callq returns_v4bf16@PLT773;774; FAST_ISEL_SSE2-LABEL: call_ret_v4bf16:775; FAST_ISEL_SSE2:       # %bb.0:776; FAST_ISEL_SSE2-NEXT:    subq $56, %rsp777; FAST_ISEL_SSE2-NEXT:    movq (%rdi), %rax778; FAST_ISEL_SSE2-NEXT:    movq %rax, {{[0-9]+}}(%rsp)779; FAST_ISEL_SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm0780; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm0, %eax781; FAST_ISEL_SSE2-NEXT:    shll $16, %eax782; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill783; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm0, %eax784; FAST_ISEL_SSE2-NEXT:    shll $16, %eax785; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill786; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax787; FAST_ISEL_SSE2-NEXT:    shll $16, %eax788; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill789; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax790; FAST_ISEL_SSE2-NEXT:    shll $16, %eax791; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm0792; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT793; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill794; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload795; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero796; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT797; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload798; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]799; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill800; FAST_ISEL_SSE2-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload801; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero802; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT803; FAST_ISEL_SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill804; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload805; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero806; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT807; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload808; FAST_ISEL_SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]809; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload810; FAST_ISEL_SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]811; FAST_ISEL_SSE2-NEXT:    callq returns_v4bf16@PLT812;813; AVX512BF16-LABEL: call_ret_v4bf16:814; AVX512BF16:       # %bb.0:815; AVX512BF16-NEXT:    pushq %rax816; AVX512BF16-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero817; AVX512BF16-NEXT:    callq returns_v4bf16@PLT818;819; FAST_ISEL_AVX512BF16-LABEL: call_ret_v4bf16:820; FAST_ISEL_AVX512BF16:       # %bb.0:821; FAST_ISEL_AVX512BF16-NEXT:    pushq %rax822; FAST_ISEL_AVX512BF16-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero823; FAST_ISEL_AVX512BF16-NEXT:    callq returns_v4bf16@PLT824;825; AVXNECONVERT-LABEL: call_ret_v4bf16:826; AVXNECONVERT:       # %bb.0:827; AVXNECONVERT-NEXT:    pushq %rax828; AVXNECONVERT-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero829; AVXNECONVERT-NEXT:    callq returns_v4bf16@PLT830;831; FAST_ISEL_AVXNECONVERT-LABEL: call_ret_v4bf16:832; FAST_ISEL_AVXNECONVERT:       # %bb.0:833; FAST_ISEL_AVXNECONVERT-NEXT:    pushq %rax834; FAST_ISEL_AVXNECONVERT-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero835; FAST_ISEL_AVXNECONVERT-NEXT:    callq returns_v4bf16@PLT836  %val = load <4 x bfloat>, ptr %ptr837  call <4 x bfloat> @returns_v4bf16(<4 x bfloat> %val)838  unreachable839}840 841define <8 x bfloat> @call_ret_v8bf16(ptr %ptr) #0 {842;843; SSE2-LABEL: call_ret_v8bf16:844; SSE2:       # %bb.0:845; SSE2-NEXT:    pushq %rax846; SSE2-NEXT:    movaps (%rdi), %xmm0847; SSE2-NEXT:    callq returns_v8bf16@PLT848;849; FAST_ISEL_SSE2-LABEL: call_ret_v8bf16:850; FAST_ISEL_SSE2:       # %bb.0:851; FAST_ISEL_SSE2-NEXT:    pushq %r14852; FAST_ISEL_SSE2-NEXT:    pushq %rbx853; FAST_ISEL_SSE2-NEXT:    subq $56, %rsp854; FAST_ISEL_SSE2-NEXT:    movdqa (%rdi), %xmm1855; FAST_ISEL_SSE2-NEXT:    pextrw $7, %xmm1, %eax856; FAST_ISEL_SSE2-NEXT:    shll $16, %eax857; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill858; FAST_ISEL_SSE2-NEXT:    pextrw $6, %xmm1, %eax859; FAST_ISEL_SSE2-NEXT:    shll $16, %eax860; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill861; FAST_ISEL_SSE2-NEXT:    pextrw $5, %xmm1, %eax862; FAST_ISEL_SSE2-NEXT:    shll $16, %eax863; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill864; FAST_ISEL_SSE2-NEXT:    pextrw $4, %xmm1, %eax865; FAST_ISEL_SSE2-NEXT:    shll $16, %eax866; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill867; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm1, %eax868; FAST_ISEL_SSE2-NEXT:    shll $16, %eax869; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill870; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm1, %eax871; FAST_ISEL_SSE2-NEXT:    shll $16, %eax872; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill873; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm1, %eax874; FAST_ISEL_SSE2-NEXT:    shll $16, %eax875; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm0876; FAST_ISEL_SSE2-NEXT:    movd %xmm1, %eax877; FAST_ISEL_SSE2-NEXT:    shll $16, %eax878; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill879; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT880; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx881; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx882; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload883; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero884; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT885; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax886; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d887; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d888; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload889; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero890; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT891; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx892; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx893; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload894; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero895; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT896; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax897; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax898; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax899; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax900; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax901; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm0902; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill903; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload904; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero905; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT906; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx907; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx908; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload909; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero910; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT911; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax912; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d913; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d914; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload915; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero916; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT917; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx918; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx919; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload920; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero921; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT922; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax923; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax924; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax925; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax926; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax927; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm1928; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload929; FAST_ISEL_SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]930; FAST_ISEL_SSE2-NEXT:    callq returns_v8bf16@PLT931;932; AVX512BF16-LABEL: call_ret_v8bf16:933; AVX512BF16:       # %bb.0:934; AVX512BF16-NEXT:    pushq %rax935; AVX512BF16-NEXT:    vmovaps (%rdi), %xmm0936; AVX512BF16-NEXT:    callq returns_v8bf16@PLT937;938; FAST_ISEL_AVX512BF16-LABEL: call_ret_v8bf16:939; FAST_ISEL_AVX512BF16:       # %bb.0:940; FAST_ISEL_AVX512BF16-NEXT:    pushq %rax941; FAST_ISEL_AVX512BF16-NEXT:    vmovaps (%rdi), %xmm0942; FAST_ISEL_AVX512BF16-NEXT:    callq returns_v8bf16@PLT943;944; AVXNECONVERT-LABEL: call_ret_v8bf16:945; AVXNECONVERT:       # %bb.0:946; AVXNECONVERT-NEXT:    pushq %rax947; AVXNECONVERT-NEXT:    vmovaps (%rdi), %xmm0948; AVXNECONVERT-NEXT:    callq returns_v8bf16@PLT949;950; FAST_ISEL_AVXNECONVERT-LABEL: call_ret_v8bf16:951; FAST_ISEL_AVXNECONVERT:       # %bb.0:952; FAST_ISEL_AVXNECONVERT-NEXT:    pushq %rax953; FAST_ISEL_AVXNECONVERT-NEXT:    vmovaps (%rdi), %xmm0954; FAST_ISEL_AVXNECONVERT-NEXT:    callq returns_v8bf16@PLT955  %val = load <8 x bfloat>, ptr %ptr956  call <8 x bfloat> @returns_v8bf16(<8 x bfloat> %val)957  unreachable958}959 960define <16 x bfloat> @call_ret_v16bf16(ptr %ptr) #0 {961;962; SSE2-LABEL: call_ret_v16bf16:963; SSE2:       # %bb.0:964; SSE2-NEXT:    pushq %rax965; SSE2-NEXT:    movaps (%rdi), %xmm0966; SSE2-NEXT:    movaps 16(%rdi), %xmm1967; SSE2-NEXT:    callq returns_v16bf16@PLT968;969; FAST_ISEL_SSE2-LABEL: call_ret_v16bf16:970; FAST_ISEL_SSE2:       # %bb.0:971; FAST_ISEL_SSE2-NEXT:    pushq %r14972; FAST_ISEL_SSE2-NEXT:    pushq %rbx973; FAST_ISEL_SSE2-NEXT:    subq $104, %rsp974; FAST_ISEL_SSE2-NEXT:    movdqa (%rdi), %xmm1975; FAST_ISEL_SSE2-NEXT:    movdqa 16(%rdi), %xmm0976; FAST_ISEL_SSE2-NEXT:    pextrw $7, %xmm0, %eax977; FAST_ISEL_SSE2-NEXT:    shll $16, %eax978; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill979; FAST_ISEL_SSE2-NEXT:    pextrw $6, %xmm0, %eax980; FAST_ISEL_SSE2-NEXT:    shll $16, %eax981; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill982; FAST_ISEL_SSE2-NEXT:    pextrw $5, %xmm0, %eax983; FAST_ISEL_SSE2-NEXT:    shll $16, %eax984; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill985; FAST_ISEL_SSE2-NEXT:    pextrw $4, %xmm0, %eax986; FAST_ISEL_SSE2-NEXT:    shll $16, %eax987; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill988; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm0, %eax989; FAST_ISEL_SSE2-NEXT:    shll $16, %eax990; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill991; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm0, %eax992; FAST_ISEL_SSE2-NEXT:    shll $16, %eax993; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill994; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm0, %eax995; FAST_ISEL_SSE2-NEXT:    shll $16, %eax996; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill997; FAST_ISEL_SSE2-NEXT:    movd %xmm0, %eax998; FAST_ISEL_SSE2-NEXT:    shll $16, %eax999; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1000; FAST_ISEL_SSE2-NEXT:    pextrw $7, %xmm1, %eax1001; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1002; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1003; FAST_ISEL_SSE2-NEXT:    pextrw $6, %xmm1, %eax1004; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1005; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1006; FAST_ISEL_SSE2-NEXT:    pextrw $5, %xmm1, %eax1007; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1008; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1009; FAST_ISEL_SSE2-NEXT:    pextrw $4, %xmm1, %eax1010; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1011; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1012; FAST_ISEL_SSE2-NEXT:    pextrw $3, %xmm1, %eax1013; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1014; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1015; FAST_ISEL_SSE2-NEXT:    pextrw $2, %xmm1, %eax1016; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1017; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1018; FAST_ISEL_SSE2-NEXT:    pextrw $1, %xmm1, %eax1019; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1020; FAST_ISEL_SSE2-NEXT:    movd %eax, %xmm01021; FAST_ISEL_SSE2-NEXT:    movd %xmm1, %eax1022; FAST_ISEL_SSE2-NEXT:    shll $16, %eax1023; FAST_ISEL_SSE2-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1024; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1025; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1026; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1027; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1028; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1029; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1030; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1031; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d1032; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d1033; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1034; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1035; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1036; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1037; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1038; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1039; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1040; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1041; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1042; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax1043; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax1044; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax1045; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax1046; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm01047; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1048; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1049; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1050; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1051; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1052; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1053; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1054; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1055; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1056; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1057; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d1058; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d1059; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1060; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1061; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1062; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1063; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1064; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1065; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1066; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1067; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1068; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax1069; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax1070; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax1071; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax1072; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm01073; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1074; FAST_ISEL_SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]1075; FAST_ISEL_SSE2-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1076; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1077; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1078; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1079; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1080; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1081; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1082; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1083; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1084; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1085; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d1086; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d1087; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1088; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1089; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1090; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1091; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1092; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1093; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1094; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1095; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1096; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax1097; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax1098; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax1099; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax1100; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm01101; FAST_ISEL_SSE2-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1102; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1103; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1104; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1105; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1106; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1107; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1108; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1109; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1110; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1111; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %r14d1112; FAST_ISEL_SSE2-NEXT:    orl %ebx, %r14d1113; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1114; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1115; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1116; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %ebx1117; FAST_ISEL_SSE2-NEXT:    shll $16, %ebx1118; FAST_ISEL_SSE2-NEXT:    movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload1119; FAST_ISEL_SSE2-NEXT:    # xmm0 = mem[0],zero,zero,zero1120; FAST_ISEL_SSE2-NEXT:    callq __truncsfbf2@PLT1121; FAST_ISEL_SSE2-NEXT:    pextrw $0, %xmm0, %eax1122; FAST_ISEL_SSE2-NEXT:    movzwl %ax, %eax1123; FAST_ISEL_SSE2-NEXT:    orl %ebx, %eax1124; FAST_ISEL_SSE2-NEXT:    shlq $32, %rax1125; FAST_ISEL_SSE2-NEXT:    orq %r14, %rax1126; FAST_ISEL_SSE2-NEXT:    movq %rax, %xmm01127; FAST_ISEL_SSE2-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1128; FAST_ISEL_SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]1129; FAST_ISEL_SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1130; FAST_ISEL_SSE2-NEXT:    callq returns_v16bf16@PLT1131;1132; AVX512BF16-LABEL: call_ret_v16bf16:1133; AVX512BF16:       # %bb.0:1134; AVX512BF16-NEXT:    pushq %rax1135; AVX512BF16-NEXT:    vmovaps (%rdi), %ymm01136; AVX512BF16-NEXT:    callq returns_v16bf16@PLT1137;1138; FAST_ISEL_AVX512BF16-LABEL: call_ret_v16bf16:1139; FAST_ISEL_AVX512BF16:       # %bb.0:1140; FAST_ISEL_AVX512BF16-NEXT:    pushq %rax1141; FAST_ISEL_AVX512BF16-NEXT:    vmovaps (%rdi), %ymm01142; FAST_ISEL_AVX512BF16-NEXT:    callq returns_v16bf16@PLT1143;1144; AVXNECONVERT-LABEL: call_ret_v16bf16:1145; AVXNECONVERT:       # %bb.0:1146; AVXNECONVERT-NEXT:    pushq %rax1147; AVXNECONVERT-NEXT:    vmovaps (%rdi), %ymm01148; AVXNECONVERT-NEXT:    callq returns_v16bf16@PLT1149;1150; FAST_ISEL_AVXNECONVERT-LABEL: call_ret_v16bf16:1151; FAST_ISEL_AVXNECONVERT:       # %bb.0:1152; FAST_ISEL_AVXNECONVERT-NEXT:    pushq %rax1153; FAST_ISEL_AVXNECONVERT-NEXT:    vmovaps (%rdi), %ymm01154; FAST_ISEL_AVXNECONVERT-NEXT:    callq returns_v16bf16@PLT1155  %val = load <16 x bfloat>, ptr %ptr1156  call <16 x bfloat> @returns_v16bf16(<16 x bfloat> %val)1157  unreachable1158}1159 1160attributes #0 = { nounwind }1161