208 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s3 4define <8 x i32> @foo(<8 x i32> %t, <8 x i32> %u) {5; CHECK-LABEL: foo:6; CHECK: # %bb.0:7; CHECK-NEXT: movdqa %xmm0, %xmm48; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]9; CHECK-NEXT: movd %xmm0, %eax10; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[3,3,3,3]11; CHECK-NEXT: movd %xmm0, %ecx12; CHECK-NEXT: cltd13; CHECK-NEXT: idivl %ecx14; CHECK-NEXT: movd %edx, %xmm015; CHECK-NEXT: pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]16; CHECK-NEXT: movd %xmm5, %eax17; CHECK-NEXT: pshufd {{.*#+}} xmm5 = xmm2[2,3,2,3]18; CHECK-NEXT: movd %xmm5, %ecx19; CHECK-NEXT: cltd20; CHECK-NEXT: idivl %ecx21; CHECK-NEXT: movd %edx, %xmm522; CHECK-NEXT: punpckldq {{.*#+}} xmm5 = xmm5[0],xmm0[0],xmm5[1],xmm0[1]23; CHECK-NEXT: movd %xmm4, %eax24; CHECK-NEXT: movd %xmm2, %ecx25; CHECK-NEXT: cltd26; CHECK-NEXT: idivl %ecx27; CHECK-NEXT: movd %edx, %xmm028; CHECK-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,1,1]29; CHECK-NEXT: movd %xmm4, %eax30; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,1,1]31; CHECK-NEXT: movd %xmm2, %ecx32; CHECK-NEXT: cltd33; CHECK-NEXT: idivl %ecx34; CHECK-NEXT: movd %edx, %xmm235; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]36; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]37; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm1[3,3,3,3]38; CHECK-NEXT: movd %xmm2, %eax39; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm3[3,3,3,3]40; CHECK-NEXT: movd %xmm2, %ecx41; CHECK-NEXT: cltd42; CHECK-NEXT: idivl %ecx43; CHECK-NEXT: movd %edx, %xmm244; CHECK-NEXT: pshufd {{.*#+}} xmm4 = xmm1[2,3,2,3]45; CHECK-NEXT: movd %xmm4, %eax46; CHECK-NEXT: pshufd {{.*#+}} xmm4 = xmm3[2,3,2,3]47; CHECK-NEXT: movd %xmm4, %ecx48; CHECK-NEXT: cltd49; CHECK-NEXT: idivl %ecx50; CHECK-NEXT: movd %edx, %xmm451; CHECK-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]52; CHECK-NEXT: movd %xmm1, %eax53; CHECK-NEXT: movd %xmm3, %ecx54; CHECK-NEXT: cltd55; CHECK-NEXT: idivl %ecx56; CHECK-NEXT: movd %edx, %xmm257; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,1,1]58; CHECK-NEXT: movd %xmm1, %eax59; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,1,1]60; CHECK-NEXT: movd %xmm1, %ecx61; CHECK-NEXT: cltd62; CHECK-NEXT: idivl %ecx63; CHECK-NEXT: movd %edx, %xmm164; CHECK-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]65; CHECK-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]66; CHECK-NEXT: movdqa %xmm2, %xmm167; CHECK-NEXT: retq68 %m = srem <8 x i32> %t, %u69 ret <8 x i32> %m70}71define <8 x i32> @bar(<8 x i32> %t, <8 x i32> %u) {72; CHECK-LABEL: bar:73; CHECK: # %bb.0:74; CHECK-NEXT: movdqa %xmm0, %xmm475; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]76; CHECK-NEXT: movd %xmm0, %eax77; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[3,3,3,3]78; CHECK-NEXT: movd %xmm0, %ecx79; CHECK-NEXT: xorl %edx, %edx80; CHECK-NEXT: divl %ecx81; CHECK-NEXT: movd %edx, %xmm082; CHECK-NEXT: pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]83; CHECK-NEXT: movd %xmm5, %eax84; CHECK-NEXT: pshufd {{.*#+}} xmm5 = xmm2[2,3,2,3]85; CHECK-NEXT: movd %xmm5, %ecx86; CHECK-NEXT: xorl %edx, %edx87; CHECK-NEXT: divl %ecx88; CHECK-NEXT: movd %edx, %xmm589; CHECK-NEXT: punpckldq {{.*#+}} xmm5 = xmm5[0],xmm0[0],xmm5[1],xmm0[1]90; CHECK-NEXT: movd %xmm4, %eax91; CHECK-NEXT: movd %xmm2, %ecx92; CHECK-NEXT: xorl %edx, %edx93; CHECK-NEXT: divl %ecx94; CHECK-NEXT: movd %edx, %xmm095; CHECK-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,1,1]96; CHECK-NEXT: movd %xmm4, %eax97; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,1,1]98; CHECK-NEXT: movd %xmm2, %ecx99; CHECK-NEXT: xorl %edx, %edx100; CHECK-NEXT: divl %ecx101; CHECK-NEXT: movd %edx, %xmm2102; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]103; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]104; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm1[3,3,3,3]105; CHECK-NEXT: movd %xmm2, %eax106; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm3[3,3,3,3]107; CHECK-NEXT: movd %xmm2, %ecx108; CHECK-NEXT: xorl %edx, %edx109; CHECK-NEXT: divl %ecx110; CHECK-NEXT: movd %edx, %xmm2111; CHECK-NEXT: pshufd {{.*#+}} xmm4 = xmm1[2,3,2,3]112; CHECK-NEXT: movd %xmm4, %eax113; CHECK-NEXT: pshufd {{.*#+}} xmm4 = xmm3[2,3,2,3]114; CHECK-NEXT: movd %xmm4, %ecx115; CHECK-NEXT: xorl %edx, %edx116; CHECK-NEXT: divl %ecx117; CHECK-NEXT: movd %edx, %xmm4118; CHECK-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]119; CHECK-NEXT: movd %xmm1, %eax120; CHECK-NEXT: movd %xmm3, %ecx121; CHECK-NEXT: xorl %edx, %edx122; CHECK-NEXT: divl %ecx123; CHECK-NEXT: movd %edx, %xmm2124; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,1,1]125; CHECK-NEXT: movd %xmm1, %eax126; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,1,1]127; CHECK-NEXT: movd %xmm1, %ecx128; CHECK-NEXT: xorl %edx, %edx129; CHECK-NEXT: divl %ecx130; CHECK-NEXT: movd %edx, %xmm1131; CHECK-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]132; CHECK-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]133; CHECK-NEXT: movdqa %xmm2, %xmm1134; CHECK-NEXT: retq135 %m = urem <8 x i32> %t, %u136 ret <8 x i32> %m137}138define <8 x float> @qux(<8 x float> %t, <8 x float> %u) {139; CHECK-LABEL: qux:140; CHECK: # %bb.0:141; CHECK-NEXT: subq $104, %rsp142; CHECK-NEXT: .cfi_def_cfa_offset 112143; CHECK-NEXT: movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill144; CHECK-NEXT: movaps %xmm2, (%rsp) # 16-byte Spill145; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill146; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill147; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]148; CHECK-NEXT: movaps %xmm2, %xmm1149; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3],xmm2[3,3]150; CHECK-NEXT: callq fmodf@PLT151; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill152; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload153; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]154; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload155; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1]156; CHECK-NEXT: callq fmodf@PLT157; CHECK-NEXT: unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload158; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]159; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill160; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload161; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload162; CHECK-NEXT: callq fmodf@PLT163; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill164; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload165; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]166; CHECK-NEXT: movaps (%rsp), %xmm1 # 16-byte Reload167; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]168; CHECK-NEXT: callq fmodf@PLT169; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload170; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]171; CHECK-NEXT: unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload172; CHECK-NEXT: # xmm1 = xmm1[0],mem[0]173; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill174; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload175; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]176; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload177; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]178; CHECK-NEXT: callq fmodf@PLT179; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill180; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload181; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]182; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload183; CHECK-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1]184; CHECK-NEXT: callq fmodf@PLT185; CHECK-NEXT: unpcklps (%rsp), %xmm0 # 16-byte Folded Reload186; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]187; CHECK-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill188; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload189; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload190; CHECK-NEXT: callq fmodf@PLT191; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill192; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload193; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]194; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload195; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]196; CHECK-NEXT: callq fmodf@PLT197; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload198; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]199; CHECK-NEXT: unpcklpd (%rsp), %xmm1 # 16-byte Folded Reload200; CHECK-NEXT: # xmm1 = xmm1[0],mem[0]201; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload202; CHECK-NEXT: addq $104, %rsp203; CHECK-NEXT: .cfi_def_cfa_offset 8204; CHECK-NEXT: retq205 %m = frem <8 x float> %t, %u206 ret <8 x float> %m207}208