1513 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512fp16,avx512vl | FileCheck %s3 4define half @frem(half %x, half %y) nounwind {5; CHECK-LABEL: frem:6; CHECK: # %bb.0:7; CHECK-NEXT: pushq %rax8; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm09; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm110; CHECK-NEXT: callq fmodf@PLT11; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm012; CHECK-NEXT: popq %rax13; CHECK-NEXT: retq14 %r = frem half %x, %y15 ret half %r16}17 18define <2 x half> @frem_vec2(<2 x half> %x, <2 x half> %y) nounwind {19; CHECK-LABEL: frem_vec2:20; CHECK: # %bb.0:21; CHECK-NEXT: subq $88, %rsp22; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill23; CHECK-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill24; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero25; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm026; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero27; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm128; CHECK-NEXT: callq fmodf@PLT29; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm030; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill31; CHECK-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload32; CHECK-NEXT: # xmm0 = mem[3,3,3,3]33; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm034; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload35; CHECK-NEXT: # xmm1 = mem[3,3,3,3]36; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm137; CHECK-NEXT: callq fmodf@PLT38; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm039; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload40; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]41; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill42; CHECK-NEXT: vpsrldq $10, (%rsp), %xmm0 # 16-byte Folded Reload43; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero44; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm045; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload46; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero47; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm148; CHECK-NEXT: callq fmodf@PLT49; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm050; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill51; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload52; CHECK-NEXT: # xmm0 = mem[1,0]53; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm054; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload55; CHECK-NEXT: # xmm1 = mem[1,0]56; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm157; CHECK-NEXT: callq fmodf@PLT58; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm059; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload60; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]61; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload62; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]63; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill64; CHECK-NEXT: vpsrlq $48, (%rsp), %xmm0 # 16-byte Folded Reload65; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm066; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload67; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm168; CHECK-NEXT: callq fmodf@PLT69; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm070; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill71; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload72; CHECK-NEXT: # xmm0 = mem[1,1,3,3]73; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm074; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload75; CHECK-NEXT: # xmm1 = mem[1,1,3,3]76; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm177; CHECK-NEXT: callq fmodf@PLT78; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm079; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload80; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]81; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill82; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload83; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm084; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload85; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm186; CHECK-NEXT: callq fmodf@PLT87; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm088; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill89; CHECK-NEXT: vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload90; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm091; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload92; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm193; CHECK-NEXT: callq fmodf@PLT94; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm095; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload96; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]97; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload98; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]99; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload100; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]101; CHECK-NEXT: addq $88, %rsp102; CHECK-NEXT: retq103 %r = frem <2 x half> %x, %y104 ret <2 x half> %r105}106 107define <4 x half> @frem_vec4(<4 x half> %x, <4 x half> %y) nounwind {108; CHECK-LABEL: frem_vec4:109; CHECK: # %bb.0:110; CHECK-NEXT: subq $88, %rsp111; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill112; CHECK-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill113; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero114; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm0115; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero116; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm1117; CHECK-NEXT: callq fmodf@PLT118; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0119; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill120; CHECK-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload121; CHECK-NEXT: # xmm0 = mem[3,3,3,3]122; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0123; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload124; CHECK-NEXT: # xmm1 = mem[3,3,3,3]125; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1126; CHECK-NEXT: callq fmodf@PLT127; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0128; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload129; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]130; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill131; CHECK-NEXT: vpsrldq $10, (%rsp), %xmm0 # 16-byte Folded Reload132; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero133; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0134; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload135; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero136; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1137; CHECK-NEXT: callq fmodf@PLT138; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0139; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill140; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload141; CHECK-NEXT: # xmm0 = mem[1,0]142; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0143; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload144; CHECK-NEXT: # xmm1 = mem[1,0]145; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1146; CHECK-NEXT: callq fmodf@PLT147; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0148; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload149; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]150; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload151; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]152; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill153; CHECK-NEXT: vpsrlq $48, (%rsp), %xmm0 # 16-byte Folded Reload154; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0155; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload156; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1157; CHECK-NEXT: callq fmodf@PLT158; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0159; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill160; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload161; CHECK-NEXT: # xmm0 = mem[1,1,3,3]162; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0163; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload164; CHECK-NEXT: # xmm1 = mem[1,1,3,3]165; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1166; CHECK-NEXT: callq fmodf@PLT167; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0168; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload169; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]170; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill171; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload172; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0173; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload174; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1175; CHECK-NEXT: callq fmodf@PLT176; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0177; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill178; CHECK-NEXT: vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload179; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0180; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload181; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1182; CHECK-NEXT: callq fmodf@PLT183; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0184; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload185; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]186; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload187; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]188; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload189; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]190; CHECK-NEXT: addq $88, %rsp191; CHECK-NEXT: retq192 %r = frem <4 x half> %x, %y193 ret <4 x half> %r194}195 196define <8 x half> @frem_vec8(<8 x half> %x, <8 x half> %y) nounwind {197; CHECK-LABEL: frem_vec8:198; CHECK: # %bb.0:199; CHECK-NEXT: subq $88, %rsp200; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill201; CHECK-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill202; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero203; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm0204; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero205; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm1206; CHECK-NEXT: callq fmodf@PLT207; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0208; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill209; CHECK-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload210; CHECK-NEXT: # xmm0 = mem[3,3,3,3]211; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0212; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload213; CHECK-NEXT: # xmm1 = mem[3,3,3,3]214; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1215; CHECK-NEXT: callq fmodf@PLT216; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0217; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload218; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]219; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill220; CHECK-NEXT: vpsrldq $10, (%rsp), %xmm0 # 16-byte Folded Reload221; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero222; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0223; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload224; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero225; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1226; CHECK-NEXT: callq fmodf@PLT227; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0228; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill229; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload230; CHECK-NEXT: # xmm0 = mem[1,0]231; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0232; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload233; CHECK-NEXT: # xmm1 = mem[1,0]234; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1235; CHECK-NEXT: callq fmodf@PLT236; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0237; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload238; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]239; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload240; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]241; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill242; CHECK-NEXT: vpsrlq $48, (%rsp), %xmm0 # 16-byte Folded Reload243; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0244; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload245; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1246; CHECK-NEXT: callq fmodf@PLT247; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0248; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill249; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload250; CHECK-NEXT: # xmm0 = mem[1,1,3,3]251; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0252; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload253; CHECK-NEXT: # xmm1 = mem[1,1,3,3]254; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1255; CHECK-NEXT: callq fmodf@PLT256; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0257; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload258; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]259; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill260; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload261; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0262; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload263; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1264; CHECK-NEXT: callq fmodf@PLT265; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0266; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill267; CHECK-NEXT: vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload268; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0269; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload270; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1271; CHECK-NEXT: callq fmodf@PLT272; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0273; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload274; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]275; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload276; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]277; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload278; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]279; CHECK-NEXT: addq $88, %rsp280; CHECK-NEXT: retq281 %r = frem <8 x half> %x, %y282 ret <8 x half> %r283}284 285define <16 x half> @frem_vec16(<16 x half> %x, <16 x half> %y) nounwind {286; CHECK-LABEL: frem_vec16:287; CHECK: # %bb.0:288; CHECK-NEXT: subq $168, %rsp289; CHECK-NEXT: vmovupd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill290; CHECK-NEXT: vmovupd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill291; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0292; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill293; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero294; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0295; CHECK-NEXT: vextractf128 $1, %ymm1, %xmm1296; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill297; CHECK-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero298; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1299; CHECK-NEXT: vzeroupper300; CHECK-NEXT: callq fmodf@PLT301; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0302; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill303; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload304; CHECK-NEXT: # xmm0 = mem[3,3,3,3]305; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0306; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload307; CHECK-NEXT: # xmm1 = mem[3,3,3,3]308; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1309; CHECK-NEXT: callq fmodf@PLT310; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0311; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload312; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]313; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill314; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload315; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero316; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0317; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload318; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero319; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1320; CHECK-NEXT: callq fmodf@PLT321; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0322; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill323; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload324; CHECK-NEXT: # xmm0 = mem[1,0]325; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0326; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload327; CHECK-NEXT: # xmm1 = mem[1,0]328; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1329; CHECK-NEXT: callq fmodf@PLT330; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0331; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload332; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]333; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload334; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]335; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill336; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload337; CHECK-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero338; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0339; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload340; CHECK-NEXT: # xmm1 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero341; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1342; CHECK-NEXT: callq fmodf@PLT343; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0344; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill345; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload346; CHECK-NEXT: # xmm0 = mem[3,3,3,3]347; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0348; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload349; CHECK-NEXT: # xmm1 = mem[3,3,3,3]350; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1351; CHECK-NEXT: callq fmodf@PLT352; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0353; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload354; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]355; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill356; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload357; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero358; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0359; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload360; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero361; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1362; CHECK-NEXT: callq fmodf@PLT363; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0364; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill365; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload366; CHECK-NEXT: # xmm0 = mem[1,0]367; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0368; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload369; CHECK-NEXT: # xmm1 = mem[1,0]370; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1371; CHECK-NEXT: callq fmodf@PLT372; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0373; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload374; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]375; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload376; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]377; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload378; CHECK-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill379; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload380; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0381; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload382; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1383; CHECK-NEXT: vzeroupper384; CHECK-NEXT: callq fmodf@PLT385; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0386; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill387; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload388; CHECK-NEXT: # xmm0 = mem[1,1,3,3]389; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0390; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload391; CHECK-NEXT: # xmm1 = mem[1,1,3,3]392; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1393; CHECK-NEXT: callq fmodf@PLT394; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0395; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload396; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]397; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill398; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload399; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0400; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload401; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1402; CHECK-NEXT: callq fmodf@PLT403; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0404; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill405; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload406; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0407; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload408; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1409; CHECK-NEXT: callq fmodf@PLT410; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0411; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload412; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]413; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload414; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]415; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill416; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload417; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0418; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload419; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1420; CHECK-NEXT: callq fmodf@PLT421; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0422; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill423; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload424; CHECK-NEXT: # xmm0 = mem[1,1,3,3]425; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0426; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload427; CHECK-NEXT: # xmm1 = mem[1,1,3,3]428; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1429; CHECK-NEXT: callq fmodf@PLT430; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0431; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload432; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]433; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill434; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload435; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0436; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload437; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1438; CHECK-NEXT: vzeroupper439; CHECK-NEXT: callq fmodf@PLT440; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0441; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill442; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload443; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0444; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload445; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1446; CHECK-NEXT: callq fmodf@PLT447; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0448; CHECK-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload449; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]450; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload451; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]452; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload453; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload454; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]455; CHECK-NEXT: addq $168, %rsp456; CHECK-NEXT: retq457 %r = frem <16 x half> %x, %y458 ret <16 x half> %r459}460 461define <32 x half> @frem_vec32(<32 x half> %x, <32 x half> %y) nounwind {462; CHECK-LABEL: frem_vec32:463; CHECK: # %bb.0:464; CHECK-NEXT: subq $360, %rsp # imm = 0x168465; CHECK-NEXT: vmovupd %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill466; CHECK-NEXT: vmovupd %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill467; CHECK-NEXT: vextractf32x4 $3, %zmm0, %xmm0468; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill469; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero470; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0471; CHECK-NEXT: vextractf32x4 $3, %zmm1, %xmm1472; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill473; CHECK-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero474; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1475; CHECK-NEXT: vzeroupper476; CHECK-NEXT: callq fmodf@PLT477; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0478; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill479; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload480; CHECK-NEXT: # xmm0 = mem[3,3,3,3]481; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0482; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload483; CHECK-NEXT: # xmm1 = mem[3,3,3,3]484; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1485; CHECK-NEXT: callq fmodf@PLT486; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0487; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload488; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]489; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill490; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload491; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero492; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0493; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload494; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero495; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1496; CHECK-NEXT: callq fmodf@PLT497; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0498; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill499; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload500; CHECK-NEXT: # xmm0 = mem[1,0]501; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0502; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload503; CHECK-NEXT: # xmm1 = mem[1,0]504; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1505; CHECK-NEXT: callq fmodf@PLT506; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0507; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload508; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]509; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload510; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]511; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill512; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload513; CHECK-NEXT: vextractf32x4 $2, %zmm0, %xmm0514; CHECK-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill515; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero516; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0517; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload518; CHECK-NEXT: vextractf32x4 $2, %zmm1, %xmm1519; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill520; CHECK-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero521; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1522; CHECK-NEXT: vzeroupper523; CHECK-NEXT: callq fmodf@PLT524; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0525; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill526; CHECK-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload527; CHECK-NEXT: # xmm0 = mem[3,3,3,3]528; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0529; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload530; CHECK-NEXT: # xmm1 = mem[3,3,3,3]531; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1532; CHECK-NEXT: callq fmodf@PLT533; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0534; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload535; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]536; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill537; CHECK-NEXT: vpsrldq $10, (%rsp), %xmm0 # 16-byte Folded Reload538; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero539; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0540; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload541; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero542; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1543; CHECK-NEXT: callq fmodf@PLT544; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0545; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill546; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload547; CHECK-NEXT: # xmm0 = mem[1,0]548; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0549; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload550; CHECK-NEXT: # xmm1 = mem[1,0]551; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1552; CHECK-NEXT: callq fmodf@PLT553; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0554; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload555; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]556; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload557; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]558; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload559; CHECK-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill560; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload561; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0562; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill563; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero564; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0565; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload566; CHECK-NEXT: vextractf128 $1, %ymm1, %xmm1567; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill568; CHECK-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero569; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1570; CHECK-NEXT: vzeroupper571; CHECK-NEXT: callq fmodf@PLT572; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0573; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill574; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload575; CHECK-NEXT: # xmm0 = mem[3,3,3,3]576; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0577; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload578; CHECK-NEXT: # xmm1 = mem[3,3,3,3]579; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1580; CHECK-NEXT: callq fmodf@PLT581; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0582; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload583; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]584; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill585; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload586; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero587; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0588; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload589; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero590; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1591; CHECK-NEXT: callq fmodf@PLT592; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0593; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill594; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload595; CHECK-NEXT: # xmm0 = mem[1,0]596; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0597; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload598; CHECK-NEXT: # xmm1 = mem[1,0]599; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1600; CHECK-NEXT: callq fmodf@PLT601; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0602; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload603; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]604; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload605; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]606; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill607; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload608; CHECK-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero609; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0610; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload611; CHECK-NEXT: # xmm1 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero612; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1613; CHECK-NEXT: callq fmodf@PLT614; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0615; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill616; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload617; CHECK-NEXT: # xmm0 = mem[3,3,3,3]618; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0619; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload620; CHECK-NEXT: # xmm1 = mem[3,3,3,3]621; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1622; CHECK-NEXT: callq fmodf@PLT623; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0624; 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: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload628; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero629; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0630; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload631; CHECK-NEXT: # xmm1 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero632; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1633; CHECK-NEXT: callq fmodf@PLT634; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0635; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill636; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload637; CHECK-NEXT: # xmm0 = mem[1,0]638; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0639; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload640; CHECK-NEXT: # xmm1 = mem[1,0]641; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1642; CHECK-NEXT: callq fmodf@PLT643; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0644; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload645; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]646; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload647; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]648; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload649; CHECK-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload650; CHECK-NEXT: vmovdqu64 %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill651; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload652; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0653; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload654; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1655; CHECK-NEXT: vzeroupper656; CHECK-NEXT: callq fmodf@PLT657; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0658; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill659; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload660; CHECK-NEXT: # xmm0 = mem[1,1,3,3]661; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0662; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload663; CHECK-NEXT: # xmm1 = mem[1,1,3,3]664; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1665; CHECK-NEXT: callq fmodf@PLT666; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0667; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload668; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]669; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill670; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload671; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0672; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload673; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1674; CHECK-NEXT: callq fmodf@PLT675; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0676; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill677; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload678; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0679; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload680; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1681; CHECK-NEXT: callq fmodf@PLT682; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0683; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload684; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]685; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload686; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]687; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill688; CHECK-NEXT: vpsrlq $48, (%rsp), %xmm0 # 16-byte Folded Reload689; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0690; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload691; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1692; CHECK-NEXT: callq fmodf@PLT693; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0694; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill695; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload696; CHECK-NEXT: # xmm0 = mem[1,1,3,3]697; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0698; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload699; CHECK-NEXT: # xmm1 = mem[1,1,3,3]700; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1701; CHECK-NEXT: callq fmodf@PLT702; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0703; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload704; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]705; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill706; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload707; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0708; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload709; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1710; CHECK-NEXT: callq fmodf@PLT711; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0712; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill713; CHECK-NEXT: vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload714; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0715; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload716; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1717; CHECK-NEXT: callq fmodf@PLT718; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0719; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload720; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]721; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload722; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]723; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload724; CHECK-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill725; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload726; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0727; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload728; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1729; CHECK-NEXT: vzeroupper730; CHECK-NEXT: callq fmodf@PLT731; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0732; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill733; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload734; CHECK-NEXT: # xmm0 = mem[1,1,3,3]735; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0736; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload737; CHECK-NEXT: # xmm1 = mem[1,1,3,3]738; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1739; CHECK-NEXT: callq fmodf@PLT740; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0741; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload742; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]743; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill744; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload745; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0746; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload747; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1748; CHECK-NEXT: callq fmodf@PLT749; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0750; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill751; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload752; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0753; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload754; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1755; CHECK-NEXT: callq fmodf@PLT756; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0757; CHECK-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload758; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]759; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload760; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]761; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill762; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload763; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0764; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload765; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1766; CHECK-NEXT: callq fmodf@PLT767; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0768; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill769; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload770; CHECK-NEXT: # xmm0 = mem[1,1,3,3]771; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0772; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload773; CHECK-NEXT: # xmm1 = mem[1,1,3,3]774; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1775; CHECK-NEXT: callq fmodf@PLT776; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0777; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload778; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]779; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill780; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload781; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0782; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload783; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1784; CHECK-NEXT: vzeroupper785; CHECK-NEXT: callq fmodf@PLT786; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0787; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill788; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload789; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0790; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload791; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1792; CHECK-NEXT: callq fmodf@PLT793; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0794; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload795; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]796; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload797; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]798; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload799; CHECK-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload800; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload801; CHECK-NEXT: # zmm0 = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]802; CHECK-NEXT: addq $360, %rsp # imm = 0x168803; CHECK-NEXT: retq804 %r = frem <32 x half> %x, %y805 ret <32 x half> %r806}807 808define half @frem_strict(half %x, half %y) nounwind #0 {809; CHECK-LABEL: frem_strict:810; CHECK: # %bb.0:811; CHECK-NEXT: pushq %rax812; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1813; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0814; CHECK-NEXT: callq fmodf@PLT815; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0816; CHECK-NEXT: popq %rax817; CHECK-NEXT: retq818 %result = call half @llvm.experimental.constrained.frem.f16(half %x, half %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0819 ret half %result820}821 822define <2 x half> @frem_strict_vec2(<2 x half> %x, <2 x half> %y) nounwind #0 {823; CHECK-LABEL: frem_strict_vec2:824; CHECK: # %bb.0:825; CHECK-NEXT: subq $56, %rsp826; CHECK-NEXT: vmovaps %xmm1, (%rsp) # 16-byte Spill827; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill828; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1829; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0830; CHECK-NEXT: callq fmodf@PLT831; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0832; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill833; CHECK-NEXT: vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload834; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1835; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload836; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0837; CHECK-NEXT: callq fmodf@PLT838; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0839; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload840; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]841; CHECK-NEXT: addq $56, %rsp842; CHECK-NEXT: retq843 %result = call <2 x half> @llvm.experimental.constrained.frem.v2f16(<2 x half> %x, <2 x half> %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0844 ret <2 x half> %result845}846 847define <4 x half> @frem_strict_vec4(<4 x half> %x, <4 x half> %y) nounwind #0 {848; CHECK-LABEL: frem_strict_vec4:849; CHECK: # %bb.0:850; CHECK-NEXT: subq $72, %rsp851; CHECK-NEXT: vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill852; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill853; CHECK-NEXT: vpsrlq $48, %xmm1, %xmm2854; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm1855; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm2856; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm0857; CHECK-NEXT: callq fmodf@PLT858; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0859; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill860; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload861; CHECK-NEXT: # xmm0 = mem[1,1,3,3]862; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1863; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload864; CHECK-NEXT: # xmm0 = mem[1,1,3,3]865; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0866; CHECK-NEXT: callq fmodf@PLT867; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0868; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload869; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]870; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill871; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload872; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1873; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload874; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0875; CHECK-NEXT: callq fmodf@PLT876; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0877; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill878; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload879; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1880; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload881; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0882; CHECK-NEXT: callq fmodf@PLT883; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0884; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload885; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]886; CHECK-NEXT: vinsertps $28, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload887; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],zero,zero888; CHECK-NEXT: addq $72, %rsp889; CHECK-NEXT: retq890 %result = call <4 x half> @llvm.experimental.constrained.frem.v4f16(<4 x half> %x, <4 x half> %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0891 ret <4 x half> %result892}893 894define <8 x half> @frem_strict_vec8(<8 x half> %x, <8 x half> %y) nounwind #0 {895; CHECK-LABEL: frem_strict_vec8:896; CHECK: # %bb.0:897; CHECK-NEXT: subq $88, %rsp898; CHECK-NEXT: vmovapd %xmm1, (%rsp) # 16-byte Spill899; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill900; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero901; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm1902; CHECK-NEXT: vpsrldq {{.*#+}} xmm2 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero903; CHECK-NEXT: vcvtsh2ss %xmm2, %xmm2, %xmm0904; CHECK-NEXT: callq fmodf@PLT905; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0906; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill907; CHECK-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload908; CHECK-NEXT: # xmm0 = mem[3,3,3,3]909; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1910; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload911; CHECK-NEXT: # xmm0 = mem[3,3,3,3]912; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0913; CHECK-NEXT: callq fmodf@PLT914; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0915; 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: vpsrldq $10, (%rsp), %xmm0 # 16-byte Folded Reload919; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero920; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1921; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload922; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero923; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0924; CHECK-NEXT: callq fmodf@PLT925; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0926; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill927; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload928; CHECK-NEXT: # xmm0 = mem[1,0]929; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1930; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload931; CHECK-NEXT: # xmm0 = mem[1,0]932; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0933; CHECK-NEXT: callq fmodf@PLT934; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0935; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload936; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]937; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload938; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]939; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill940; CHECK-NEXT: vpsrlq $48, (%rsp), %xmm0 # 16-byte Folded Reload941; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1942; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload943; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0944; CHECK-NEXT: callq fmodf@PLT945; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0946; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill947; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload948; CHECK-NEXT: # xmm0 = mem[1,1,3,3]949; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1950; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload951; CHECK-NEXT: # xmm0 = mem[1,1,3,3]952; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0953; CHECK-NEXT: callq fmodf@PLT954; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0955; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload956; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]957; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill958; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload959; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1960; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload961; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0962; CHECK-NEXT: callq fmodf@PLT963; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0964; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill965; CHECK-NEXT: vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload966; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm1967; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload968; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0969; CHECK-NEXT: callq fmodf@PLT970; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm0971; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload972; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]973; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload974; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]975; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload976; CHECK-NEXT: # xmm0 = xmm0[0],mem[0]977; CHECK-NEXT: addq $88, %rsp978; CHECK-NEXT: retq979 %result = call <8 x half> @llvm.experimental.constrained.frem.v8f16(<8 x half> %x, <8 x half> %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0980 ret <8 x half> %result981}982 983define <16 x half> @frem_strict_vec16(<16 x half> %x, <16 x half> %y) nounwind #0 {984; CHECK-LABEL: frem_strict_vec16:985; CHECK: # %bb.0:986; CHECK-NEXT: subq $168, %rsp987; CHECK-NEXT: vmovupd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill988; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill989; CHECK-NEXT: vextractf128 $1, %ymm1, %xmm1990; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill991; CHECK-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero992; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm1993; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0994; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill995; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero996; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm0997; CHECK-NEXT: vzeroupper998; CHECK-NEXT: callq fmodf@PLT999; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01000; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1001; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1002; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1003; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11004; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1005; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1006; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01007; CHECK-NEXT: callq fmodf@PLT1008; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01009; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1010; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1011; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1012; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1013; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1014; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11015; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1016; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1017; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01018; CHECK-NEXT: callq fmodf@PLT1019; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01020; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1021; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1022; CHECK-NEXT: # xmm0 = mem[1,0]1023; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11024; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1025; CHECK-NEXT: # xmm0 = mem[1,0]1026; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01027; CHECK-NEXT: callq fmodf@PLT1028; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01029; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1030; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1031; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1032; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1033; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1034; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1035; CHECK-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1036; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11037; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1038; CHECK-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1039; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01040; CHECK-NEXT: callq fmodf@PLT1041; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01042; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1043; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1044; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1045; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11046; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1047; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1048; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01049; CHECK-NEXT: callq fmodf@PLT1050; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01051; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1052; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1053; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1054; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1055; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1056; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11057; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1058; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1059; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01060; CHECK-NEXT: callq fmodf@PLT1061; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01062; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1063; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1064; CHECK-NEXT: # xmm0 = mem[1,0]1065; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11066; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1067; CHECK-NEXT: # xmm0 = mem[1,0]1068; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01069; CHECK-NEXT: callq fmodf@PLT1070; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01071; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1072; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1073; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1074; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1075; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1076; CHECK-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1077; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1078; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11079; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1080; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01081; CHECK-NEXT: vzeroupper1082; CHECK-NEXT: callq fmodf@PLT1083; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01084; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1085; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1086; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1087; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11088; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1089; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1090; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01091; CHECK-NEXT: callq fmodf@PLT1092; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01093; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1094; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1095; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1096; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1097; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11098; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1099; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01100; CHECK-NEXT: callq fmodf@PLT1101; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01102; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1103; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1104; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11105; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1106; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01107; CHECK-NEXT: callq fmodf@PLT1108; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01109; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1110; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1111; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1112; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1113; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1114; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1115; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11116; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1117; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01118; CHECK-NEXT: callq fmodf@PLT1119; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01120; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1121; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1122; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1123; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11124; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1125; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1126; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01127; CHECK-NEXT: callq fmodf@PLT1128; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01129; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1130; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1131; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1132; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1133; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11134; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1135; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01136; CHECK-NEXT: vzeroupper1137; CHECK-NEXT: callq fmodf@PLT1138; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01139; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1140; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1141; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11142; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1143; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01144; CHECK-NEXT: callq fmodf@PLT1145; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01146; CHECK-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload1147; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1148; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1149; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1150; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1151; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1152; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]1153; CHECK-NEXT: addq $168, %rsp1154; CHECK-NEXT: retq1155 %result = call <16 x half> @llvm.experimental.constrained.frem.v16f16(<16 x half> %x, <16 x half> %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #01156 ret <16 x half> %result1157}1158 1159define <32 x half> @frem_strict_vec32(<32 x half> %x, <32 x half> %y) nounwind #0 {1160; CHECK-LABEL: frem_strict_vec32:1161; CHECK: # %bb.0:1162; CHECK-NEXT: subq $360, %rsp # imm = 0x1681163; CHECK-NEXT: vmovupd %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1164; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1165; CHECK-NEXT: vextractf32x4 $3, %zmm1, %xmm11166; CHECK-NEXT: vmovapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1167; CHECK-NEXT: vpsrldq {{.*#+}} xmm1 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1168; CHECK-NEXT: vcvtsh2ss %xmm1, %xmm1, %xmm11169; CHECK-NEXT: vextractf32x4 $3, %zmm0, %xmm01170; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1171; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1172; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01173; CHECK-NEXT: vzeroupper1174; CHECK-NEXT: callq fmodf@PLT1175; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01176; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1177; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1178; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1179; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11180; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1181; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1182; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01183; CHECK-NEXT: callq fmodf@PLT1184; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01185; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1186; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1187; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1188; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1189; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1190; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11191; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1192; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1193; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01194; CHECK-NEXT: callq fmodf@PLT1195; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01196; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1197; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1198; CHECK-NEXT: # xmm0 = mem[1,0]1199; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11200; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1201; CHECK-NEXT: # xmm0 = mem[1,0]1202; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01203; CHECK-NEXT: callq fmodf@PLT1204; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01205; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1206; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1207; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1208; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1209; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1210; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1211; CHECK-NEXT: vextractf32x4 $2, %zmm0, %xmm01212; CHECK-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill1213; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1214; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11215; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1216; CHECK-NEXT: vextractf32x4 $2, %zmm0, %xmm01217; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1218; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1219; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01220; CHECK-NEXT: vzeroupper1221; CHECK-NEXT: callq fmodf@PLT1222; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01223; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1224; CHECK-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload1225; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1226; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11227; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1228; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1229; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01230; CHECK-NEXT: callq fmodf@PLT1231; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01232; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1233; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1234; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1235; CHECK-NEXT: vpsrldq $10, (%rsp), %xmm0 # 16-byte Folded Reload1236; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1237; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11238; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1239; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1240; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01241; CHECK-NEXT: callq fmodf@PLT1242; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01243; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1244; CHECK-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload1245; CHECK-NEXT: # xmm0 = mem[1,0]1246; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11247; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1248; CHECK-NEXT: # xmm0 = mem[1,0]1249; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01250; CHECK-NEXT: callq fmodf@PLT1251; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01252; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1253; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1254; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1255; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1256; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1257; CHECK-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1258; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1259; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01260; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1261; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1262; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11263; CHECK-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1264; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01265; CHECK-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1266; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1267; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01268; CHECK-NEXT: vzeroupper1269; CHECK-NEXT: callq fmodf@PLT1270; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01271; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1272; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1273; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1274; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11275; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1276; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1277; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01278; CHECK-NEXT: callq fmodf@PLT1279; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01280; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1281; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1282; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1283; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1284; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1285; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11286; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1287; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1288; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01289; CHECK-NEXT: callq fmodf@PLT1290; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01291; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1292; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1293; CHECK-NEXT: # xmm0 = mem[1,0]1294; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11295; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1296; CHECK-NEXT: # xmm0 = mem[1,0]1297; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01298; CHECK-NEXT: callq fmodf@PLT1299; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01300; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1301; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1302; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1303; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1304; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1305; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1306; CHECK-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1307; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11308; CHECK-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1309; CHECK-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1310; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01311; CHECK-NEXT: callq fmodf@PLT1312; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01313; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1314; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1315; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1316; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11317; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1318; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1319; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01320; CHECK-NEXT: callq fmodf@PLT1321; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01322; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1323; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1324; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1325; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1326; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1327; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11328; CHECK-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1329; CHECK-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1330; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01331; CHECK-NEXT: callq fmodf@PLT1332; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01333; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1334; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1335; CHECK-NEXT: # xmm0 = mem[1,0]1336; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11337; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1338; CHECK-NEXT: # xmm0 = mem[1,0]1339; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01340; CHECK-NEXT: callq fmodf@PLT1341; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01342; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1343; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1344; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1345; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1346; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1347; CHECK-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload1348; CHECK-NEXT: vmovdqu64 %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1349; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1350; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11351; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1352; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01353; CHECK-NEXT: vzeroupper1354; CHECK-NEXT: callq fmodf@PLT1355; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01356; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1357; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1358; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1359; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11360; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1361; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1362; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01363; CHECK-NEXT: callq fmodf@PLT1364; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01365; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1366; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1367; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1368; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1369; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11370; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1371; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01372; CHECK-NEXT: callq fmodf@PLT1373; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01374; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1375; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1376; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11377; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1378; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01379; CHECK-NEXT: callq fmodf@PLT1380; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01381; 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 {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1384; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1385; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1386; CHECK-NEXT: vpsrlq $48, (%rsp), %xmm0 # 16-byte Folded Reload1387; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11388; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1389; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01390; CHECK-NEXT: callq fmodf@PLT1391; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01392; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1393; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1394; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1395; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11396; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1397; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1398; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01399; CHECK-NEXT: callq fmodf@PLT1400; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01401; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1402; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1403; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1404; CHECK-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1405; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11406; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1407; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01408; CHECK-NEXT: callq fmodf@PLT1409; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01410; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1411; CHECK-NEXT: vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload1412; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11413; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1414; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01415; CHECK-NEXT: callq fmodf@PLT1416; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01417; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1418; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1419; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1420; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1421; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1422; CHECK-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1423; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1424; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11425; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1426; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01427; CHECK-NEXT: vzeroupper1428; CHECK-NEXT: callq fmodf@PLT1429; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01430; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1431; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1432; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1433; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11434; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1435; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1436; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01437; CHECK-NEXT: callq fmodf@PLT1438; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01439; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1440; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1441; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1442; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1443; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11444; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1445; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01446; CHECK-NEXT: callq fmodf@PLT1447; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01448; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1449; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1450; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11451; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1452; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01453; CHECK-NEXT: callq fmodf@PLT1454; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01455; CHECK-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload1456; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1457; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1458; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1459; CHECK-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1460; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1461; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11462; CHECK-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1463; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01464; CHECK-NEXT: callq fmodf@PLT1465; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01466; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1467; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1468; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1469; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11470; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1471; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1472; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01473; CHECK-NEXT: callq fmodf@PLT1474; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01475; CHECK-NEXT: vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1476; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]1477; CHECK-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1478; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1479; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11480; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1481; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01482; CHECK-NEXT: vzeroupper1483; CHECK-NEXT: callq fmodf@PLT1484; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01485; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1486; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1487; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm11488; CHECK-NEXT: vpsrld $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1489; CHECK-NEXT: vcvtsh2ss %xmm0, %xmm0, %xmm01490; CHECK-NEXT: callq fmodf@PLT1491; CHECK-NEXT: vcvtss2sh %xmm0, %xmm0, %xmm01492; CHECK-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1493; CHECK-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1494; CHECK-NEXT: vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1495; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1496; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1497; CHECK-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload1498; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1499; CHECK-NEXT: # zmm0 = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1500; CHECK-NEXT: addq $360, %rsp # imm = 0x1681501; CHECK-NEXT: retq1502 %result = call <32 x half> @llvm.experimental.constrained.frem.v32f16(<32 x half> %x, <32 x half> %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #01503 ret <32 x half> %result1504}1505 1506attributes #0 = { strictfp }1507declare half @llvm.experimental.constrained.frem.f16(half, half, metadata, metadata)1508declare <2 x half> @llvm.experimental.constrained.frem.v2f16(<2 x half>, <2 x half>, metadata, metadata)1509declare <4 x half> @llvm.experimental.constrained.frem.v4f16(<4 x half>, <4 x half>, metadata, metadata)1510declare <8 x half> @llvm.experimental.constrained.frem.v8f16(<8 x half>, <8 x half>, metadata, metadata)1511declare <16 x half> @llvm.experimental.constrained.frem.v16f16(<16 x half>, <16 x half>, metadata, metadata)1512declare <32 x half> @llvm.experimental.constrained.frem.v32f16(<32 x half>, <32 x half>, metadata, metadata)1513