1451 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-linux-gnu < %s -mattr=fma | FileCheck %s3 4; Basic test coverage for FREM5 6define void @frem_f16(half %a0, half %a1, ptr%p3) nounwind {7; CHECK-LABEL: frem_f16:8; CHECK: # %bb.0:9; CHECK-NEXT: pushq %rbx10; CHECK-NEXT: subq $16, %rsp11; CHECK-NEXT: movq %rdi, %rbx12; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill13; CHECK-NEXT: vmovaps %xmm1, %xmm014; CHECK-NEXT: callq __extendhfsf2@PLT15; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill16; CHECK-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload17; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero18; CHECK-NEXT: callq __extendhfsf2@PLT19; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload20; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero21; CHECK-NEXT: callq fmodf@PLT22; CHECK-NEXT: callq __truncsfhf2@PLT23; CHECK-NEXT: vpextrw $0, %xmm0, (%rbx)24; CHECK-NEXT: addq $16, %rsp25; CHECK-NEXT: popq %rbx26; CHECK-NEXT: retq27 %frem = frem half %a0, %a128 store half %frem, ptr%p329 ret void30}31 32define void @frem_f32(float %a0, float %a1, ptr%p3) nounwind {33; CHECK-LABEL: frem_f32:34; CHECK: # %bb.0:35; CHECK-NEXT: pushq %rbx36; CHECK-NEXT: movq %rdi, %rbx37; CHECK-NEXT: callq fmodf@PLT38; CHECK-NEXT: vmovss %xmm0, (%rbx)39; CHECK-NEXT: popq %rbx40; CHECK-NEXT: retq41 %frem = frem float %a0, %a142 store float %frem, ptr%p343 ret void44}45 46define void @frem_f64(double %a0, double %a1, ptr%p3) nounwind {47; CHECK-LABEL: frem_f64:48; CHECK: # %bb.0:49; CHECK-NEXT: pushq %rbx50; CHECK-NEXT: movq %rdi, %rbx51; CHECK-NEXT: callq fmod@PLT52; CHECK-NEXT: vmovsd %xmm0, (%rbx)53; CHECK-NEXT: popq %rbx54; CHECK-NEXT: retq55 %frem = frem double %a0, %a156 store double %frem, ptr%p357 ret void58}59 60define void @frem_f80(x86_fp80 %a0, x86_fp80 %a1, ptr%p3) nounwind {61; CHECK-LABEL: frem_f80:62; CHECK: # %bb.0:63; CHECK-NEXT: pushq %rbx64; CHECK-NEXT: subq $32, %rsp65; CHECK-NEXT: movq %rdi, %rbx66; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)67; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)68; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp)69; CHECK-NEXT: fstpt (%rsp)70; CHECK-NEXT: callq fmodl@PLT71; CHECK-NEXT: fstpt (%rbx)72; CHECK-NEXT: addq $32, %rsp73; CHECK-NEXT: popq %rbx74; CHECK-NEXT: retq75 %frem = frem x86_fp80 %a0, %a176 store x86_fp80 %frem, ptr%p377 ret void78}79 80define void @frem_f128(fp128 %a0, fp128 %a1, ptr%p3) nounwind {81; CHECK-LABEL: frem_f128:82; CHECK: # %bb.0:83; CHECK-NEXT: pushq %rbx84; CHECK-NEXT: movq %rdi, %rbx85; CHECK-NEXT: callq fmodf128@PLT86; CHECK-NEXT: vmovaps %xmm0, (%rbx)87; CHECK-NEXT: popq %rbx88; CHECK-NEXT: retq89 %frem = frem fp128 %a0, %a190 store fp128 %frem, ptr%p391 ret void92}93 94define void @frem_v16f32(<16 x float> %a0, <16 x float> %a1, ptr%p3) nounwind {95; CHECK-LABEL: frem_v16f32:96; CHECK: # %bb.0:97; CHECK-NEXT: pushq %rbx98; CHECK-NEXT: subq $160, %rsp99; CHECK-NEXT: movq %rdi, %rbx100; CHECK-NEXT: vmovups %ymm3, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill101; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill102; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill103; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill104; CHECK-NEXT: vmovaps %xmm1, %xmm0105; CHECK-NEXT: vmovaps %xmm3, %xmm1106; CHECK-NEXT: vzeroupper107; CHECK-NEXT: callq fmodf@PLT108; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill109; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload110; CHECK-NEXT: # xmm0 = mem[1,1,3,3]111; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload112; CHECK-NEXT: # xmm1 = mem[1,1,3,3]113; CHECK-NEXT: callq fmodf@PLT114; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload115; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]116; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill117; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload118; CHECK-NEXT: # xmm0 = mem[1,0]119; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload120; CHECK-NEXT: # xmm1 = mem[1,0]121; CHECK-NEXT: callq fmodf@PLT122; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload123; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]124; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill125; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload126; CHECK-NEXT: # xmm0 = mem[3,3,3,3]127; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload128; CHECK-NEXT: # xmm1 = mem[3,3,3,3]129; CHECK-NEXT: callq fmodf@PLT130; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload131; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]132; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill133; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload134; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2135; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill136; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload137; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1138; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill139; CHECK-NEXT: vmovaps %xmm2, %xmm0140; CHECK-NEXT: vzeroupper141; CHECK-NEXT: callq fmodf@PLT142; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill143; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload144; CHECK-NEXT: # xmm0 = mem[1,1,3,3]145; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload146; CHECK-NEXT: # xmm1 = mem[1,1,3,3]147; CHECK-NEXT: callq fmodf@PLT148; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload149; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]150; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill151; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload152; CHECK-NEXT: # xmm0 = mem[1,0]153; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload154; CHECK-NEXT: # xmm1 = mem[1,0]155; CHECK-NEXT: callq fmodf@PLT156; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload157; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]158; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill159; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload160; CHECK-NEXT: # xmm0 = mem[3,3,3,3]161; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload162; CHECK-NEXT: # xmm1 = mem[3,3,3,3]163; CHECK-NEXT: callq fmodf@PLT164; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload165; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]166; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill167; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload168; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0169; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload170; CHECK-NEXT: # kill: def $xmm1 killed $xmm1 killed $ymm1171; CHECK-NEXT: vzeroupper172; CHECK-NEXT: callq fmodf@PLT173; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill174; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload175; CHECK-NEXT: # xmm0 = mem[1,1,3,3]176; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload177; CHECK-NEXT: # xmm1 = mem[1,1,3,3]178; CHECK-NEXT: callq fmodf@PLT179; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload180; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]181; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill182; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload183; CHECK-NEXT: # xmm0 = mem[1,0]184; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload185; CHECK-NEXT: # xmm1 = mem[1,0]186; CHECK-NEXT: callq fmodf@PLT187; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload188; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]189; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill190; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload191; CHECK-NEXT: # xmm0 = mem[3,3,3,3]192; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload193; CHECK-NEXT: # xmm1 = mem[3,3,3,3]194; CHECK-NEXT: callq fmodf@PLT195; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload196; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]197; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill198; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload199; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2200; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill201; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload202; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1203; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill204; CHECK-NEXT: vmovaps %xmm2, %xmm0205; CHECK-NEXT: vzeroupper206; CHECK-NEXT: callq fmodf@PLT207; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill208; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload209; CHECK-NEXT: # xmm0 = mem[1,1,3,3]210; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload211; CHECK-NEXT: # xmm1 = mem[1,1,3,3]212; CHECK-NEXT: callq fmodf@PLT213; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload214; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]215; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill216; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload217; CHECK-NEXT: # xmm0 = mem[1,0]218; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload219; CHECK-NEXT: # xmm1 = mem[1,0]220; CHECK-NEXT: callq fmodf@PLT221; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload222; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]223; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill224; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload225; CHECK-NEXT: # xmm0 = mem[3,3,3,3]226; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload227; CHECK-NEXT: # xmm1 = mem[3,3,3,3]228; CHECK-NEXT: callq fmodf@PLT229; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload230; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]231; CHECK-NEXT: vmovaps %xmm0, 16(%rbx)232; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload233; CHECK-NEXT: vmovaps %xmm0, (%rbx)234; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload235; CHECK-NEXT: vmovaps %xmm0, 48(%rbx)236; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload237; CHECK-NEXT: vmovaps %xmm0, 32(%rbx)238; CHECK-NEXT: addq $160, %rsp239; CHECK-NEXT: popq %rbx240; CHECK-NEXT: retq241 %frem = frem <16 x float> %a0, %a1242 store <16 x float> %frem, ptr%p3243 ret void244}245 246define void @frem_v8f32(<8 x float> %a0, <8 x float> %a1, ptr%p3) nounwind {247; CHECK-LABEL: frem_v8f32:248; CHECK: # %bb.0:249; CHECK-NEXT: pushq %rbx250; CHECK-NEXT: subq $96, %rsp251; CHECK-NEXT: movq %rdi, %rbx252; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill253; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill254; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0255; CHECK-NEXT: # kill: def $xmm1 killed $xmm1 killed $ymm1256; CHECK-NEXT: vzeroupper257; CHECK-NEXT: callq fmodf@PLT258; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill259; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload260; CHECK-NEXT: # xmm0 = mem[1,1,3,3]261; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload262; CHECK-NEXT: # xmm1 = mem[1,1,3,3]263; CHECK-NEXT: callq fmodf@PLT264; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload265; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]266; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill267; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload268; CHECK-NEXT: # xmm0 = mem[1,0]269; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload270; CHECK-NEXT: # xmm1 = mem[1,0]271; CHECK-NEXT: callq fmodf@PLT272; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload273; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]274; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill275; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload276; CHECK-NEXT: # xmm0 = mem[3,3,3,3]277; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload278; CHECK-NEXT: # xmm1 = mem[3,3,3,3]279; CHECK-NEXT: callq fmodf@PLT280; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload281; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]282; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill283; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload284; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2285; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill286; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload287; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1288; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill289; CHECK-NEXT: vmovaps %xmm2, %xmm0290; CHECK-NEXT: vzeroupper291; CHECK-NEXT: callq fmodf@PLT292; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill293; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload294; CHECK-NEXT: # xmm0 = mem[1,1,3,3]295; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload296; CHECK-NEXT: # xmm1 = mem[1,1,3,3]297; CHECK-NEXT: callq fmodf@PLT298; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload299; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]300; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill301; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload302; CHECK-NEXT: # xmm0 = mem[1,0]303; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload304; CHECK-NEXT: # xmm1 = mem[1,0]305; CHECK-NEXT: callq fmodf@PLT306; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload307; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]308; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill309; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload310; CHECK-NEXT: # xmm0 = mem[3,3,3,3]311; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload312; CHECK-NEXT: # xmm1 = mem[3,3,3,3]313; CHECK-NEXT: callq fmodf@PLT314; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload315; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]316; CHECK-NEXT: vmovaps %xmm0, 16(%rbx)317; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload318; CHECK-NEXT: vmovaps %xmm0, (%rbx)319; CHECK-NEXT: addq $96, %rsp320; CHECK-NEXT: popq %rbx321; CHECK-NEXT: retq322 %frem = frem <8 x float> %a0, %a1323 store <8 x float> %frem, ptr%p3324 ret void325}326 327define void @frem_v4f32(<4 x float> %a0, <4 x float> %a1, ptr%p3) nounwind {328; CHECK-LABEL: frem_v4f32:329; CHECK: # %bb.0:330; CHECK-NEXT: pushq %rbx331; CHECK-NEXT: subq $48, %rsp332; CHECK-NEXT: movq %rdi, %rbx333; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill334; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill335; CHECK-NEXT: callq fmodf@PLT336; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill337; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload338; CHECK-NEXT: # xmm0 = mem[1,1,3,3]339; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload340; CHECK-NEXT: # xmm1 = mem[1,1,3,3]341; CHECK-NEXT: callq fmodf@PLT342; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload343; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]344; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill345; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload346; CHECK-NEXT: # xmm0 = mem[1,0]347; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload348; CHECK-NEXT: # xmm1 = mem[1,0]349; CHECK-NEXT: callq fmodf@PLT350; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload351; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]352; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill353; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload354; CHECK-NEXT: # xmm0 = mem[3,3,3,3]355; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload356; CHECK-NEXT: # xmm1 = mem[3,3,3,3]357; CHECK-NEXT: callq fmodf@PLT358; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload359; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]360; CHECK-NEXT: vmovaps %xmm0, (%rbx)361; CHECK-NEXT: addq $48, %rsp362; CHECK-NEXT: popq %rbx363; CHECK-NEXT: retq364 %frem = frem <4 x float> %a0, %a1365 store <4 x float> %frem, ptr%p3366 ret void367}368 369define void @frem_v8f64(<8 x double> %a0, <8 x double> %a1, ptr%p3) nounwind {370; CHECK-LABEL: frem_v8f64:371; CHECK: # %bb.0:372; CHECK-NEXT: pushq %rbx373; CHECK-NEXT: subq $160, %rsp374; CHECK-NEXT: movq %rdi, %rbx375; CHECK-NEXT: vmovups %ymm3, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill376; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill377; CHECK-NEXT: vmovups %ymm1, (%rsp) # 32-byte Spill378; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill379; CHECK-NEXT: vmovaps %xmm1, %xmm0380; CHECK-NEXT: vmovaps %xmm3, %xmm1381; CHECK-NEXT: vzeroupper382; CHECK-NEXT: callq fmod@PLT383; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill384; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload385; CHECK-NEXT: # xmm0 = mem[1,0]386; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload387; CHECK-NEXT: # xmm1 = mem[1,0]388; CHECK-NEXT: callq fmod@PLT389; CHECK-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload390; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]391; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill392; CHECK-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload393; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2394; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill395; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload396; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1397; CHECK-NEXT: vmovaps %xmm1, (%rsp) # 16-byte Spill398; CHECK-NEXT: vmovaps %xmm2, %xmm0399; CHECK-NEXT: vzeroupper400; CHECK-NEXT: callq fmod@PLT401; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill402; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload403; CHECK-NEXT: # xmm0 = mem[1,0]404; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm1 # 16-byte Folded Reload405; CHECK-NEXT: # xmm1 = mem[1,0]406; CHECK-NEXT: callq fmod@PLT407; CHECK-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload408; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]409; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill410; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload411; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0412; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload413; CHECK-NEXT: # kill: def $xmm1 killed $xmm1 killed $ymm1414; CHECK-NEXT: vzeroupper415; CHECK-NEXT: callq fmod@PLT416; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill417; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload418; CHECK-NEXT: # xmm0 = mem[1,0]419; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload420; CHECK-NEXT: # xmm1 = mem[1,0]421; CHECK-NEXT: callq fmod@PLT422; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload423; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]424; CHECK-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill425; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload426; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2427; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill428; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload429; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1430; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill431; CHECK-NEXT: vmovaps %xmm2, %xmm0432; CHECK-NEXT: vzeroupper433; CHECK-NEXT: callq fmod@PLT434; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill435; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload436; CHECK-NEXT: # xmm0 = mem[1,0]437; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload438; CHECK-NEXT: # xmm1 = mem[1,0]439; CHECK-NEXT: callq fmod@PLT440; CHECK-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload441; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]442; CHECK-NEXT: vmovapd %xmm0, 16(%rbx)443; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload444; CHECK-NEXT: vmovaps %xmm0, (%rbx)445; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload446; CHECK-NEXT: vmovaps %xmm0, 48(%rbx)447; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload448; CHECK-NEXT: vmovaps %xmm0, 32(%rbx)449; CHECK-NEXT: addq $160, %rsp450; CHECK-NEXT: popq %rbx451; CHECK-NEXT: retq452 %frem = frem <8 x double> %a0, %a1453 store <8 x double> %frem, ptr%p3454 ret void455}456 457define void @frem_v4f64(<4 x double> %a0, <4 x double> %a1, ptr%p3) nounwind {458; CHECK-LABEL: frem_v4f64:459; CHECK: # %bb.0:460; CHECK-NEXT: pushq %rbx461; CHECK-NEXT: subq $96, %rsp462; CHECK-NEXT: movq %rdi, %rbx463; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill464; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill465; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0466; CHECK-NEXT: # kill: def $xmm1 killed $xmm1 killed $ymm1467; CHECK-NEXT: vzeroupper468; CHECK-NEXT: callq fmod@PLT469; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill470; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload471; CHECK-NEXT: # xmm0 = mem[1,0]472; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload473; CHECK-NEXT: # xmm1 = mem[1,0]474; CHECK-NEXT: callq fmod@PLT475; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload476; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]477; CHECK-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill478; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload479; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2480; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill481; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload482; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1483; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill484; CHECK-NEXT: vmovaps %xmm2, %xmm0485; CHECK-NEXT: vzeroupper486; CHECK-NEXT: callq fmod@PLT487; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill488; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload489; CHECK-NEXT: # xmm0 = mem[1,0]490; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload491; CHECK-NEXT: # xmm1 = mem[1,0]492; CHECK-NEXT: callq fmod@PLT493; CHECK-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload494; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]495; CHECK-NEXT: vmovapd %xmm0, 16(%rbx)496; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload497; CHECK-NEXT: vmovaps %xmm0, (%rbx)498; CHECK-NEXT: addq $96, %rsp499; CHECK-NEXT: popq %rbx500; CHECK-NEXT: retq501 %frem = frem <4 x double> %a0, %a1502 store <4 x double> %frem, ptr%p3503 ret void504}505 506define void @frem_v2f64(<2 x double> %a0, <2 x double> %a1, ptr%p3) nounwind {507; CHECK-LABEL: frem_v2f64:508; CHECK: # %bb.0:509; CHECK-NEXT: pushq %rbx510; CHECK-NEXT: subq $48, %rsp511; CHECK-NEXT: movq %rdi, %rbx512; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill513; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill514; CHECK-NEXT: callq fmod@PLT515; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill516; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload517; CHECK-NEXT: # xmm0 = mem[1,0]518; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload519; CHECK-NEXT: # xmm1 = mem[1,0]520; CHECK-NEXT: callq fmod@PLT521; CHECK-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload522; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]523; CHECK-NEXT: vmovapd %xmm0, (%rbx)524; CHECK-NEXT: addq $48, %rsp525; CHECK-NEXT: popq %rbx526; CHECK-NEXT: retq527 %frem = frem <2 x double> %a0, %a1528 store <2 x double> %frem, ptr%p3529 ret void530}531 532define void @frem_v32f16(<32 x half> %a0, <32 x half> %a1, ptr%p3) nounwind {533; CHECK-LABEL: frem_v32f16:534; CHECK: # %bb.0:535; CHECK-NEXT: pushq %rbx536; CHECK-NEXT: subq $224, %rsp537; CHECK-NEXT: movq %rdi, %rbx538; CHECK-NEXT: vmovups %ymm3, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill539; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill540; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill541; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill542; CHECK-NEXT: vextractf128 $1, %ymm2, %xmm0543; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill544; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero545; CHECK-NEXT: vzeroupper546; CHECK-NEXT: callq __extendhfsf2@PLT547; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill548; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload549; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0550; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill551; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero552; CHECK-NEXT: vzeroupper553; CHECK-NEXT: callq __extendhfsf2@PLT554; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload555; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero556; CHECK-NEXT: callq fmodf@PLT557; CHECK-NEXT: callq __truncsfhf2@PLT558; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill559; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload560; CHECK-NEXT: # xmm0 = mem[3,3,3,3]561; CHECK-NEXT: callq __extendhfsf2@PLT562; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill563; CHECK-NEXT: vpshufd $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload564; CHECK-NEXT: # xmm0 = mem[3,3,3,3]565; CHECK-NEXT: callq __extendhfsf2@PLT566; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload567; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero568; CHECK-NEXT: callq fmodf@PLT569; CHECK-NEXT: callq __truncsfhf2@PLT570; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload571; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]572; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill573; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload574; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero575; CHECK-NEXT: callq __extendhfsf2@PLT576; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill577; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload578; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero579; CHECK-NEXT: callq __extendhfsf2@PLT580; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload581; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero582; CHECK-NEXT: callq fmodf@PLT583; CHECK-NEXT: callq __truncsfhf2@PLT584; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill585; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload586; CHECK-NEXT: # xmm0 = mem[1,0]587; CHECK-NEXT: callq __extendhfsf2@PLT588; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill589; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload590; CHECK-NEXT: # xmm0 = mem[1,0]591; CHECK-NEXT: callq __extendhfsf2@PLT592; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload593; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero594; CHECK-NEXT: callq fmodf@PLT595; CHECK-NEXT: callq __truncsfhf2@PLT596; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload597; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]598; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload599; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]600; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill601; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload602; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0603; CHECK-NEXT: callq __extendhfsf2@PLT604; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill605; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload606; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0607; CHECK-NEXT: callq __extendhfsf2@PLT608; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload609; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero610; CHECK-NEXT: callq fmodf@PLT611; CHECK-NEXT: callq __truncsfhf2@PLT612; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill613; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload614; CHECK-NEXT: # xmm0 = mem[1,1,3,3]615; CHECK-NEXT: callq __extendhfsf2@PLT616; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill617; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload618; CHECK-NEXT: # xmm0 = mem[1,1,3,3]619; CHECK-NEXT: callq __extendhfsf2@PLT620; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload621; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero622; CHECK-NEXT: callq fmodf@PLT623; CHECK-NEXT: callq __truncsfhf2@PLT624; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload625; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]626; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill627; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload628; CHECK-NEXT: callq __extendhfsf2@PLT629; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill630; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload631; CHECK-NEXT: callq __extendhfsf2@PLT632; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload633; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero634; CHECK-NEXT: callq fmodf@PLT635; CHECK-NEXT: callq __truncsfhf2@PLT636; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill637; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload638; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0639; CHECK-NEXT: callq __extendhfsf2@PLT640; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill641; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload642; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0643; CHECK-NEXT: callq __extendhfsf2@PLT644; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload645; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero646; CHECK-NEXT: callq fmodf@PLT647; CHECK-NEXT: callq __truncsfhf2@PLT648; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload649; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]650; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload651; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]652; CHECK-NEXT: vpunpcklqdq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload653; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]654; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill655; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload656; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero657; CHECK-NEXT: vzeroupper658; CHECK-NEXT: callq __extendhfsf2@PLT659; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill660; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload661; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero662; CHECK-NEXT: vzeroupper663; CHECK-NEXT: callq __extendhfsf2@PLT664; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload665; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero666; CHECK-NEXT: callq fmodf@PLT667; CHECK-NEXT: callq __truncsfhf2@PLT668; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill669; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload670; CHECK-NEXT: # xmm0 = mem[3,3,3,3]671; CHECK-NEXT: callq __extendhfsf2@PLT672; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill673; CHECK-NEXT: vpshufd $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload674; CHECK-NEXT: # xmm0 = mem[3,3,3,3]675; CHECK-NEXT: callq __extendhfsf2@PLT676; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload677; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero678; CHECK-NEXT: callq fmodf@PLT679; CHECK-NEXT: callq __truncsfhf2@PLT680; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload681; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]682; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill683; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload684; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero685; CHECK-NEXT: vzeroupper686; CHECK-NEXT: callq __extendhfsf2@PLT687; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill688; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload689; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero690; CHECK-NEXT: vzeroupper691; CHECK-NEXT: callq __extendhfsf2@PLT692; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload693; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero694; CHECK-NEXT: callq fmodf@PLT695; CHECK-NEXT: callq __truncsfhf2@PLT696; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill697; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload698; CHECK-NEXT: # xmm0 = mem[1,0]699; CHECK-NEXT: callq __extendhfsf2@PLT700; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill701; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload702; CHECK-NEXT: # xmm0 = mem[1,0]703; CHECK-NEXT: callq __extendhfsf2@PLT704; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload705; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero706; CHECK-NEXT: callq fmodf@PLT707; CHECK-NEXT: callq __truncsfhf2@PLT708; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload709; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]710; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload711; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]712; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill713; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload714; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0715; CHECK-NEXT: vzeroupper716; CHECK-NEXT: callq __extendhfsf2@PLT717; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill718; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload719; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0720; CHECK-NEXT: vzeroupper721; CHECK-NEXT: callq __extendhfsf2@PLT722; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload723; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero724; CHECK-NEXT: callq fmodf@PLT725; CHECK-NEXT: callq __truncsfhf2@PLT726; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill727; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload728; CHECK-NEXT: # xmm0 = mem[1,1,3,3]729; CHECK-NEXT: callq __extendhfsf2@PLT730; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill731; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload732; CHECK-NEXT: # xmm0 = mem[1,1,3,3]733; CHECK-NEXT: callq __extendhfsf2@PLT734; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload735; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero736; CHECK-NEXT: callq fmodf@PLT737; CHECK-NEXT: callq __truncsfhf2@PLT738; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload739; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]740; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill741; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload742; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0743; CHECK-NEXT: vzeroupper744; CHECK-NEXT: callq __extendhfsf2@PLT745; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill746; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload747; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0748; CHECK-NEXT: vzeroupper749; CHECK-NEXT: callq __extendhfsf2@PLT750; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload751; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero752; CHECK-NEXT: callq fmodf@PLT753; CHECK-NEXT: callq __truncsfhf2@PLT754; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill755; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload756; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0757; CHECK-NEXT: vzeroupper758; CHECK-NEXT: callq __extendhfsf2@PLT759; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill760; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload761; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0762; CHECK-NEXT: vzeroupper763; CHECK-NEXT: callq __extendhfsf2@PLT764; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload765; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero766; CHECK-NEXT: callq fmodf@PLT767; CHECK-NEXT: callq __truncsfhf2@PLT768; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload769; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]770; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload771; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]772; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload773; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]774; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload775; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill776; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload777; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0778; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill779; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero780; CHECK-NEXT: vzeroupper781; CHECK-NEXT: callq __extendhfsf2@PLT782; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill783; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload784; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0785; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill786; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero787; CHECK-NEXT: vzeroupper788; CHECK-NEXT: callq __extendhfsf2@PLT789; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload790; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero791; CHECK-NEXT: callq fmodf@PLT792; CHECK-NEXT: callq __truncsfhf2@PLT793; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill794; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload795; CHECK-NEXT: # xmm0 = mem[3,3,3,3]796; CHECK-NEXT: callq __extendhfsf2@PLT797; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill798; CHECK-NEXT: vpshufd $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload799; CHECK-NEXT: # xmm0 = mem[3,3,3,3]800; CHECK-NEXT: callq __extendhfsf2@PLT801; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload802; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero803; CHECK-NEXT: callq fmodf@PLT804; CHECK-NEXT: callq __truncsfhf2@PLT805; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload806; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]807; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill808; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload809; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero810; CHECK-NEXT: callq __extendhfsf2@PLT811; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill812; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload813; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero814; CHECK-NEXT: callq __extendhfsf2@PLT815; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload816; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero817; CHECK-NEXT: callq fmodf@PLT818; CHECK-NEXT: callq __truncsfhf2@PLT819; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill820; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload821; CHECK-NEXT: # xmm0 = mem[1,0]822; CHECK-NEXT: callq __extendhfsf2@PLT823; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill824; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload825; CHECK-NEXT: # xmm0 = mem[1,0]826; CHECK-NEXT: callq __extendhfsf2@PLT827; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload828; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero829; CHECK-NEXT: callq fmodf@PLT830; CHECK-NEXT: callq __truncsfhf2@PLT831; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload832; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]833; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload834; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]835; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill836; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload837; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0838; CHECK-NEXT: callq __extendhfsf2@PLT839; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill840; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload841; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0842; CHECK-NEXT: callq __extendhfsf2@PLT843; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload844; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero845; CHECK-NEXT: callq fmodf@PLT846; CHECK-NEXT: callq __truncsfhf2@PLT847; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill848; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload849; CHECK-NEXT: # xmm0 = mem[1,1,3,3]850; CHECK-NEXT: callq __extendhfsf2@PLT851; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill852; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload853; CHECK-NEXT: # xmm0 = mem[1,1,3,3]854; CHECK-NEXT: callq __extendhfsf2@PLT855; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload856; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero857; CHECK-NEXT: callq fmodf@PLT858; CHECK-NEXT: callq __truncsfhf2@PLT859; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload860; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]861; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill862; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload863; CHECK-NEXT: callq __extendhfsf2@PLT864; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill865; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload866; CHECK-NEXT: callq __extendhfsf2@PLT867; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload868; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero869; CHECK-NEXT: callq fmodf@PLT870; CHECK-NEXT: callq __truncsfhf2@PLT871; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill872; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload873; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0874; CHECK-NEXT: callq __extendhfsf2@PLT875; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill876; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload877; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0878; CHECK-NEXT: callq __extendhfsf2@PLT879; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload880; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero881; CHECK-NEXT: callq fmodf@PLT882; CHECK-NEXT: callq __truncsfhf2@PLT883; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload884; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]885; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload886; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]887; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload888; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]889; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill890; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload891; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero892; CHECK-NEXT: vzeroupper893; CHECK-NEXT: callq __extendhfsf2@PLT894; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill895; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload896; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero897; CHECK-NEXT: vzeroupper898; CHECK-NEXT: callq __extendhfsf2@PLT899; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload900; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero901; CHECK-NEXT: callq fmodf@PLT902; CHECK-NEXT: callq __truncsfhf2@PLT903; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill904; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload905; CHECK-NEXT: # xmm0 = mem[3,3,3,3]906; CHECK-NEXT: callq __extendhfsf2@PLT907; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill908; CHECK-NEXT: vpshufd $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload909; CHECK-NEXT: # xmm0 = mem[3,3,3,3]910; CHECK-NEXT: callq __extendhfsf2@PLT911; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload912; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero913; CHECK-NEXT: callq fmodf@PLT914; CHECK-NEXT: callq __truncsfhf2@PLT915; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload916; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]917; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill918; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload919; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero920; CHECK-NEXT: vzeroupper921; CHECK-NEXT: callq __extendhfsf2@PLT922; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill923; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload924; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero925; CHECK-NEXT: vzeroupper926; CHECK-NEXT: callq __extendhfsf2@PLT927; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload928; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero929; CHECK-NEXT: callq fmodf@PLT930; CHECK-NEXT: callq __truncsfhf2@PLT931; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill932; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload933; CHECK-NEXT: # xmm0 = mem[1,0]934; CHECK-NEXT: callq __extendhfsf2@PLT935; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill936; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload937; CHECK-NEXT: # xmm0 = mem[1,0]938; CHECK-NEXT: callq __extendhfsf2@PLT939; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload940; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero941; CHECK-NEXT: callq fmodf@PLT942; CHECK-NEXT: callq __truncsfhf2@PLT943; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload944; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]945; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload946; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]947; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill948; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload949; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0950; CHECK-NEXT: vzeroupper951; CHECK-NEXT: callq __extendhfsf2@PLT952; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill953; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload954; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm0955; CHECK-NEXT: vzeroupper956; CHECK-NEXT: callq __extendhfsf2@PLT957; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload958; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero959; CHECK-NEXT: callq fmodf@PLT960; CHECK-NEXT: callq __truncsfhf2@PLT961; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill962; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload963; CHECK-NEXT: # xmm0 = mem[1,1,3,3]964; CHECK-NEXT: callq __extendhfsf2@PLT965; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill966; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload967; CHECK-NEXT: # xmm0 = mem[1,1,3,3]968; CHECK-NEXT: callq __extendhfsf2@PLT969; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload970; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero971; CHECK-NEXT: callq fmodf@PLT972; CHECK-NEXT: callq __truncsfhf2@PLT973; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload974; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]975; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill976; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload977; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0978; CHECK-NEXT: vzeroupper979; CHECK-NEXT: callq __extendhfsf2@PLT980; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill981; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload982; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0983; CHECK-NEXT: vzeroupper984; CHECK-NEXT: callq __extendhfsf2@PLT985; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload986; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero987; CHECK-NEXT: callq fmodf@PLT988; CHECK-NEXT: callq __truncsfhf2@PLT989; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill990; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload991; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0992; CHECK-NEXT: vzeroupper993; CHECK-NEXT: callq __extendhfsf2@PLT994; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill995; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload996; CHECK-NEXT: vpsrld $16, %xmm0, %xmm0997; CHECK-NEXT: vzeroupper998; CHECK-NEXT: callq __extendhfsf2@PLT999; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1000; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1001; CHECK-NEXT: callq fmodf@PLT1002; CHECK-NEXT: callq __truncsfhf2@PLT1003; CHECK-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload1004; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1005; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1006; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1007; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1008; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]1009; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1010; CHECK-NEXT: vmovaps %ymm0, 32(%rbx)1011; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1012; CHECK-NEXT: vmovaps %ymm0, (%rbx)1013; CHECK-NEXT: addq $224, %rsp1014; CHECK-NEXT: popq %rbx1015; CHECK-NEXT: vzeroupper1016; CHECK-NEXT: retq1017 %frem = frem <32 x half> %a0, %a11018 store <32 x half> %frem, ptr%p31019 ret void1020}1021 1022define void @frem_v16f16(<16 x half> %a0, <16 x half> %a1, ptr%p3) nounwind {1023; CHECK-LABEL: frem_v16f16:1024; CHECK: # %bb.0:1025; CHECK-NEXT: pushq %rbx1026; CHECK-NEXT: subq $144, %rsp1027; CHECK-NEXT: movq %rdi, %rbx1028; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1029; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1030; CHECK-NEXT: vextractf128 $1, %ymm1, %xmm01031; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1032; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1033; CHECK-NEXT: vzeroupper1034; CHECK-NEXT: callq __extendhfsf2@PLT1035; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1036; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1037; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01038; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1039; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1040; CHECK-NEXT: vzeroupper1041; CHECK-NEXT: callq __extendhfsf2@PLT1042; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1043; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1044; CHECK-NEXT: callq fmodf@PLT1045; CHECK-NEXT: callq __truncsfhf2@PLT1046; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1047; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1048; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1049; CHECK-NEXT: callq __extendhfsf2@PLT1050; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill1051; CHECK-NEXT: vpshufd $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1052; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1053; CHECK-NEXT: callq __extendhfsf2@PLT1054; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1055; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1056; CHECK-NEXT: callq fmodf@PLT1057; CHECK-NEXT: callq __truncsfhf2@PLT1058; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1059; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1060; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1061; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1062; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1063; CHECK-NEXT: callq __extendhfsf2@PLT1064; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill1065; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1066; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1067; CHECK-NEXT: callq __extendhfsf2@PLT1068; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1069; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1070; CHECK-NEXT: callq fmodf@PLT1071; CHECK-NEXT: callq __truncsfhf2@PLT1072; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1073; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1074; CHECK-NEXT: # xmm0 = mem[1,0]1075; CHECK-NEXT: callq __extendhfsf2@PLT1076; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1077; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1078; CHECK-NEXT: # xmm0 = mem[1,0]1079; CHECK-NEXT: callq __extendhfsf2@PLT1080; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1081; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1082; CHECK-NEXT: callq fmodf@PLT1083; CHECK-NEXT: callq __truncsfhf2@PLT1084; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1085; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1086; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1087; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1088; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1089; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1090; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm01091; CHECK-NEXT: callq __extendhfsf2@PLT1092; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill1093; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1094; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm01095; CHECK-NEXT: callq __extendhfsf2@PLT1096; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1097; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1098; CHECK-NEXT: callq fmodf@PLT1099; CHECK-NEXT: callq __truncsfhf2@PLT1100; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1101; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1102; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1103; CHECK-NEXT: callq __extendhfsf2@PLT1104; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1105; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1106; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1107; CHECK-NEXT: callq __extendhfsf2@PLT1108; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1109; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1110; CHECK-NEXT: callq fmodf@PLT1111; CHECK-NEXT: callq __truncsfhf2@PLT1112; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1113; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1114; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1115; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1116; CHECK-NEXT: callq __extendhfsf2@PLT1117; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1118; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1119; CHECK-NEXT: callq __extendhfsf2@PLT1120; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1121; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1122; CHECK-NEXT: callq fmodf@PLT1123; CHECK-NEXT: callq __truncsfhf2@PLT1124; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1125; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1126; CHECK-NEXT: vpsrld $16, %xmm0, %xmm01127; CHECK-NEXT: callq __extendhfsf2@PLT1128; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1129; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1130; CHECK-NEXT: vpsrld $16, %xmm0, %xmm01131; CHECK-NEXT: callq __extendhfsf2@PLT1132; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1133; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1134; CHECK-NEXT: callq fmodf@PLT1135; CHECK-NEXT: callq __truncsfhf2@PLT1136; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1137; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1138; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1139; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1140; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1141; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]1142; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1143; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1144; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1145; CHECK-NEXT: vzeroupper1146; CHECK-NEXT: callq __extendhfsf2@PLT1147; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1148; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1149; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1150; CHECK-NEXT: vzeroupper1151; CHECK-NEXT: callq __extendhfsf2@PLT1152; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1153; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1154; CHECK-NEXT: callq fmodf@PLT1155; CHECK-NEXT: callq __truncsfhf2@PLT1156; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1157; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1158; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1159; CHECK-NEXT: callq __extendhfsf2@PLT1160; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1161; CHECK-NEXT: vpshufd $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1162; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1163; CHECK-NEXT: callq __extendhfsf2@PLT1164; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1165; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1166; CHECK-NEXT: callq fmodf@PLT1167; CHECK-NEXT: callq __truncsfhf2@PLT1168; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1169; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1170; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1171; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1172; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1173; CHECK-NEXT: vzeroupper1174; CHECK-NEXT: callq __extendhfsf2@PLT1175; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1176; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1177; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1178; CHECK-NEXT: vzeroupper1179; CHECK-NEXT: callq __extendhfsf2@PLT1180; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1181; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1182; CHECK-NEXT: callq fmodf@PLT1183; CHECK-NEXT: callq __truncsfhf2@PLT1184; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1185; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1186; CHECK-NEXT: # xmm0 = mem[1,0]1187; CHECK-NEXT: callq __extendhfsf2@PLT1188; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill1189; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1190; CHECK-NEXT: # xmm0 = mem[1,0]1191; CHECK-NEXT: callq __extendhfsf2@PLT1192; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1193; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1194; CHECK-NEXT: callq fmodf@PLT1195; CHECK-NEXT: callq __truncsfhf2@PLT1196; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1197; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1198; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1199; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1200; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1201; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1202; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm01203; CHECK-NEXT: vzeroupper1204; CHECK-NEXT: callq __extendhfsf2@PLT1205; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1206; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1207; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm01208; CHECK-NEXT: vzeroupper1209; CHECK-NEXT: callq __extendhfsf2@PLT1210; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1211; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1212; CHECK-NEXT: callq fmodf@PLT1213; CHECK-NEXT: callq __truncsfhf2@PLT1214; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1215; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1216; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1217; CHECK-NEXT: callq __extendhfsf2@PLT1218; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill1219; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1220; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1221; CHECK-NEXT: callq __extendhfsf2@PLT1222; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1223; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1224; CHECK-NEXT: callq fmodf@PLT1225; CHECK-NEXT: callq __truncsfhf2@PLT1226; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1227; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1228; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1229; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1230; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01231; CHECK-NEXT: vzeroupper1232; CHECK-NEXT: callq __extendhfsf2@PLT1233; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill1234; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1235; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01236; CHECK-NEXT: vzeroupper1237; CHECK-NEXT: callq __extendhfsf2@PLT1238; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1239; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1240; CHECK-NEXT: callq fmodf@PLT1241; CHECK-NEXT: callq __truncsfhf2@PLT1242; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1243; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1244; CHECK-NEXT: vpsrld $16, %xmm0, %xmm01245; CHECK-NEXT: vzeroupper1246; CHECK-NEXT: callq __extendhfsf2@PLT1247; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1248; CHECK-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1249; CHECK-NEXT: vpsrld $16, %xmm0, %xmm01250; CHECK-NEXT: vzeroupper1251; CHECK-NEXT: callq __extendhfsf2@PLT1252; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1253; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1254; CHECK-NEXT: callq fmodf@PLT1255; CHECK-NEXT: callq __truncsfhf2@PLT1256; CHECK-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload1257; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1258; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1259; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1260; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1261; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]1262; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1263; CHECK-NEXT: vmovaps %ymm0, (%rbx)1264; CHECK-NEXT: addq $144, %rsp1265; CHECK-NEXT: popq %rbx1266; CHECK-NEXT: vzeroupper1267; CHECK-NEXT: retq1268 %frem = frem <16 x half> %a0, %a11269 store <16 x half> %frem, ptr%p31270 ret void1271}1272 1273define void @frem_v8f16(<8 x half> %a0, <8 x half> %a1, ptr%p3) nounwind {1274; CHECK-LABEL: frem_v8f16:1275; CHECK: # %bb.0:1276; CHECK-NEXT: pushq %rbx1277; CHECK-NEXT: subq $80, %rsp1278; CHECK-NEXT: movq %rdi, %rbx1279; CHECK-NEXT: vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1280; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1281; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1282; CHECK-NEXT: callq __extendhfsf2@PLT1283; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1284; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1285; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1286; CHECK-NEXT: callq __extendhfsf2@PLT1287; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1288; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1289; CHECK-NEXT: callq fmodf@PLT1290; CHECK-NEXT: callq __truncsfhf2@PLT1291; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1292; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1293; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1294; CHECK-NEXT: callq __extendhfsf2@PLT1295; CHECK-NEXT: vmovss %xmm0, (%rsp) # 4-byte Spill1296; CHECK-NEXT: vpshufd $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1297; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1298; CHECK-NEXT: callq __extendhfsf2@PLT1299; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1300; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1301; CHECK-NEXT: callq fmodf@PLT1302; CHECK-NEXT: callq __truncsfhf2@PLT1303; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1304; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1305; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1306; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1307; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1308; CHECK-NEXT: callq __extendhfsf2@PLT1309; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill1310; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1311; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1312; CHECK-NEXT: callq __extendhfsf2@PLT1313; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1314; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1315; CHECK-NEXT: callq fmodf@PLT1316; CHECK-NEXT: callq __truncsfhf2@PLT1317; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1318; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1319; CHECK-NEXT: # xmm0 = mem[1,0]1320; CHECK-NEXT: callq __extendhfsf2@PLT1321; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1322; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1323; CHECK-NEXT: # xmm0 = mem[1,0]1324; CHECK-NEXT: callq __extendhfsf2@PLT1325; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1326; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1327; CHECK-NEXT: callq fmodf@PLT1328; CHECK-NEXT: callq __truncsfhf2@PLT1329; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1330; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1331; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1332; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1333; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1334; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1335; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm01336; CHECK-NEXT: callq __extendhfsf2@PLT1337; CHECK-NEXT: vmovd %xmm0, (%rsp) # 4-byte Folded Spill1338; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1339; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm01340; CHECK-NEXT: callq __extendhfsf2@PLT1341; CHECK-NEXT: vmovss (%rsp), %xmm1 # 4-byte Reload1342; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1343; CHECK-NEXT: callq fmodf@PLT1344; CHECK-NEXT: callq __truncsfhf2@PLT1345; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1346; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1347; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1348; CHECK-NEXT: callq __extendhfsf2@PLT1349; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1350; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1351; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1352; CHECK-NEXT: callq __extendhfsf2@PLT1353; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1354; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1355; CHECK-NEXT: callq fmodf@PLT1356; CHECK-NEXT: callq __truncsfhf2@PLT1357; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1358; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1359; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1360; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1361; CHECK-NEXT: callq __extendhfsf2@PLT1362; CHECK-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1363; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1364; CHECK-NEXT: callq __extendhfsf2@PLT1365; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1366; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1367; CHECK-NEXT: callq fmodf@PLT1368; CHECK-NEXT: callq __truncsfhf2@PLT1369; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1370; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1371; CHECK-NEXT: vpsrld $16, %xmm0, %xmm01372; CHECK-NEXT: callq __extendhfsf2@PLT1373; CHECK-NEXT: vmovd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1374; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1375; CHECK-NEXT: vpsrld $16, %xmm0, %xmm01376; CHECK-NEXT: callq __extendhfsf2@PLT1377; CHECK-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1378; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero1379; CHECK-NEXT: callq fmodf@PLT1380; CHECK-NEXT: callq __truncsfhf2@PLT1381; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1382; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1383; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1384; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1385; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1386; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]1387; CHECK-NEXT: vmovdqa %xmm0, (%rbx)1388; CHECK-NEXT: addq $80, %rsp1389; CHECK-NEXT: popq %rbx1390; CHECK-NEXT: retq1391 %frem = frem <8 x half> %a0, %a11392 store <8 x half> %frem, ptr%p31393 ret void1394}1395 1396define void @frem_v4f80(<4 x x86_fp80> %a0, <4 x x86_fp80> %a1, ptr%p3) nounwind {1397; CHECK-LABEL: frem_v4f80:1398; CHECK: # %bb.0:1399; CHECK-NEXT: pushq %rbx1400; CHECK-NEXT: subq $128, %rsp1401; CHECK-NEXT: movq %rdi, %rbx1402; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1403; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1404; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1405; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1406; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1407; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1408; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1409; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1410; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1411; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1412; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1413; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1414; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1415; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)1416; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp)1417; CHECK-NEXT: fstpt (%rsp)1418; CHECK-NEXT: callq fmodl@PLT1419; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1420; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1421; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp)1422; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1423; CHECK-NEXT: fstpt (%rsp)1424; CHECK-NEXT: callq fmodl@PLT1425; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1426; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1427; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp)1428; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1429; CHECK-NEXT: fstpt (%rsp)1430; CHECK-NEXT: callq fmodl@PLT1431; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill1432; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1433; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp)1434; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1435; CHECK-NEXT: fstpt (%rsp)1436; CHECK-NEXT: callq fmodl@PLT1437; CHECK-NEXT: fstpt 30(%rbx)1438; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1439; CHECK-NEXT: fstpt 20(%rbx)1440; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1441; CHECK-NEXT: fstpt 10(%rbx)1442; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload1443; CHECK-NEXT: fstpt (%rbx)1444; CHECK-NEXT: addq $128, %rsp1445; CHECK-NEXT: popq %rbx1446; CHECK-NEXT: retq1447 %frem = frem <4 x x86_fp80> %a0, %a11448 store <4 x x86_fp80> %frem, ptr%p31449 ret void1450}1451