1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @foo(<4 x i32> %t, <4 x i32> %u) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo: 6*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm0[3,1,2,3] 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm2, %eax 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm1[3,1,2,3] 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm2, %ecx 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cltd 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: idivl %ecx 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm2 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,2,3] 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm3, %eax 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm1[1,1,2,3] 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm3, %ecx 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cltd 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: idivl %ecx 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm3 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1] 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %eax 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm1, %ecx 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cltd 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: idivl %ecx 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm2 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %eax 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1] 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %ecx 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cltd 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: idivl %ecx 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm0 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1] 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm2, %xmm0 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker; 39*9880d681SAndroid Build Coastguard Worker %m = srem <4 x i32> %t, %u 40*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %m 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @bar(<4 x i32> %t, <4 x i32> %u) { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bar: 45*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm0[3,1,2,3] 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm2, %eax 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm1[3,1,2,3] 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm2, %ecx 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorl %edx, %edx 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: divl %ecx 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm2 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,2,3] 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm3, %eax 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm1[1,1,2,3] 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm3, %ecx 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorl %edx, %edx 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: divl %ecx 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm3 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1] 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %eax 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm1, %ecx 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorl %edx, %edx 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: divl %ecx 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm2 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %eax 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1] 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %xmm0, %ecx 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xorl %edx, %edx 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: divl %ecx 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %edx, %xmm0 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1] 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movdqa %xmm2, %xmm0 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 77*9880d681SAndroid Build Coastguard Worker; 78*9880d681SAndroid Build Coastguard Worker %m = urem <4 x i32> %t, %u 79*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %m 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @qux(<4 x float> %t, <4 x float> %u) { 83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qux: 84*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: subq $72, %rsp 86*9880d681SAndroid Build Coastguard Worker; CHECK: movaps %xmm1, {{[0-9]+}}(%rsp) 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,1,2,3] 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,1,2,3] 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq fmodf 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps %xmm0, (%rsp) 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps {{[0-9]+}}(%rsp), %xmm0 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,2,3] 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps {{[0-9]+}}(%rsp), %xmm1 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,2,3] 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq fmodf 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: unpcklps (%rsp), %xmm0 98*9880d681SAndroid Build Coastguard Worker; CHECK: movaps %xmm0, (%rsp) 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps {{[0-9]+}}(%rsp), %xmm0 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps {{[0-9]+}}(%rsp), %xmm1 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq fmodf 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movapd {{[0-9]+}}(%rsp), %xmm0 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufpd {{.*#+}} xmm0 = xmm0[1,0] 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movapd {{[0-9]+}}(%rsp), %xmm1 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufpd {{.*#+}} xmm1 = xmm1[1,0] 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: callq fmodf 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movaps {{[0-9]+}}(%rsp), %xmm1 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: unpcklps (%rsp), %xmm1 111*9880d681SAndroid Build Coastguard Worker; CHECK: movaps %xmm1, %xmm0 112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addq $72, %rsp 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 114*9880d681SAndroid Build Coastguard Worker; 115*9880d681SAndroid Build Coastguard Worker %m = frem <4 x float> %t, %u 116*9880d681SAndroid Build Coastguard Worker ret <4 x float> %m 117*9880d681SAndroid Build Coastguard Worker} 118