1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=x86_64-linux-gnu < %s | FileCheck %s 3 4; Basic test coverage for FREM 5 6define void @frem_f16(half %a0, half %a1, half *%p3) nounwind { 7; CHECK-LABEL: frem_f16: 8; CHECK: # %bb.0: 9; CHECK-NEXT: pushq %rbp 10; CHECK-NEXT: pushq %rbx 11; CHECK-NEXT: pushq %rax 12; CHECK-NEXT: movq %rdx, %rbx 13; CHECK-NEXT: movl %edi, %ebp 14; CHECK-NEXT: movzwl %si, %edi 15; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 16; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 17; CHECK-NEXT: movzwl %bp, %edi 18; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 19; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 20; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 21; CHECK-NEXT: callq fmodf@PLT 22; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 23; CHECK-NEXT: movw %ax, (%rbx) 24; CHECK-NEXT: addq $8, %rsp 25; CHECK-NEXT: popq %rbx 26; CHECK-NEXT: popq %rbp 27; CHECK-NEXT: retq 28 %frem = frem half %a0, %a1 29 store half %frem, half *%p3 30 ret void 31} 32 33define void @frem_f32(float %a0, float %a1, float *%p3) nounwind { 34; CHECK-LABEL: frem_f32: 35; CHECK: # %bb.0: 36; CHECK-NEXT: pushq %rbx 37; CHECK-NEXT: movq %rdi, %rbx 38; CHECK-NEXT: callq fmodf@PLT 39; CHECK-NEXT: movss %xmm0, (%rbx) 40; CHECK-NEXT: popq %rbx 41; CHECK-NEXT: retq 42 %frem = frem float %a0, %a1 43 store float %frem, float *%p3 44 ret void 45} 46 47define void @frem_f64(double %a0, double %a1, double *%p3) nounwind { 48; CHECK-LABEL: frem_f64: 49; CHECK: # %bb.0: 50; CHECK-NEXT: pushq %rbx 51; CHECK-NEXT: movq %rdi, %rbx 52; CHECK-NEXT: callq fmod@PLT 53; CHECK-NEXT: movsd %xmm0, (%rbx) 54; CHECK-NEXT: popq %rbx 55; CHECK-NEXT: retq 56 %frem = frem double %a0, %a1 57 store double %frem, double *%p3 58 ret void 59} 60 61define void @frem_f80(x86_fp80 %a0, x86_fp80 %a1, x86_fp80 *%p3) nounwind { 62; CHECK-LABEL: frem_f80: 63; CHECK: # %bb.0: 64; CHECK-NEXT: pushq %rbx 65; CHECK-NEXT: subq $32, %rsp 66; CHECK-NEXT: movq %rdi, %rbx 67; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 68; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 69; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp) 70; CHECK-NEXT: fstpt (%rsp) 71; CHECK-NEXT: callq fmodl@PLT 72; CHECK-NEXT: fstpt (%rbx) 73; CHECK-NEXT: addq $32, %rsp 74; CHECK-NEXT: popq %rbx 75; CHECK-NEXT: retq 76 %frem = frem x86_fp80 %a0, %a1 77 store x86_fp80 %frem, x86_fp80 *%p3 78 ret void 79} 80 81define void @frem_f128(fp128 %a0, fp128 %a1, fp128 *%p3) nounwind { 82; CHECK-LABEL: frem_f128: 83; CHECK: # %bb.0: 84; CHECK-NEXT: pushq %rbx 85; CHECK-NEXT: movq %rdi, %rbx 86; CHECK-NEXT: callq fmodl@PLT 87; CHECK-NEXT: movaps %xmm0, (%rbx) 88; CHECK-NEXT: popq %rbx 89; CHECK-NEXT: retq 90 %frem = frem fp128 %a0, %a1 91 store fp128 %frem, fp128 *%p3 92 ret void 93} 94 95define void @frem_v16f32(<16 x float> %a0, <16 x float> %a1, <16 x float> *%p3) nounwind { 96; CHECK-LABEL: frem_v16f32: 97; CHECK: # %bb.0: 98; CHECK-NEXT: pushq %rbx 99; CHECK-NEXT: subq $160, %rsp 100; CHECK-NEXT: movq %rdi, %rbx 101; CHECK-NEXT: movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 102; CHECK-NEXT: movaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 103; CHECK-NEXT: movaps %xmm5, (%rsp) # 16-byte Spill 104; CHECK-NEXT: movaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 105; CHECK-NEXT: movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 106; CHECK-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 107; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 108; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 109; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 110; CHECK-NEXT: movaps %xmm4, %xmm1 111; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3],xmm4[3,3] 112; CHECK-NEXT: callq fmodf@PLT 113; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 114; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 115; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 116; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 117; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 118; CHECK-NEXT: callq fmodf@PLT 119; CHECK-NEXT: unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 120; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] 121; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 122; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 123; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 124; CHECK-NEXT: callq fmodf@PLT 125; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 126; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 127; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 128; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 129; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1] 130; CHECK-NEXT: callq fmodf@PLT 131; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 132; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 133; CHECK-NEXT: unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload 134; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] 135; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 136; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 137; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 138; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 139; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 140; CHECK-NEXT: callq fmodf@PLT 141; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 142; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 143; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 144; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 145; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 146; CHECK-NEXT: callq fmodf@PLT 147; CHECK-NEXT: unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 148; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] 149; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 150; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 151; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 152; CHECK-NEXT: callq fmodf@PLT 153; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 154; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 155; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 156; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 157; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1] 158; CHECK-NEXT: callq fmodf@PLT 159; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 160; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 161; CHECK-NEXT: unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload 162; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] 163; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 164; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 165; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 166; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 167; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 168; CHECK-NEXT: callq fmodf@PLT 169; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 170; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 171; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 172; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 173; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 174; CHECK-NEXT: callq fmodf@PLT 175; CHECK-NEXT: unpcklps (%rsp), %xmm0 # 16-byte Folded Reload 176; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] 177; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 178; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 179; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 180; CHECK-NEXT: callq fmodf@PLT 181; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 182; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 183; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 184; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 185; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1] 186; CHECK-NEXT: callq fmodf@PLT 187; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 188; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 189; CHECK-NEXT: unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload 190; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] 191; CHECK-NEXT: movaps %xmm1, (%rsp) # 16-byte Spill 192; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 193; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 194; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 195; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 196; CHECK-NEXT: callq fmodf@PLT 197; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 198; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 199; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 200; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 201; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 202; CHECK-NEXT: callq fmodf@PLT 203; CHECK-NEXT: unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 204; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] 205; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 206; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 207; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 208; CHECK-NEXT: callq fmodf@PLT 209; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 210; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 211; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 212; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 213; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1] 214; CHECK-NEXT: callq fmodf@PLT 215; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 216; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 217; CHECK-NEXT: unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload 218; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] 219; CHECK-NEXT: movaps %xmm1, 48(%rbx) 220; CHECK-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload 221; CHECK-NEXT: movaps %xmm0, 32(%rbx) 222; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 223; CHECK-NEXT: movaps %xmm0, 16(%rbx) 224; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 225; CHECK-NEXT: movaps %xmm0, (%rbx) 226; CHECK-NEXT: addq $160, %rsp 227; CHECK-NEXT: popq %rbx 228; CHECK-NEXT: retq 229 %frem = frem <16 x float> %a0, %a1 230 store <16 x float> %frem, <16 x float> *%p3 231 ret void 232} 233 234define void @frem_v8f32(<8 x float> %a0, <8 x float> %a1, <8 x float> *%p3) nounwind { 235; CHECK-LABEL: frem_v8f32: 236; CHECK: # %bb.0: 237; CHECK-NEXT: pushq %rbx 238; CHECK-NEXT: subq $96, %rsp 239; CHECK-NEXT: movq %rdi, %rbx 240; CHECK-NEXT: movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 241; CHECK-NEXT: movaps %xmm2, (%rsp) # 16-byte Spill 242; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 243; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 244; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 245; CHECK-NEXT: movaps %xmm2, %xmm1 246; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3],xmm2[3,3] 247; CHECK-NEXT: callq fmodf@PLT 248; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 249; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 250; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 251; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 252; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 253; CHECK-NEXT: callq fmodf@PLT 254; CHECK-NEXT: unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 255; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] 256; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 257; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 258; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 259; CHECK-NEXT: callq fmodf@PLT 260; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 261; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 262; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 263; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 264; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1] 265; CHECK-NEXT: callq fmodf@PLT 266; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 267; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 268; CHECK-NEXT: unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload 269; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] 270; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 271; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 272; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 273; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 274; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 275; CHECK-NEXT: callq fmodf@PLT 276; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 277; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 278; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 279; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 280; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 281; CHECK-NEXT: callq fmodf@PLT 282; CHECK-NEXT: unpcklps (%rsp), %xmm0 # 16-byte Folded Reload 283; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] 284; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 285; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 286; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 287; CHECK-NEXT: callq fmodf@PLT 288; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 289; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 290; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 291; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 292; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1] 293; CHECK-NEXT: callq fmodf@PLT 294; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 295; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 296; CHECK-NEXT: unpcklpd (%rsp), %xmm1 # 16-byte Folded Reload 297; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] 298; CHECK-NEXT: movaps %xmm1, 16(%rbx) 299; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 300; CHECK-NEXT: movaps %xmm0, (%rbx) 301; CHECK-NEXT: addq $96, %rsp 302; CHECK-NEXT: popq %rbx 303; CHECK-NEXT: retq 304 %frem = frem <8 x float> %a0, %a1 305 store <8 x float> %frem, <8 x float> *%p3 306 ret void 307} 308 309define void @frem_v4f32(<4 x float> %a0, <4 x float> %a1, <4 x float> *%p3) nounwind { 310; CHECK-LABEL: frem_v4f32: 311; CHECK: # %bb.0: 312; CHECK-NEXT: pushq %rbx 313; CHECK-NEXT: subq $64, %rsp 314; CHECK-NEXT: movq %rdi, %rbx 315; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 316; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 317; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 318; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 319; CHECK-NEXT: callq fmodf@PLT 320; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 321; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 322; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 323; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 324; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 325; CHECK-NEXT: callq fmodf@PLT 326; CHECK-NEXT: unpcklps (%rsp), %xmm0 # 16-byte Folded Reload 327; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] 328; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 329; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 330; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 331; CHECK-NEXT: callq fmodf@PLT 332; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 333; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 334; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 335; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 336; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1] 337; CHECK-NEXT: callq fmodf@PLT 338; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 339; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 340; CHECK-NEXT: unpcklpd (%rsp), %xmm1 # 16-byte Folded Reload 341; CHECK-NEXT: # xmm1 = xmm1[0],mem[0] 342; CHECK-NEXT: movaps %xmm1, (%rbx) 343; CHECK-NEXT: addq $64, %rsp 344; CHECK-NEXT: popq %rbx 345; CHECK-NEXT: retq 346 %frem = frem <4 x float> %a0, %a1 347 store <4 x float> %frem, <4 x float> *%p3 348 ret void 349} 350 351define void @frem_v8f64(<8 x double> %a0, <8 x double> %a1, <8 x double> *%p3) nounwind { 352; CHECK-LABEL: frem_v8f64: 353; CHECK: # %bb.0: 354; CHECK-NEXT: pushq %rbx 355; CHECK-NEXT: subq $144, %rsp 356; CHECK-NEXT: movq %rdi, %rbx 357; CHECK-NEXT: movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 358; CHECK-NEXT: movaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 359; CHECK-NEXT: movaps %xmm5, (%rsp) # 16-byte Spill 360; CHECK-NEXT: movaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 361; CHECK-NEXT: movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 362; CHECK-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 363; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 364; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 365; CHECK-NEXT: movaps %xmm4, %xmm1 366; CHECK-NEXT: callq fmod@PLT 367; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 368; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 369; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 370; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 371; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 372; CHECK-NEXT: callq fmod@PLT 373; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 374; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] 375; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 376; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 377; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 378; CHECK-NEXT: callq fmod@PLT 379; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 380; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 381; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 382; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 383; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 384; CHECK-NEXT: callq fmod@PLT 385; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 386; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] 387; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 388; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 389; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 390; CHECK-NEXT: callq fmod@PLT 391; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 392; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 393; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 394; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 395; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 396; CHECK-NEXT: callq fmod@PLT 397; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 398; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] 399; CHECK-NEXT: movaps %xmm1, (%rsp) # 16-byte Spill 400; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 401; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 402; CHECK-NEXT: callq fmod@PLT 403; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 404; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 405; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 406; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 407; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 408; CHECK-NEXT: callq fmod@PLT 409; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 410; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] 411; CHECK-NEXT: movaps %xmm1, 48(%rbx) 412; CHECK-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload 413; CHECK-NEXT: movaps %xmm0, 32(%rbx) 414; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 415; CHECK-NEXT: movaps %xmm0, 16(%rbx) 416; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 417; CHECK-NEXT: movaps %xmm0, (%rbx) 418; CHECK-NEXT: addq $144, %rsp 419; CHECK-NEXT: popq %rbx 420; CHECK-NEXT: retq 421 %frem = frem <8 x double> %a0, %a1 422 store <8 x double> %frem, <8 x double> *%p3 423 ret void 424} 425 426define void @frem_v4f64(<4 x double> %a0, <4 x double> %a1, <4 x double> *%p3) nounwind { 427; CHECK-LABEL: frem_v4f64: 428; CHECK: # %bb.0: 429; CHECK-NEXT: pushq %rbx 430; CHECK-NEXT: subq $80, %rsp 431; CHECK-NEXT: movq %rdi, %rbx 432; CHECK-NEXT: movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 433; CHECK-NEXT: movaps %xmm2, (%rsp) # 16-byte Spill 434; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 435; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 436; CHECK-NEXT: movaps %xmm2, %xmm1 437; CHECK-NEXT: callq fmod@PLT 438; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 439; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 440; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 441; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 442; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 443; CHECK-NEXT: callq fmod@PLT 444; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 445; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] 446; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 447; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 448; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 449; CHECK-NEXT: callq fmod@PLT 450; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 451; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 452; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 453; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 454; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 455; CHECK-NEXT: callq fmod@PLT 456; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload 457; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] 458; CHECK-NEXT: movaps %xmm1, 16(%rbx) 459; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 460; CHECK-NEXT: movaps %xmm0, (%rbx) 461; CHECK-NEXT: addq $80, %rsp 462; CHECK-NEXT: popq %rbx 463; CHECK-NEXT: retq 464 %frem = frem <4 x double> %a0, %a1 465 store <4 x double> %frem, <4 x double> *%p3 466 ret void 467} 468 469define void @frem_v2f64(<2 x double> %a0, <2 x double> %a1, <2 x double> *%p3) nounwind { 470; CHECK-LABEL: frem_v2f64: 471; CHECK: # %bb.0: 472; CHECK-NEXT: pushq %rbx 473; CHECK-NEXT: subq $48, %rsp 474; CHECK-NEXT: movq %rdi, %rbx 475; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 476; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill 477; CHECK-NEXT: callq fmod@PLT 478; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 479; CHECK-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload 480; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1] 481; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 482; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] 483; CHECK-NEXT: callq fmod@PLT 484; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 485; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] 486; CHECK-NEXT: movaps %xmm1, (%rbx) 487; CHECK-NEXT: addq $48, %rsp 488; CHECK-NEXT: popq %rbx 489; CHECK-NEXT: retq 490 %frem = frem <2 x double> %a0, %a1 491 store <2 x double> %frem, <2 x double> *%p3 492 ret void 493} 494 495define void @frem_v32f16(<32 x half> %a0, <32 x half> %a1, <32 x half> *%p3) nounwind { 496; CHECK-LABEL: frem_v32f16: 497; CHECK: # %bb.0: 498; CHECK-NEXT: pushq %rbp 499; CHECK-NEXT: pushq %r15 500; CHECK-NEXT: pushq %r14 501; CHECK-NEXT: pushq %r13 502; CHECK-NEXT: pushq %r12 503; CHECK-NEXT: pushq %rbx 504; CHECK-NEXT: subq $248, %rsp 505; CHECK-NEXT: movl %r9d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 506; CHECK-NEXT: movl %r8d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 507; CHECK-NEXT: movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 508; CHECK-NEXT: movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 509; CHECK-NEXT: movl %esi, %r14d 510; CHECK-NEXT: movl %edi, %ebx 511; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %r15 512; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 513; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 514; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 515; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 516; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 517; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 518; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 519; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 520; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 521; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 522; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 523; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 524; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 525; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 526; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 527; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 528; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 529; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 530; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 531; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 532; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 533; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 534; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 535; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 536; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 537; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 538; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 539; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 540; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 541; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 542; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 543; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 544; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 545; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 546; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 547; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 548; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 549; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 550; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 551; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 552; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 553; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 554; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 555; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 556; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 557; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 558; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 559; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 560; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 561; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 562; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 563; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 564; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 565; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 566; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 567; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 568; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 569; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 570; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 571; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 572; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 573; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 574; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 575; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 576; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 577; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 578; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 579; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 580; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 581; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 582; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 583; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 584; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 585; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 586; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 587; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 588; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 589; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 590; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 591; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 592; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 593; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 594; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 595; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 596; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 597; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 598; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 599; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 600; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 601; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 602; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 603; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 604; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 605; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 606; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 607; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 608; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 609; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 610; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 611; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 612; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 613; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 614; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 615; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 616; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 617; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 618; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 619; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 620; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %ebp 621; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %r13d 622; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %r12d 623; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %edi 624; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 625; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 626; CHECK-NEXT: movzwl %bx, %edi 627; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 628; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 629; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 630; CHECK-NEXT: callq fmodf@PLT 631; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 632; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 633; CHECK-NEXT: movl %r12d, %edi 634; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 635; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 636; CHECK-NEXT: movzwl %r14w, %edi 637; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 638; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 639; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 640; CHECK-NEXT: callq fmodf@PLT 641; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 642; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 643; CHECK-NEXT: movl %r13d, %edi 644; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 645; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 646; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 647; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 648; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 649; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 650; CHECK-NEXT: callq fmodf@PLT 651; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 652; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 653; CHECK-NEXT: movl %ebp, %edi 654; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 655; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 656; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 657; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 658; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 659; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 660; CHECK-NEXT: callq fmodf@PLT 661; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 662; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 663; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 664; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 665; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 666; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 667; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 668; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 669; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 670; CHECK-NEXT: callq fmodf@PLT 671; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 672; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 673; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 674; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 675; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 676; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 677; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 678; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 679; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 680; CHECK-NEXT: callq fmodf@PLT 681; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 682; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 683; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 684; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 685; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 686; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 687; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 688; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 689; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 690; CHECK-NEXT: callq fmodf@PLT 691; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 692; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 693; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 694; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 695; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 696; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 697; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 698; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 699; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 700; CHECK-NEXT: callq fmodf@PLT 701; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 702; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 703; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 704; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 705; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 706; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 707; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 708; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 709; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 710; CHECK-NEXT: callq fmodf@PLT 711; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 712; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 713; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 714; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 715; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 716; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 717; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 718; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 719; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 720; CHECK-NEXT: callq fmodf@PLT 721; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 722; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 723; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 724; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 725; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 726; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 727; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 728; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 729; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 730; CHECK-NEXT: callq fmodf@PLT 731; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 732; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 733; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 734; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 735; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 736; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 737; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 738; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 739; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 740; CHECK-NEXT: callq fmodf@PLT 741; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 742; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 743; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 744; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 745; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 746; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 747; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 748; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 749; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 750; CHECK-NEXT: callq fmodf@PLT 751; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 752; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 753; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 754; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 755; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 756; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 757; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 758; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 759; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 760; CHECK-NEXT: callq fmodf@PLT 761; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 762; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 763; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 764; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 765; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 766; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 767; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 768; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 769; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 770; CHECK-NEXT: callq fmodf@PLT 771; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 772; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 773; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 774; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 775; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 776; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 777; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 778; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 779; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 780; CHECK-NEXT: callq fmodf@PLT 781; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 782; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 783; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 784; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 785; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 786; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 787; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 788; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 789; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 790; CHECK-NEXT: callq fmodf@PLT 791; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 792; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 793; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 794; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 795; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 796; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 797; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 798; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 799; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 800; CHECK-NEXT: callq fmodf@PLT 801; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 802; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 803; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 804; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 805; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 806; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 807; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 808; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 809; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 810; CHECK-NEXT: callq fmodf@PLT 811; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 812; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 813; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 814; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 815; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 816; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 817; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 818; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 819; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 820; CHECK-NEXT: callq fmodf@PLT 821; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 822; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 823; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 824; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 825; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 826; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 827; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 828; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 829; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 830; CHECK-NEXT: callq fmodf@PLT 831; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 832; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 833; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 834; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 835; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 836; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 837; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 838; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 839; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 840; CHECK-NEXT: callq fmodf@PLT 841; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 842; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 843; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 844; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 845; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 846; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 847; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 848; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 849; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 850; CHECK-NEXT: callq fmodf@PLT 851; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 852; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 853; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 854; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 855; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 856; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 857; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 858; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 859; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 860; CHECK-NEXT: callq fmodf@PLT 861; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 862; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 863; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 864; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 865; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 866; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 867; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 868; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 869; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 870; CHECK-NEXT: callq fmodf@PLT 871; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 872; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 873; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 874; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 875; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 876; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 877; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 878; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 879; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 880; CHECK-NEXT: callq fmodf@PLT 881; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 882; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 883; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 884; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 885; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 886; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 887; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 888; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 889; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 890; CHECK-NEXT: callq fmodf@PLT 891; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 892; CHECK-NEXT: movl %eax, %ebp 893; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 894; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 895; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 896; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 897; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 898; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 899; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 900; CHECK-NEXT: callq fmodf@PLT 901; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 902; CHECK-NEXT: movl %eax, %r14d 903; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 904; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 905; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 906; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 907; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 908; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 909; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 910; CHECK-NEXT: callq fmodf@PLT 911; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 912; CHECK-NEXT: movl %eax, %r12d 913; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 914; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 915; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 916; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 917; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 918; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 919; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 920; CHECK-NEXT: callq fmodf@PLT 921; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 922; CHECK-NEXT: movl %eax, %r13d 923; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 924; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 925; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 926; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 927; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 928; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 929; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 930; CHECK-NEXT: callq fmodf@PLT 931; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 932; CHECK-NEXT: movl %eax, %ebx 933; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 934; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 935; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 936; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 937; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 938; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 939; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 940; CHECK-NEXT: callq fmodf@PLT 941; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 942; CHECK-NEXT: movw %ax, 62(%r15) 943; CHECK-NEXT: movw %bx, 60(%r15) 944; CHECK-NEXT: movw %r13w, 58(%r15) 945; CHECK-NEXT: movw %r12w, 56(%r15) 946; CHECK-NEXT: movw %r14w, 54(%r15) 947; CHECK-NEXT: movw %bp, 52(%r15) 948; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 949; CHECK-NEXT: movw %ax, 50(%r15) 950; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 951; CHECK-NEXT: movw %ax, 48(%r15) 952; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 953; CHECK-NEXT: movw %ax, 46(%r15) 954; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 955; CHECK-NEXT: movw %ax, 44(%r15) 956; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 957; CHECK-NEXT: movw %ax, 42(%r15) 958; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 959; CHECK-NEXT: movw %ax, 40(%r15) 960; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 961; CHECK-NEXT: movw %ax, 38(%r15) 962; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 963; CHECK-NEXT: movw %ax, 36(%r15) 964; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 965; CHECK-NEXT: movw %ax, 34(%r15) 966; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 967; CHECK-NEXT: movw %ax, 32(%r15) 968; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 969; CHECK-NEXT: movw %ax, 30(%r15) 970; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 971; CHECK-NEXT: movw %ax, 28(%r15) 972; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 973; CHECK-NEXT: movw %ax, 26(%r15) 974; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 975; CHECK-NEXT: movw %ax, 24(%r15) 976; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 977; CHECK-NEXT: movw %ax, 22(%r15) 978; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 979; CHECK-NEXT: movw %ax, 20(%r15) 980; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 981; CHECK-NEXT: movw %ax, 18(%r15) 982; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 983; CHECK-NEXT: movw %ax, 16(%r15) 984; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 985; CHECK-NEXT: movw %ax, 14(%r15) 986; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 987; CHECK-NEXT: movw %ax, 12(%r15) 988; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 989; CHECK-NEXT: movw %ax, 10(%r15) 990; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 991; CHECK-NEXT: movw %ax, 8(%r15) 992; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 993; CHECK-NEXT: movw %ax, 6(%r15) 994; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 995; CHECK-NEXT: movw %ax, 4(%r15) 996; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 997; CHECK-NEXT: movw %ax, 2(%r15) 998; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 999; CHECK-NEXT: movw %ax, (%r15) 1000; CHECK-NEXT: addq $248, %rsp 1001; CHECK-NEXT: popq %rbx 1002; CHECK-NEXT: popq %r12 1003; CHECK-NEXT: popq %r13 1004; CHECK-NEXT: popq %r14 1005; CHECK-NEXT: popq %r15 1006; CHECK-NEXT: popq %rbp 1007; CHECK-NEXT: retq 1008 %frem = frem <32 x half> %a0, %a1 1009 store <32 x half> %frem, <32 x half> *%p3 1010 ret void 1011} 1012 1013define void @frem_v16f16(<16 x half> %a0, <16 x half> %a1, <16 x half> *%p3) nounwind { 1014; CHECK-LABEL: frem_v16f16: 1015; CHECK: # %bb.0: 1016; CHECK-NEXT: pushq %rbp 1017; CHECK-NEXT: pushq %r15 1018; CHECK-NEXT: pushq %r14 1019; CHECK-NEXT: pushq %r13 1020; CHECK-NEXT: pushq %r12 1021; CHECK-NEXT: pushq %rbx 1022; CHECK-NEXT: subq $120, %rsp 1023; CHECK-NEXT: movl %r9d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1024; CHECK-NEXT: movl %r8d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1025; CHECK-NEXT: movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1026; CHECK-NEXT: movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1027; CHECK-NEXT: movl %esi, %r15d 1028; CHECK-NEXT: movl %edi, %r14d 1029; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rbp 1030; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1031; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1032; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1033; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1034; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1035; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1036; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1037; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1038; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1039; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1040; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1041; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1042; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1043; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1044; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1045; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1046; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1047; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1048; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1049; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1050; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1051; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1052; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1053; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1054; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1055; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1056; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1057; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1058; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1059; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1060; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1061; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1062; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1063; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1064; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1065; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1066; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1067; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1068; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1069; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1070; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1071; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1072; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1073; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1074; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %r13d 1075; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %r12d 1076; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %ebx 1077; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %edi 1078; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1079; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1080; CHECK-NEXT: movzwl %r14w, %edi 1081; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1082; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1083; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1084; CHECK-NEXT: callq fmodf@PLT 1085; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1086; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1087; CHECK-NEXT: movl %ebx, %edi 1088; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1089; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1090; CHECK-NEXT: movzwl %r15w, %edi 1091; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1092; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1093; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1094; CHECK-NEXT: callq fmodf@PLT 1095; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1096; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1097; CHECK-NEXT: movl %r12d, %edi 1098; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1099; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1100; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 1101; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1102; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1103; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1104; CHECK-NEXT: callq fmodf@PLT 1105; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1106; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1107; CHECK-NEXT: movl %r13d, %edi 1108; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1109; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1110; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 1111; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1112; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1113; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1114; CHECK-NEXT: callq fmodf@PLT 1115; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1116; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1117; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1118; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1119; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1120; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 1121; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1122; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1123; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1124; CHECK-NEXT: callq fmodf@PLT 1125; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1126; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1127; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1128; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1129; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1130; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 1131; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1132; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1133; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1134; CHECK-NEXT: callq fmodf@PLT 1135; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1136; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1137; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1138; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1139; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1140; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1141; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1142; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1143; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1144; CHECK-NEXT: callq fmodf@PLT 1145; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1146; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1147; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1148; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1149; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1150; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1151; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1152; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1153; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1154; CHECK-NEXT: callq fmodf@PLT 1155; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1156; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1157; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1158; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1159; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1160; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1161; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1162; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1163; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1164; CHECK-NEXT: callq fmodf@PLT 1165; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1166; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1167; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1168; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1169; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1170; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1171; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1172; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1173; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1174; CHECK-NEXT: callq fmodf@PLT 1175; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1176; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1177; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1178; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1179; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1180; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1181; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1182; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1183; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1184; CHECK-NEXT: callq fmodf@PLT 1185; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1186; CHECK-NEXT: movl %eax, %r13d 1187; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1188; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1189; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1190; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1191; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1192; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1193; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1194; CHECK-NEXT: callq fmodf@PLT 1195; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1196; CHECK-NEXT: movl %eax, %r12d 1197; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1198; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1199; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1200; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1201; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1202; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1203; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1204; CHECK-NEXT: callq fmodf@PLT 1205; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1206; CHECK-NEXT: movl %eax, %ebx 1207; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1208; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1209; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1210; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1211; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1212; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1213; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1214; CHECK-NEXT: callq fmodf@PLT 1215; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1216; CHECK-NEXT: movl %eax, %r14d 1217; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1218; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1219; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1220; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1221; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1222; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1223; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1224; CHECK-NEXT: callq fmodf@PLT 1225; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1226; CHECK-NEXT: movl %eax, %r15d 1227; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1228; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1229; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1230; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1231; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1232; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1233; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1234; CHECK-NEXT: callq fmodf@PLT 1235; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1236; CHECK-NEXT: movw %ax, 30(%rbp) 1237; CHECK-NEXT: movw %r15w, 28(%rbp) 1238; CHECK-NEXT: movw %r14w, 26(%rbp) 1239; CHECK-NEXT: movw %bx, 24(%rbp) 1240; CHECK-NEXT: movw %r12w, 22(%rbp) 1241; CHECK-NEXT: movw %r13w, 20(%rbp) 1242; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1243; CHECK-NEXT: movw %ax, 18(%rbp) 1244; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1245; CHECK-NEXT: movw %ax, 16(%rbp) 1246; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1247; CHECK-NEXT: movw %ax, 14(%rbp) 1248; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1249; CHECK-NEXT: movw %ax, 12(%rbp) 1250; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1251; CHECK-NEXT: movw %ax, 10(%rbp) 1252; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1253; CHECK-NEXT: movw %ax, 8(%rbp) 1254; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1255; CHECK-NEXT: movw %ax, 6(%rbp) 1256; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1257; CHECK-NEXT: movw %ax, 4(%rbp) 1258; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1259; CHECK-NEXT: movw %ax, 2(%rbp) 1260; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1261; CHECK-NEXT: movw %ax, (%rbp) 1262; CHECK-NEXT: addq $120, %rsp 1263; CHECK-NEXT: popq %rbx 1264; CHECK-NEXT: popq %r12 1265; CHECK-NEXT: popq %r13 1266; CHECK-NEXT: popq %r14 1267; CHECK-NEXT: popq %r15 1268; CHECK-NEXT: popq %rbp 1269; CHECK-NEXT: retq 1270 %frem = frem <16 x half> %a0, %a1 1271 store <16 x half> %frem, <16 x half> *%p3 1272 ret void 1273} 1274 1275define void @frem_v8f16(<8 x half> %a0, <8 x half> %a1, <8 x half> *%p3) nounwind { 1276; CHECK-LABEL: frem_v8f16: 1277; CHECK: # %bb.0: 1278; CHECK-NEXT: pushq %rbp 1279; CHECK-NEXT: pushq %r15 1280; CHECK-NEXT: pushq %r14 1281; CHECK-NEXT: pushq %r13 1282; CHECK-NEXT: pushq %r12 1283; CHECK-NEXT: pushq %rbx 1284; CHECK-NEXT: subq $56, %rsp 1285; CHECK-NEXT: movl %r9d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1286; CHECK-NEXT: movl %r8d, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1287; CHECK-NEXT: movl %ecx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1288; CHECK-NEXT: movl %edx, %ebx 1289; CHECK-NEXT: movl %esi, %r13d 1290; CHECK-NEXT: movl %edi, %r15d 1291; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1292; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1293; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1294; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1295; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1296; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1297; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1298; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1299; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1300; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1301; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %eax 1302; CHECK-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1303; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %r14d 1304; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %ebp 1305; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %r12d 1306; CHECK-NEXT: movzwl {{[0-9]+}}(%rsp), %edi 1307; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1308; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1309; CHECK-NEXT: movzwl %r15w, %edi 1310; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1311; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1312; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1313; CHECK-NEXT: callq fmodf@PLT 1314; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1315; CHECK-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill 1316; CHECK-NEXT: movl %r12d, %edi 1317; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1318; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1319; CHECK-NEXT: movzwl %r13w, %edi 1320; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1321; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1322; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1323; CHECK-NEXT: callq fmodf@PLT 1324; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1325; CHECK-NEXT: movl %eax, %r12d 1326; CHECK-NEXT: movl %ebp, %edi 1327; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1328; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1329; CHECK-NEXT: movzwl %bx, %edi 1330; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1331; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1332; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1333; CHECK-NEXT: callq fmodf@PLT 1334; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1335; CHECK-NEXT: movl %eax, %r13d 1336; CHECK-NEXT: movl %r14d, %edi 1337; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1338; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1339; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 1340; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1341; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1342; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1343; CHECK-NEXT: callq fmodf@PLT 1344; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1345; CHECK-NEXT: movl %eax, %r14d 1346; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1347; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1348; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1349; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 1350; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1351; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1352; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1353; CHECK-NEXT: callq fmodf@PLT 1354; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1355; CHECK-NEXT: movl %eax, %r15d 1356; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1357; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1358; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1359; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 2-byte Folded Reload 1360; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1361; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1362; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1363; CHECK-NEXT: callq fmodf@PLT 1364; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1365; CHECK-NEXT: movl %eax, %ebp 1366; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1367; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1368; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1369; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1370; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1371; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1372; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1373; CHECK-NEXT: callq fmodf@PLT 1374; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1375; CHECK-NEXT: movl %eax, %ebx 1376; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1377; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1378; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill 1379; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload 1380; CHECK-NEXT: callq __gnu_h2f_ieee@PLT 1381; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload 1382; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero 1383; CHECK-NEXT: callq fmodf@PLT 1384; CHECK-NEXT: callq __gnu_f2h_ieee@PLT 1385; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rcx 1386; CHECK-NEXT: movw %ax, 14(%rcx) 1387; CHECK-NEXT: movw %bx, 12(%rcx) 1388; CHECK-NEXT: movw %bp, 10(%rcx) 1389; CHECK-NEXT: movw %r15w, 8(%rcx) 1390; CHECK-NEXT: movw %r14w, 6(%rcx) 1391; CHECK-NEXT: movw %r13w, 4(%rcx) 1392; CHECK-NEXT: movw %r12w, 2(%rcx) 1393; CHECK-NEXT: movzwl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 2-byte Folded Reload 1394; CHECK-NEXT: movw %ax, (%rcx) 1395; CHECK-NEXT: addq $56, %rsp 1396; CHECK-NEXT: popq %rbx 1397; CHECK-NEXT: popq %r12 1398; CHECK-NEXT: popq %r13 1399; CHECK-NEXT: popq %r14 1400; CHECK-NEXT: popq %r15 1401; CHECK-NEXT: popq %rbp 1402; CHECK-NEXT: retq 1403 %frem = frem <8 x half> %a0, %a1 1404 store <8 x half> %frem, <8 x half> *%p3 1405 ret void 1406} 1407 1408define void @frem_v4f80(<4 x x86_fp80> %a0, <4 x x86_fp80> %a1, <4 x x86_fp80> *%p3) nounwind { 1409; CHECK-LABEL: frem_v4f80: 1410; CHECK: # %bb.0: 1411; CHECK-NEXT: pushq %rbx 1412; CHECK-NEXT: subq $128, %rsp 1413; CHECK-NEXT: movq %rdi, %rbx 1414; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1415; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1416; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1417; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1418; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1419; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1420; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1421; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1422; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1423; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1424; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1425; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1426; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1427; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 1428; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp) 1429; CHECK-NEXT: fstpt (%rsp) 1430; CHECK-NEXT: callq fmodl@PLT 1431; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1432; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1433; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp) 1434; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1435; CHECK-NEXT: fstpt (%rsp) 1436; CHECK-NEXT: callq fmodl@PLT 1437; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1438; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1439; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp) 1440; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1441; CHECK-NEXT: fstpt (%rsp) 1442; CHECK-NEXT: callq fmodl@PLT 1443; CHECK-NEXT: fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill 1444; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1445; CHECK-NEXT: fstpt {{[0-9]+}}(%rsp) 1446; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1447; CHECK-NEXT: fstpt (%rsp) 1448; CHECK-NEXT: callq fmodl@PLT 1449; CHECK-NEXT: fstpt 30(%rbx) 1450; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1451; CHECK-NEXT: fstpt 20(%rbx) 1452; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1453; CHECK-NEXT: fstpt 10(%rbx) 1454; CHECK-NEXT: fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload 1455; CHECK-NEXT: fstpt (%rbx) 1456; CHECK-NEXT: addq $128, %rsp 1457; CHECK-NEXT: popq %rbx 1458; CHECK-NEXT: retq 1459 %frem = frem <4 x x86_fp80> %a0, %a1 1460 store <4 x x86_fp80> %frem, <4 x x86_fp80> *%p3 1461 ret void 1462} 1463