brintos

brintos / llvm-project-archived public Read only

0
0
Text · 47.8 KiB · f363cad Raw
1244 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=i386-linux-gnu < %s | FileCheck -check-prefixes=CHECK,NOSSE %s3; RUN: llc -mtriple=i386-linux-gnu -mattr=+sse < %s | FileCheck -check-prefixes=CHECK,SSE %s4 5; Make sure no assert without SSE2 and bfloat. Issue 928996 7define bfloat @return_arg_bf16(bfloat %x) #0 {8; CHECK-LABEL: return_arg_bf16:9; CHECK:       # %bb.0:10; CHECK-NEXT:    flds {{[0-9]+}}(%esp)11; CHECK-NEXT:    retl12  ret bfloat %x13}14 15define <2 x bfloat> @return_arg_v2bf16(<2 x bfloat> %x) #0 {16; CHECK-LABEL: return_arg_v2bf16:17; CHECK:       # %bb.0:18; CHECK-NEXT:    flds {{[0-9]+}}(%esp)19; CHECK-NEXT:    flds {{[0-9]+}}(%esp)20; CHECK-NEXT:    retl21  ret <2 x bfloat> %x22}23 24define <3 x bfloat> @return_arg_v3bf16(<3 x bfloat> %x) #0 {25; NOSSE-LABEL: return_arg_v3bf16:26; NOSSE:       # %bb.0:27; NOSSE-NEXT:    pushl %edi28; NOSSE-NEXT:    pushl %esi29; NOSSE-NEXT:    pushl %eax30; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)31; NOSSE-NEXT:    fstps (%esp)32; NOSSE-NEXT:    calll __truncsfbf233; NOSSE-NEXT:    movl %eax, %esi34; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)35; NOSSE-NEXT:    fstps (%esp)36; NOSSE-NEXT:    calll __truncsfbf237; NOSSE-NEXT:    # kill: def $ax killed $ax def $eax38; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)39; NOSSE-NEXT:    fstps (%esp)40; NOSSE-NEXT:    shll $16, %eax41; NOSSE-NEXT:    movzwl %si, %edi42; NOSSE-NEXT:    orl %eax, %edi43; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %esi44; NOSSE-NEXT:    calll __truncsfbf245; NOSSE-NEXT:    movw %ax, 4(%esi)46; NOSSE-NEXT:    movl %edi, (%esi)47; NOSSE-NEXT:    movl %esi, %eax48; NOSSE-NEXT:    addl $4, %esp49; NOSSE-NEXT:    popl %esi50; NOSSE-NEXT:    popl %edi51; NOSSE-NEXT:    retl $452;53; SSE-LABEL: return_arg_v3bf16:54; SSE:       # %bb.0:55; SSE-NEXT:    pushl %edi56; SSE-NEXT:    pushl %esi57; SSE-NEXT:    pushl %eax58; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero59; SSE-NEXT:    movss %xmm0, (%esp)60; SSE-NEXT:    calll __truncsfbf261; SSE-NEXT:    movl %eax, %esi62; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero63; SSE-NEXT:    movss %xmm0, (%esp)64; SSE-NEXT:    calll __truncsfbf265; SSE-NEXT:    # kill: def $ax killed $ax def $eax66; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero67; SSE-NEXT:    movss %xmm0, (%esp)68; SSE-NEXT:    shll $16, %eax69; SSE-NEXT:    movzwl %si, %edi70; SSE-NEXT:    orl %eax, %edi71; SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi72; SSE-NEXT:    calll __truncsfbf273; SSE-NEXT:    movw %ax, 4(%esi)74; SSE-NEXT:    movl %edi, (%esi)75; SSE-NEXT:    movl %esi, %eax76; SSE-NEXT:    addl $4, %esp77; SSE-NEXT:    popl %esi78; SSE-NEXT:    popl %edi79; SSE-NEXT:    retl $480  ret <3 x bfloat> %x81}82 83define <4 x bfloat> @return_arg_v4bf16(<4 x bfloat> %x) #0 {84; NOSSE-LABEL: return_arg_v4bf16:85; NOSSE:       # %bb.0:86; NOSSE-NEXT:    pushl %ebp87; NOSSE-NEXT:    pushl %ebx88; NOSSE-NEXT:    pushl %edi89; NOSSE-NEXT:    pushl %esi90; NOSSE-NEXT:    subl $12, %esp91; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)92; NOSSE-NEXT:    fstps (%esp)93; NOSSE-NEXT:    calll __truncsfbf294; NOSSE-NEXT:    movl %eax, %esi95; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)96; NOSSE-NEXT:    fstps (%esp)97; NOSSE-NEXT:    calll __truncsfbf298; NOSSE-NEXT:    movl %eax, %edi99; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)100; NOSSE-NEXT:    fstps (%esp)101; NOSSE-NEXT:    calll __truncsfbf2102; NOSSE-NEXT:    movl %eax, %ebx103; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)104; NOSSE-NEXT:    fstps (%esp)105; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ebp106; NOSSE-NEXT:    calll __truncsfbf2107; NOSSE-NEXT:    movw %ax, 6(%ebp)108; NOSSE-NEXT:    movw %bx, 4(%ebp)109; NOSSE-NEXT:    movw %di, 2(%ebp)110; NOSSE-NEXT:    movw %si, (%ebp)111; NOSSE-NEXT:    movl %ebp, %eax112; NOSSE-NEXT:    addl $12, %esp113; NOSSE-NEXT:    popl %esi114; NOSSE-NEXT:    popl %edi115; NOSSE-NEXT:    popl %ebx116; NOSSE-NEXT:    popl %ebp117; NOSSE-NEXT:    retl $4118;119; SSE-LABEL: return_arg_v4bf16:120; SSE:       # %bb.0:121; SSE-NEXT:    pushl %ebp122; SSE-NEXT:    pushl %ebx123; SSE-NEXT:    pushl %edi124; SSE-NEXT:    pushl %esi125; SSE-NEXT:    subl $12, %esp126; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero127; SSE-NEXT:    movss %xmm0, (%esp)128; SSE-NEXT:    calll __truncsfbf2129; SSE-NEXT:    movl %eax, %esi130; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero131; SSE-NEXT:    movss %xmm0, (%esp)132; SSE-NEXT:    calll __truncsfbf2133; SSE-NEXT:    movl %eax, %edi134; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero135; SSE-NEXT:    movss %xmm0, (%esp)136; SSE-NEXT:    calll __truncsfbf2137; SSE-NEXT:    movl %eax, %ebx138; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero139; SSE-NEXT:    movss %xmm0, (%esp)140; SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebp141; SSE-NEXT:    calll __truncsfbf2142; SSE-NEXT:    movw %ax, 6(%ebp)143; SSE-NEXT:    movw %bx, 4(%ebp)144; SSE-NEXT:    movw %di, 2(%ebp)145; SSE-NEXT:    movw %si, (%ebp)146; SSE-NEXT:    movl %ebp, %eax147; SSE-NEXT:    addl $12, %esp148; SSE-NEXT:    popl %esi149; SSE-NEXT:    popl %edi150; SSE-NEXT:    popl %ebx151; SSE-NEXT:    popl %ebp152; SSE-NEXT:    retl $4153  ret <4 x bfloat> %x154}155 156define <8 x bfloat> @return_arg_v8bf16(<8 x bfloat> %x) #0 {157; NOSSE-LABEL: return_arg_v8bf16:158; NOSSE:       # %bb.0:159; NOSSE-NEXT:    pushl %ebp160; NOSSE-NEXT:    pushl %ebx161; NOSSE-NEXT:    pushl %edi162; NOSSE-NEXT:    pushl %esi163; NOSSE-NEXT:    subl $12, %esp164; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)165; NOSSE-NEXT:    fstps (%esp)166; NOSSE-NEXT:    calll __truncsfbf2167; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill168; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)169; NOSSE-NEXT:    fstps (%esp)170; NOSSE-NEXT:    calll __truncsfbf2171; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill172; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)173; NOSSE-NEXT:    fstps (%esp)174; NOSSE-NEXT:    calll __truncsfbf2175; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill176; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)177; NOSSE-NEXT:    fstps (%esp)178; NOSSE-NEXT:    calll __truncsfbf2179; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill180; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)181; NOSSE-NEXT:    fstps (%esp)182; NOSSE-NEXT:    calll __truncsfbf2183; NOSSE-NEXT:    movl %eax, %esi184; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)185; NOSSE-NEXT:    fstps (%esp)186; NOSSE-NEXT:    calll __truncsfbf2187; NOSSE-NEXT:    movl %eax, %edi188; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)189; NOSSE-NEXT:    fstps (%esp)190; NOSSE-NEXT:    calll __truncsfbf2191; NOSSE-NEXT:    movl %eax, %ebx192; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)193; NOSSE-NEXT:    fstps (%esp)194; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ebp195; NOSSE-NEXT:    calll __truncsfbf2196; NOSSE-NEXT:    movw %ax, 14(%ebp)197; NOSSE-NEXT:    movw %bx, 12(%ebp)198; NOSSE-NEXT:    movw %di, 10(%ebp)199; NOSSE-NEXT:    movw %si, 8(%ebp)200; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload201; NOSSE-NEXT:    movw %ax, 6(%ebp)202; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload203; NOSSE-NEXT:    movw %ax, 4(%ebp)204; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload205; NOSSE-NEXT:    movw %ax, 2(%ebp)206; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload207; NOSSE-NEXT:    movw %ax, (%ebp)208; NOSSE-NEXT:    movl %ebp, %eax209; NOSSE-NEXT:    addl $12, %esp210; NOSSE-NEXT:    popl %esi211; NOSSE-NEXT:    popl %edi212; NOSSE-NEXT:    popl %ebx213; NOSSE-NEXT:    popl %ebp214; NOSSE-NEXT:    retl $4215;216; SSE-LABEL: return_arg_v8bf16:217; SSE:       # %bb.0:218; SSE-NEXT:    pushl %ebp219; SSE-NEXT:    pushl %ebx220; SSE-NEXT:    pushl %edi221; SSE-NEXT:    pushl %esi222; SSE-NEXT:    subl $12, %esp223; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero224; SSE-NEXT:    movss %xmm0, (%esp)225; SSE-NEXT:    calll __truncsfbf2226; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill227; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero228; SSE-NEXT:    movss %xmm0, (%esp)229; SSE-NEXT:    calll __truncsfbf2230; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill231; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero232; SSE-NEXT:    movss %xmm0, (%esp)233; SSE-NEXT:    calll __truncsfbf2234; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill235; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero236; SSE-NEXT:    movss %xmm0, (%esp)237; SSE-NEXT:    calll __truncsfbf2238; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill239; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero240; SSE-NEXT:    movss %xmm0, (%esp)241; SSE-NEXT:    calll __truncsfbf2242; SSE-NEXT:    movl %eax, %esi243; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero244; SSE-NEXT:    movss %xmm0, (%esp)245; SSE-NEXT:    calll __truncsfbf2246; SSE-NEXT:    movl %eax, %edi247; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero248; SSE-NEXT:    movss %xmm0, (%esp)249; SSE-NEXT:    calll __truncsfbf2250; SSE-NEXT:    movl %eax, %ebx251; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero252; SSE-NEXT:    movss %xmm0, (%esp)253; SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebp254; SSE-NEXT:    calll __truncsfbf2255; SSE-NEXT:    movw %ax, 14(%ebp)256; SSE-NEXT:    movw %bx, 12(%ebp)257; SSE-NEXT:    movw %di, 10(%ebp)258; SSE-NEXT:    movw %si, 8(%ebp)259; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload260; SSE-NEXT:    movw %ax, 6(%ebp)261; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload262; SSE-NEXT:    movw %ax, 4(%ebp)263; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload264; SSE-NEXT:    movw %ax, 2(%ebp)265; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload266; SSE-NEXT:    movw %ax, (%ebp)267; SSE-NEXT:    movl %ebp, %eax268; SSE-NEXT:    addl $12, %esp269; SSE-NEXT:    popl %esi270; SSE-NEXT:    popl %edi271; SSE-NEXT:    popl %ebx272; SSE-NEXT:    popl %ebp273; SSE-NEXT:    retl $4274  ret <8 x bfloat> %x275}276 277define <16 x bfloat> @return_arg_v16bf16(<16 x bfloat> %x) #0 {278; NOSSE-LABEL: return_arg_v16bf16:279; NOSSE:       # %bb.0:280; NOSSE-NEXT:    pushl %ebp281; NOSSE-NEXT:    pushl %ebx282; NOSSE-NEXT:    pushl %edi283; NOSSE-NEXT:    pushl %esi284; NOSSE-NEXT:    subl $28, %esp285; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)286; NOSSE-NEXT:    fstps (%esp)287; NOSSE-NEXT:    calll __truncsfbf2288; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill289; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)290; NOSSE-NEXT:    fstps (%esp)291; NOSSE-NEXT:    calll __truncsfbf2292; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill293; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)294; NOSSE-NEXT:    fstps (%esp)295; NOSSE-NEXT:    calll __truncsfbf2296; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill297; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)298; NOSSE-NEXT:    fstps (%esp)299; NOSSE-NEXT:    calll __truncsfbf2300; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill301; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)302; NOSSE-NEXT:    fstps (%esp)303; NOSSE-NEXT:    calll __truncsfbf2304; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill305; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)306; NOSSE-NEXT:    fstps (%esp)307; NOSSE-NEXT:    calll __truncsfbf2308; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill309; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)310; NOSSE-NEXT:    fstps (%esp)311; NOSSE-NEXT:    calll __truncsfbf2312; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill313; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)314; NOSSE-NEXT:    fstps (%esp)315; NOSSE-NEXT:    calll __truncsfbf2316; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill317; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)318; NOSSE-NEXT:    fstps (%esp)319; NOSSE-NEXT:    calll __truncsfbf2320; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill321; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)322; NOSSE-NEXT:    fstps (%esp)323; NOSSE-NEXT:    calll __truncsfbf2324; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill325; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)326; NOSSE-NEXT:    fstps (%esp)327; NOSSE-NEXT:    calll __truncsfbf2328; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill329; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)330; NOSSE-NEXT:    fstps (%esp)331; NOSSE-NEXT:    calll __truncsfbf2332; NOSSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill333; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)334; NOSSE-NEXT:    fstps (%esp)335; NOSSE-NEXT:    calll __truncsfbf2336; NOSSE-NEXT:    movl %eax, %esi337; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)338; NOSSE-NEXT:    fstps (%esp)339; NOSSE-NEXT:    calll __truncsfbf2340; NOSSE-NEXT:    movl %eax, %ebx341; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)342; NOSSE-NEXT:    fstps (%esp)343; NOSSE-NEXT:    calll __truncsfbf2344; NOSSE-NEXT:    movl %eax, %ebp345; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)346; NOSSE-NEXT:    fstps (%esp)347; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edi348; NOSSE-NEXT:    calll __truncsfbf2349; NOSSE-NEXT:    movw %ax, 30(%edi)350; NOSSE-NEXT:    movw %bp, 28(%edi)351; NOSSE-NEXT:    movw %bx, 26(%edi)352; NOSSE-NEXT:    movw %si, 24(%edi)353; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload354; NOSSE-NEXT:    movw %ax, 22(%edi)355; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload356; NOSSE-NEXT:    movw %ax, 20(%edi)357; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload358; NOSSE-NEXT:    movw %ax, 18(%edi)359; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload360; NOSSE-NEXT:    movw %ax, 16(%edi)361; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload362; NOSSE-NEXT:    movw %ax, 14(%edi)363; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload364; NOSSE-NEXT:    movw %ax, 12(%edi)365; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload366; NOSSE-NEXT:    movw %ax, 10(%edi)367; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload368; NOSSE-NEXT:    movw %ax, 8(%edi)369; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload370; NOSSE-NEXT:    movw %ax, 6(%edi)371; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload372; NOSSE-NEXT:    movw %ax, 4(%edi)373; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload374; NOSSE-NEXT:    movw %ax, 2(%edi)375; NOSSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload376; NOSSE-NEXT:    movw %ax, (%edi)377; NOSSE-NEXT:    movl %edi, %eax378; NOSSE-NEXT:    addl $28, %esp379; NOSSE-NEXT:    popl %esi380; NOSSE-NEXT:    popl %edi381; NOSSE-NEXT:    popl %ebx382; NOSSE-NEXT:    popl %ebp383; NOSSE-NEXT:    retl $4384;385; SSE-LABEL: return_arg_v16bf16:386; SSE:       # %bb.0:387; SSE-NEXT:    pushl %ebp388; SSE-NEXT:    pushl %ebx389; SSE-NEXT:    pushl %edi390; SSE-NEXT:    pushl %esi391; SSE-NEXT:    subl $28, %esp392; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero393; SSE-NEXT:    movss %xmm0, (%esp)394; SSE-NEXT:    calll __truncsfbf2395; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill396; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero397; SSE-NEXT:    movss %xmm0, (%esp)398; SSE-NEXT:    calll __truncsfbf2399; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill400; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero401; SSE-NEXT:    movss %xmm0, (%esp)402; SSE-NEXT:    calll __truncsfbf2403; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill404; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero405; SSE-NEXT:    movss %xmm0, (%esp)406; SSE-NEXT:    calll __truncsfbf2407; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill408; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero409; SSE-NEXT:    movss %xmm0, (%esp)410; SSE-NEXT:    calll __truncsfbf2411; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill412; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero413; SSE-NEXT:    movss %xmm0, (%esp)414; SSE-NEXT:    calll __truncsfbf2415; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill416; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero417; SSE-NEXT:    movss %xmm0, (%esp)418; SSE-NEXT:    calll __truncsfbf2419; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill420; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero421; SSE-NEXT:    movss %xmm0, (%esp)422; SSE-NEXT:    calll __truncsfbf2423; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill424; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero425; SSE-NEXT:    movss %xmm0, (%esp)426; SSE-NEXT:    calll __truncsfbf2427; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill428; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero429; SSE-NEXT:    movss %xmm0, (%esp)430; SSE-NEXT:    calll __truncsfbf2431; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill432; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero433; SSE-NEXT:    movss %xmm0, (%esp)434; SSE-NEXT:    calll __truncsfbf2435; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill436; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero437; SSE-NEXT:    movss %xmm0, (%esp)438; SSE-NEXT:    calll __truncsfbf2439; SSE-NEXT:    movw %ax, {{[-0-9]+}}(%e{{[sb]}}p) # 2-byte Spill440; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero441; SSE-NEXT:    movss %xmm0, (%esp)442; SSE-NEXT:    calll __truncsfbf2443; SSE-NEXT:    movl %eax, %esi444; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero445; SSE-NEXT:    movss %xmm0, (%esp)446; SSE-NEXT:    calll __truncsfbf2447; SSE-NEXT:    movl %eax, %ebx448; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero449; SSE-NEXT:    movss %xmm0, (%esp)450; SSE-NEXT:    calll __truncsfbf2451; SSE-NEXT:    movl %eax, %ebp452; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero453; SSE-NEXT:    movss %xmm0, (%esp)454; SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi455; SSE-NEXT:    calll __truncsfbf2456; SSE-NEXT:    movw %ax, 30(%edi)457; SSE-NEXT:    movw %bp, 28(%edi)458; SSE-NEXT:    movw %bx, 26(%edi)459; SSE-NEXT:    movw %si, 24(%edi)460; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload461; SSE-NEXT:    movw %ax, 22(%edi)462; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload463; SSE-NEXT:    movw %ax, 20(%edi)464; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload465; SSE-NEXT:    movw %ax, 18(%edi)466; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload467; SSE-NEXT:    movw %ax, 16(%edi)468; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload469; SSE-NEXT:    movw %ax, 14(%edi)470; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload471; SSE-NEXT:    movw %ax, 12(%edi)472; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload473; SSE-NEXT:    movw %ax, 10(%edi)474; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload475; SSE-NEXT:    movw %ax, 8(%edi)476; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload477; SSE-NEXT:    movw %ax, 6(%edi)478; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload479; SSE-NEXT:    movw %ax, 4(%edi)480; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload481; SSE-NEXT:    movw %ax, 2(%edi)482; SSE-NEXT:    movzwl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 2-byte Folded Reload483; SSE-NEXT:    movw %ax, (%edi)484; SSE-NEXT:    movl %edi, %eax485; SSE-NEXT:    addl $28, %esp486; SSE-NEXT:    popl %esi487; SSE-NEXT:    popl %edi488; SSE-NEXT:    popl %ebx489; SSE-NEXT:    popl %ebp490; SSE-NEXT:    retl $4491  ret <16 x bfloat> %x492}493 494declare bfloat @returns_bf16(bfloat)495declare <2 x bfloat> @returns_v2bf16(<2 x bfloat>)496declare <3 x bfloat> @returns_v3bf16(<3 x bfloat>)497declare <4 x bfloat> @returns_v4bf16(<4 x bfloat>)498declare <8 x bfloat> @returns_v8bf16(<8 x bfloat>)499declare <16 x bfloat> @returns_v16bf16(<16 x bfloat>)500 501define void @call_ret_bf16(ptr %ptr) #0 {502; NOSSE-LABEL: call_ret_bf16:503; NOSSE:       # %bb.0:504; NOSSE-NEXT:    pushl %esi505; NOSSE-NEXT:    subl $8, %esp506; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %esi507; NOSSE-NEXT:    movzwl (%esi), %eax508; NOSSE-NEXT:    shll $16, %eax509; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)510; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)511; NOSSE-NEXT:    fstps (%esp)512; NOSSE-NEXT:    calll returns_bf16@PLT513; NOSSE-NEXT:    fstps (%esp)514; NOSSE-NEXT:    calll __truncsfbf2515; NOSSE-NEXT:    movw %ax, (%esi)516; NOSSE-NEXT:    addl $8, %esp517; NOSSE-NEXT:    popl %esi518; NOSSE-NEXT:    retl519;520; SSE-LABEL: call_ret_bf16:521; SSE:       # %bb.0:522; SSE-NEXT:    pushl %esi523; SSE-NEXT:    subl $8, %esp524; SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi525; SSE-NEXT:    movzwl (%esi), %eax526; SSE-NEXT:    shll $16, %eax527; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)528; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero529; SSE-NEXT:    movss %xmm0, (%esp)530; SSE-NEXT:    calll returns_bf16@PLT531; SSE-NEXT:    fstps (%esp)532; SSE-NEXT:    calll __truncsfbf2533; SSE-NEXT:    movw %ax, (%esi)534; SSE-NEXT:    addl $8, %esp535; SSE-NEXT:    popl %esi536; SSE-NEXT:    retl537  %val = load bfloat, ptr %ptr538  %bf16 = call bfloat @returns_bf16(bfloat %val)539  store bfloat %bf16, ptr %ptr540  ret void541}542 543define void @call_ret_v2bf16(ptr %ptr) #0 {544; NOSSE-LABEL: call_ret_v2bf16:545; NOSSE:       # %bb.0:546; NOSSE-NEXT:    pushl %edi547; NOSSE-NEXT:    pushl %esi548; NOSSE-NEXT:    subl $20, %esp549; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edi550; NOSSE-NEXT:    movzwl 2(%edi), %eax551; NOSSE-NEXT:    shll $16, %eax552; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)553; NOSSE-NEXT:    movl (%edi), %eax554; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)555; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)556; NOSSE-NEXT:    shll $16, %eax557; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)558; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)559; NOSSE-NEXT:    fstps (%esp)560; NOSSE-NEXT:    calll returns_v2bf16@PLT561; NOSSE-NEXT:    fxch %st(1)562; NOSSE-NEXT:    fstps {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill563; NOSSE-NEXT:    fstps (%esp)564; NOSSE-NEXT:    calll __truncsfbf2565; NOSSE-NEXT:    movl %eax, %esi566; NOSSE-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload567; NOSSE-NEXT:    fstps (%esp)568; NOSSE-NEXT:    calll __truncsfbf2569; NOSSE-NEXT:    movw %ax, 2(%edi)570; NOSSE-NEXT:    movw %si, (%edi)571; NOSSE-NEXT:    addl $20, %esp572; NOSSE-NEXT:    popl %esi573; NOSSE-NEXT:    popl %edi574; NOSSE-NEXT:    retl575;576; SSE-LABEL: call_ret_v2bf16:577; SSE:       # %bb.0:578; SSE-NEXT:    pushl %edi579; SSE-NEXT:    pushl %esi580; SSE-NEXT:    subl $36, %esp581; SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi582; SSE-NEXT:    movzwl 2(%edi), %eax583; SSE-NEXT:    shll $16, %eax584; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)585; SSE-NEXT:    movl (%edi), %eax586; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero587; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)588; SSE-NEXT:    shll $16, %eax589; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)590; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero591; SSE-NEXT:    movss %xmm0, (%esp)592; SSE-NEXT:    calll returns_v2bf16@PLT593; SSE-NEXT:    fxch %st(1)594; SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill595; SSE-NEXT:    fstps (%esp)596; SSE-NEXT:    calll __truncsfbf2597; SSE-NEXT:    movl %eax, %esi598; SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload599; SSE-NEXT:    fstps (%esp)600; SSE-NEXT:    calll __truncsfbf2601; SSE-NEXT:    movw %ax, 2(%edi)602; SSE-NEXT:    movw %si, (%edi)603; SSE-NEXT:    addl $36, %esp604; SSE-NEXT:    popl %esi605; SSE-NEXT:    popl %edi606; SSE-NEXT:    retl607  %val = load <2 x bfloat>, ptr %ptr608  %bf16 = call <2 x bfloat> @returns_v2bf16(<2 x bfloat> %val)609  store <2 x bfloat> %bf16, ptr %ptr610  ret void611}612 613define void @call_ret_v3bf16(ptr %ptr) #0 {614; NOSSE-LABEL: call_ret_v3bf16:615; NOSSE:       # %bb.0:616; NOSSE-NEXT:    pushl %esi617; NOSSE-NEXT:    subl $40, %esp618; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %esi619; NOSSE-NEXT:    movl (%esi), %eax620; NOSSE-NEXT:    movl 4(%esi), %ecx621; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %edx622; NOSSE-NEXT:    movl %edx, (%esp)623; NOSSE-NEXT:    shll $16, %ecx624; NOSSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)625; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)626; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)627; NOSSE-NEXT:    movl %eax, %ecx628; NOSSE-NEXT:    andl $-65536, %ecx # imm = 0xFFFF0000629; NOSSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)630; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)631; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)632; NOSSE-NEXT:    shll $16, %eax633; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)634; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)635; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)636; NOSSE-NEXT:    calll returns_v3bf16@PLT637; NOSSE-NEXT:    subl $4, %esp638; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax639; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx640; NOSSE-NEXT:    movw %cx, 4(%esi)641; NOSSE-NEXT:    movl %eax, (%esi)642; NOSSE-NEXT:    addl $40, %esp643; NOSSE-NEXT:    popl %esi644; NOSSE-NEXT:    retl645;646; SSE-LABEL: call_ret_v3bf16:647; SSE:       # %bb.0:648; SSE-NEXT:    pushl %esi649; SSE-NEXT:    subl $40, %esp650; SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi651; SSE-NEXT:    movl (%esi), %eax652; SSE-NEXT:    movl 4(%esi), %ecx653; SSE-NEXT:    leal {{[0-9]+}}(%esp), %edx654; SSE-NEXT:    movl %edx, (%esp)655; SSE-NEXT:    shll $16, %ecx656; SSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)657; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero658; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)659; SSE-NEXT:    movl %eax, %ecx660; SSE-NEXT:    andl $-65536, %ecx # imm = 0xFFFF0000661; SSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)662; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero663; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)664; SSE-NEXT:    shll $16, %eax665; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)666; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero667; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)668; SSE-NEXT:    calll returns_v3bf16@PLT669; SSE-NEXT:    subl $4, %esp670; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax671; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx672; SSE-NEXT:    movw %cx, 4(%esi)673; SSE-NEXT:    movl %eax, (%esi)674; SSE-NEXT:    addl $40, %esp675; SSE-NEXT:    popl %esi676; SSE-NEXT:    retl677  %val = load <3 x bfloat>, ptr %ptr678  %bf16 = call <3 x bfloat> @returns_v3bf16(<3 x bfloat> %val)679  store <3 x bfloat> %bf16, ptr %ptr680  ret void681}682 683define void @call_ret_v4bf16(ptr %ptr) #0 {684; NOSSE-LABEL: call_ret_v4bf16:685; NOSSE:       # %bb.0:686; NOSSE-NEXT:    pushl %ebx687; NOSSE-NEXT:    pushl %edi688; NOSSE-NEXT:    pushl %esi689; NOSSE-NEXT:    subl $48, %esp690; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %esi691; NOSSE-NEXT:    movzwl 2(%esi), %ecx692; NOSSE-NEXT:    movl (%esi), %eax693; NOSSE-NEXT:    movl 4(%esi), %edx694; NOSSE-NEXT:    movzwl 6(%esi), %edi695; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %ebx696; NOSSE-NEXT:    movl %ebx, (%esp)697; NOSSE-NEXT:    shll $16, %edi698; NOSSE-NEXT:    movl %edi, {{[0-9]+}}(%esp)699; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)700; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)701; NOSSE-NEXT:    shll $16, %edx702; NOSSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)703; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)704; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)705; NOSSE-NEXT:    shll $16, %ecx706; NOSSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)707; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)708; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)709; NOSSE-NEXT:    shll $16, %eax710; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)711; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)712; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)713; NOSSE-NEXT:    calll returns_v4bf16@PLT714; NOSSE-NEXT:    subl $4, %esp715; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax716; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx717; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edx718; NOSSE-NEXT:    movw %dx, 6(%esi)719; NOSSE-NEXT:    movw %cx, 4(%esi)720; NOSSE-NEXT:    movl %eax, (%esi)721; NOSSE-NEXT:    addl $48, %esp722; NOSSE-NEXT:    popl %esi723; NOSSE-NEXT:    popl %edi724; NOSSE-NEXT:    popl %ebx725; NOSSE-NEXT:    retl726;727; SSE-LABEL: call_ret_v4bf16:728; SSE:       # %bb.0:729; SSE-NEXT:    pushl %ebx730; SSE-NEXT:    pushl %edi731; SSE-NEXT:    pushl %esi732; SSE-NEXT:    subl $48, %esp733; SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi734; SSE-NEXT:    movzwl 2(%esi), %ecx735; SSE-NEXT:    movl (%esi), %eax736; SSE-NEXT:    movl 4(%esi), %edx737; SSE-NEXT:    movzwl 6(%esi), %edi738; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ebx739; SSE-NEXT:    movl %ebx, (%esp)740; SSE-NEXT:    shll $16, %edi741; SSE-NEXT:    movl %edi, {{[0-9]+}}(%esp)742; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero743; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)744; SSE-NEXT:    shll $16, %edx745; SSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)746; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero747; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)748; SSE-NEXT:    shll $16, %ecx749; SSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)750; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero751; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)752; SSE-NEXT:    shll $16, %eax753; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)754; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero755; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)756; SSE-NEXT:    calll returns_v4bf16@PLT757; SSE-NEXT:    subl $4, %esp758; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax759; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx760; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edx761; SSE-NEXT:    movw %dx, 6(%esi)762; SSE-NEXT:    movw %cx, 4(%esi)763; SSE-NEXT:    movl %eax, (%esi)764; SSE-NEXT:    addl $48, %esp765; SSE-NEXT:    popl %esi766; SSE-NEXT:    popl %edi767; SSE-NEXT:    popl %ebx768; SSE-NEXT:    retl769  %val = load <4 x bfloat>, ptr %ptr770  %bf16 = call <4 x bfloat> @returns_v4bf16(<4 x bfloat> %val)771  store <4 x bfloat> %bf16, ptr %ptr772  ret void773}774 775define void @call_ret_v8bf16(ptr %ptr) #0 {776; NOSSE-LABEL: call_ret_v8bf16:777; NOSSE:       # %bb.0:778; NOSSE-NEXT:    pushl %ebp779; NOSSE-NEXT:    pushl %ebx780; NOSSE-NEXT:    pushl %edi781; NOSSE-NEXT:    pushl %esi782; NOSSE-NEXT:    subl $108, %esp783; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %esi784; NOSSE-NEXT:    movzwl 2(%esi), %eax785; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill786; NOSSE-NEXT:    movl (%esi), %eax787; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill788; NOSSE-NEXT:    movl 4(%esi), %eax789; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill790; NOSSE-NEXT:    movzwl 6(%esi), %edi791; NOSSE-NEXT:    movl 8(%esi), %ebx792; NOSSE-NEXT:    movzwl 10(%esi), %ebp793; NOSSE-NEXT:    movl 12(%esi), %ecx794; NOSSE-NEXT:    movzwl 14(%esi), %eax795; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %edx796; NOSSE-NEXT:    movl %edx, (%esp)797; NOSSE-NEXT:    shll $16, %eax798; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)799; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)800; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)801; NOSSE-NEXT:    shll $16, %ecx802; NOSSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)803; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)804; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)805; NOSSE-NEXT:    shll $16, %ebp806; NOSSE-NEXT:    movl %ebp, {{[0-9]+}}(%esp)807; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)808; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)809; NOSSE-NEXT:    shll $16, %ebx810; NOSSE-NEXT:    movl %ebx, {{[0-9]+}}(%esp)811; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)812; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)813; NOSSE-NEXT:    shll $16, %edi814; NOSSE-NEXT:    movl %edi, {{[0-9]+}}(%esp)815; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)816; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)817; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload818; NOSSE-NEXT:    shll $16, %eax819; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)820; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)821; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)822; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload823; NOSSE-NEXT:    shll $16, %eax824; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)825; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)826; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)827; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload828; NOSSE-NEXT:    shll $16, %eax829; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)830; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)831; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)832; NOSSE-NEXT:    calll returns_v8bf16@PLT833; NOSSE-NEXT:    subl $4, %esp834; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax835; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill836; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx837; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edx838; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edi839; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ebx840; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ebp841; NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax842; NOSSE-NEXT:    movw %ax, 14(%esi)843; NOSSE-NEXT:    movw %bp, 12(%esi)844; NOSSE-NEXT:    movw %bx, 10(%esi)845; NOSSE-NEXT:    movw %di, 8(%esi)846; NOSSE-NEXT:    movw %dx, 6(%esi)847; NOSSE-NEXT:    movw %cx, 4(%esi)848; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload849; NOSSE-NEXT:    movl %eax, (%esi)850; NOSSE-NEXT:    addl $108, %esp851; NOSSE-NEXT:    popl %esi852; NOSSE-NEXT:    popl %edi853; NOSSE-NEXT:    popl %ebx854; NOSSE-NEXT:    popl %ebp855; NOSSE-NEXT:    retl856;857; SSE-LABEL: call_ret_v8bf16:858; SSE:       # %bb.0:859; SSE-NEXT:    pushl %ebp860; SSE-NEXT:    pushl %ebx861; SSE-NEXT:    pushl %edi862; SSE-NEXT:    pushl %esi863; SSE-NEXT:    subl $108, %esp864; SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi865; SSE-NEXT:    movzwl 2(%esi), %eax866; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill867; SSE-NEXT:    movl (%esi), %eax868; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill869; SSE-NEXT:    movl 4(%esi), %eax870; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill871; SSE-NEXT:    movzwl 6(%esi), %edi872; SSE-NEXT:    movl 8(%esi), %ebx873; SSE-NEXT:    movzwl 10(%esi), %ebp874; SSE-NEXT:    movl 12(%esi), %ecx875; SSE-NEXT:    movzwl 14(%esi), %eax876; SSE-NEXT:    leal {{[0-9]+}}(%esp), %edx877; SSE-NEXT:    movl %edx, (%esp)878; SSE-NEXT:    shll $16, %eax879; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)880; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero881; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)882; SSE-NEXT:    shll $16, %ecx883; SSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)884; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero885; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)886; SSE-NEXT:    shll $16, %ebp887; SSE-NEXT:    movl %ebp, {{[0-9]+}}(%esp)888; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero889; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)890; SSE-NEXT:    shll $16, %ebx891; SSE-NEXT:    movl %ebx, {{[0-9]+}}(%esp)892; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero893; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)894; SSE-NEXT:    shll $16, %edi895; SSE-NEXT:    movl %edi, {{[0-9]+}}(%esp)896; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero897; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)898; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload899; SSE-NEXT:    shll $16, %eax900; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)901; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero902; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)903; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload904; SSE-NEXT:    shll $16, %eax905; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)906; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero907; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)908; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload909; SSE-NEXT:    shll $16, %eax910; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)911; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero912; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)913; SSE-NEXT:    calll returns_v8bf16@PLT914; SSE-NEXT:    subl $4, %esp915; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax916; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill917; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx918; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edx919; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %edi920; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ebx921; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ebp922; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax923; SSE-NEXT:    movw %ax, 14(%esi)924; SSE-NEXT:    movw %bp, 12(%esi)925; SSE-NEXT:    movw %bx, 10(%esi)926; SSE-NEXT:    movw %di, 8(%esi)927; SSE-NEXT:    movw %dx, 6(%esi)928; SSE-NEXT:    movw %cx, 4(%esi)929; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload930; SSE-NEXT:    movl %eax, (%esi)931; SSE-NEXT:    addl $108, %esp932; SSE-NEXT:    popl %esi933; SSE-NEXT:    popl %edi934; SSE-NEXT:    popl %ebx935; SSE-NEXT:    popl %ebp936; SSE-NEXT:    retl937  %val = load <8 x bfloat>, ptr %ptr938  %bf16 = call <8 x bfloat> @returns_v8bf16(<8 x bfloat> %val)939  store <8 x bfloat> %bf16, ptr %ptr940  ret void941}942 943define void @call_ret_v16bf16(ptr %ptr) #0 {944; NOSSE-LABEL: call_ret_v16bf16:945; NOSSE:       # %bb.0:946; NOSSE-NEXT:    pushl %ebp947; NOSSE-NEXT:    movl %esp, %ebp948; NOSSE-NEXT:    pushl %ebx949; NOSSE-NEXT:    pushl %edi950; NOSSE-NEXT:    pushl %esi951; NOSSE-NEXT:    andl $-32, %esp952; NOSSE-NEXT:    subl $256, %esp # imm = 0x100953; NOSSE-NEXT:    movl 8(%ebp), %esi954; NOSSE-NEXT:    movzwl 2(%esi), %eax955; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill956; NOSSE-NEXT:    movl (%esi), %eax957; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill958; NOSSE-NEXT:    movl 4(%esi), %eax959; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill960; NOSSE-NEXT:    movzwl 6(%esi), %eax961; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill962; NOSSE-NEXT:    movl 8(%esi), %eax963; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill964; NOSSE-NEXT:    movzwl 10(%esi), %eax965; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill966; NOSSE-NEXT:    movl 12(%esi), %eax967; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill968; NOSSE-NEXT:    movzwl 14(%esi), %eax969; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill970; NOSSE-NEXT:    movl 16(%esi), %eax971; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill972; NOSSE-NEXT:    movzwl 18(%esi), %eax973; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill974; NOSSE-NEXT:    movl 20(%esi), %eax975; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill976; NOSSE-NEXT:    movzwl 22(%esi), %eax977; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill978; NOSSE-NEXT:    movl 24(%esi), %edi979; NOSSE-NEXT:    movzwl 26(%esi), %edx980; NOSSE-NEXT:    movl 28(%esi), %ecx981; NOSSE-NEXT:    movzwl 30(%esi), %eax982; NOSSE-NEXT:    leal {{[0-9]+}}(%esp), %ebx983; NOSSE-NEXT:    movl %ebx, (%esp)984; NOSSE-NEXT:    shll $16, %eax985; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)986; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)987; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)988; NOSSE-NEXT:    shll $16, %ecx989; NOSSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)990; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)991; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)992; NOSSE-NEXT:    shll $16, %edx993; NOSSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)994; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)995; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)996; NOSSE-NEXT:    shll $16, %edi997; NOSSE-NEXT:    movl %edi, {{[0-9]+}}(%esp)998; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)999; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1000; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1001; NOSSE-NEXT:    shll $16, %eax1002; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1003; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1004; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1005; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1006; NOSSE-NEXT:    shll $16, %eax1007; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1008; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1009; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1010; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1011; NOSSE-NEXT:    shll $16, %eax1012; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1013; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1014; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1015; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1016; NOSSE-NEXT:    shll $16, %eax1017; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1018; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1019; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1020; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1021; NOSSE-NEXT:    shll $16, %eax1022; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1023; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1024; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1025; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1026; NOSSE-NEXT:    shll $16, %eax1027; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1028; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1029; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1030; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1031; NOSSE-NEXT:    shll $16, %eax1032; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1033; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1034; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1035; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1036; NOSSE-NEXT:    shll $16, %eax1037; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1038; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1039; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1040; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1041; NOSSE-NEXT:    shll $16, %eax1042; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1043; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1044; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1045; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1046; NOSSE-NEXT:    shll $16, %eax1047; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1048; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1049; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1050; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1051; NOSSE-NEXT:    shll $16, %eax1052; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1053; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1054; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1055; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1056; NOSSE-NEXT:    shll $16, %eax1057; NOSSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1058; NOSSE-NEXT:    flds {{[0-9]+}}(%esp)1059; NOSSE-NEXT:    fstps {{[0-9]+}}(%esp)1060; NOSSE-NEXT:    calll returns_v16bf16@PLT1061; NOSSE-NEXT:    subl $4, %esp1062; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1063; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1064; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1065; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1066; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1067; NOSSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1068; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edi1069; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx1070; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx1071; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1072; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edx1073; NOSSE-NEXT:    movl %edx, 28(%esi)1074; NOSSE-NEXT:    movl %eax, 24(%esi)1075; NOSSE-NEXT:    movl %ecx, 20(%esi)1076; NOSSE-NEXT:    movl %ebx, 16(%esi)1077; NOSSE-NEXT:    movl %edi, 12(%esi)1078; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1079; NOSSE-NEXT:    movl %eax, 8(%esi)1080; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1081; NOSSE-NEXT:    movl %eax, 4(%esi)1082; NOSSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1083; NOSSE-NEXT:    movl %eax, (%esi)1084; NOSSE-NEXT:    leal -12(%ebp), %esp1085; NOSSE-NEXT:    popl %esi1086; NOSSE-NEXT:    popl %edi1087; NOSSE-NEXT:    popl %ebx1088; NOSSE-NEXT:    popl %ebp1089; NOSSE-NEXT:    retl1090;1091; SSE-LABEL: call_ret_v16bf16:1092; SSE:       # %bb.0:1093; SSE-NEXT:    pushl %ebp1094; SSE-NEXT:    movl %esp, %ebp1095; SSE-NEXT:    pushl %ebx1096; SSE-NEXT:    pushl %edi1097; SSE-NEXT:    pushl %esi1098; SSE-NEXT:    andl $-32, %esp1099; SSE-NEXT:    subl $256, %esp # imm = 0x1001100; SSE-NEXT:    movl 8(%ebp), %esi1101; SSE-NEXT:    movzwl 2(%esi), %eax1102; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1103; SSE-NEXT:    movl (%esi), %eax1104; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1105; SSE-NEXT:    movl 4(%esi), %eax1106; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1107; SSE-NEXT:    movzwl 6(%esi), %eax1108; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1109; SSE-NEXT:    movl 8(%esi), %eax1110; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1111; SSE-NEXT:    movzwl 10(%esi), %eax1112; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1113; SSE-NEXT:    movl 12(%esi), %eax1114; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1115; SSE-NEXT:    movzwl 14(%esi), %eax1116; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1117; SSE-NEXT:    movl 16(%esi), %eax1118; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1119; SSE-NEXT:    movzwl 18(%esi), %eax1120; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1121; SSE-NEXT:    movl 20(%esi), %eax1122; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1123; SSE-NEXT:    movzwl 22(%esi), %eax1124; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1125; SSE-NEXT:    movl 24(%esi), %edi1126; SSE-NEXT:    movzwl 26(%esi), %edx1127; SSE-NEXT:    movl 28(%esi), %ecx1128; SSE-NEXT:    movzwl 30(%esi), %eax1129; SSE-NEXT:    leal {{[0-9]+}}(%esp), %ebx1130; SSE-NEXT:    movl %ebx, (%esp)1131; SSE-NEXT:    shll $16, %eax1132; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1133; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1134; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1135; SSE-NEXT:    shll $16, %ecx1136; SSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)1137; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1138; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1139; SSE-NEXT:    shll $16, %edx1140; SSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)1141; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1142; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1143; SSE-NEXT:    shll $16, %edi1144; SSE-NEXT:    movl %edi, {{[0-9]+}}(%esp)1145; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1146; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1147; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1148; SSE-NEXT:    shll $16, %eax1149; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1150; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1151; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1152; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1153; SSE-NEXT:    shll $16, %eax1154; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1155; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1156; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1157; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1158; SSE-NEXT:    shll $16, %eax1159; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1160; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1161; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1162; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1163; SSE-NEXT:    shll $16, %eax1164; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1165; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1166; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1167; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1168; SSE-NEXT:    shll $16, %eax1169; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1170; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1171; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1172; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1173; SSE-NEXT:    shll $16, %eax1174; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1175; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1176; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1177; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1178; SSE-NEXT:    shll $16, %eax1179; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1180; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1181; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1182; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1183; SSE-NEXT:    shll $16, %eax1184; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1185; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1186; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1187; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1188; SSE-NEXT:    shll $16, %eax1189; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1190; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1191; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1192; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1193; SSE-NEXT:    shll $16, %eax1194; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1195; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1196; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1197; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1198; SSE-NEXT:    shll $16, %eax1199; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1200; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1201; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1202; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1203; SSE-NEXT:    shll $16, %eax1204; SSE-NEXT:    movl %eax, {{[0-9]+}}(%esp)1205; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1206; SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)1207; SSE-NEXT:    calll returns_v16bf16@PLT1208; SSE-NEXT:    subl $4, %esp1209; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1210; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1211; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1212; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1213; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1214; SSE-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1215; SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi1216; SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx1217; SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx1218; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax1219; SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx1220; SSE-NEXT:    movl %edx, 28(%esi)1221; SSE-NEXT:    movl %eax, 24(%esi)1222; SSE-NEXT:    movl %ecx, 20(%esi)1223; SSE-NEXT:    movl %ebx, 16(%esi)1224; SSE-NEXT:    movl %edi, 12(%esi)1225; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1226; SSE-NEXT:    movl %eax, 8(%esi)1227; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1228; SSE-NEXT:    movl %eax, 4(%esi)1229; SSE-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1230; SSE-NEXT:    movl %eax, (%esi)1231; SSE-NEXT:    leal -12(%ebp), %esp1232; SSE-NEXT:    popl %esi1233; SSE-NEXT:    popl %edi1234; SSE-NEXT:    popl %ebx1235; SSE-NEXT:    popl %ebp1236; SSE-NEXT:    retl1237  %val = load <16 x bfloat>, ptr %ptr1238  %bf16 = call <16 x bfloat> @returns_v16bf16(<16 x bfloat> %val)1239  store <16 x bfloat> %bf16, ptr %ptr1240  ret void1241}1242 1243attributes #0 = { nounwind }1244