1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mattr=+mmx,+sse2 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i64 @t0(<1 x i64>* %a, i32* %b) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t0: 5*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 6*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1:[a-z]+]]), %mm0 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psllq (%[[REG2:[a-z]+]]), %mm0 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 12*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 13*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 14*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.pslli.q(x86_mmx %1, i32 %2) 15*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 16*9880d681SAndroid Build Coastguard Worker ret i64 %4 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.pslli.q(x86_mmx, i32) 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i64 @t1(<1 x i64>* %a, i32* %b) { 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t1: 22*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 23*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1]]), %mm0 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrlq (%[[REG2]]), %mm0 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 27*9880d681SAndroid Build Coastguard Workerentry: 28*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 29*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 30*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 31*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx %1, i32 %2) 32*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 33*9880d681SAndroid Build Coastguard Worker ret i64 %4 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx, i32) 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine i64 @t2(<1 x i64>* %a, i32* %b) { 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2: 39*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 40*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1]]), %mm0 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psllw (%[[REG2]]), %mm0 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 44*9880d681SAndroid Build Coastguard Workerentry: 45*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 46*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 47*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 48*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.pslli.w(x86_mmx %1, i32 %2) 49*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 50*9880d681SAndroid Build Coastguard Worker ret i64 %4 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.pslli.w(x86_mmx, i32) 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine i64 @t3(<1 x i64>* %a, i32* %b) { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t3: 56*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 57*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1]]), %mm0 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrlw (%[[REG2]]), %mm0 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 61*9880d681SAndroid Build Coastguard Workerentry: 62*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 63*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 64*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 65*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.psrli.w(x86_mmx %1, i32 %2) 66*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 67*9880d681SAndroid Build Coastguard Worker ret i64 %4 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrli.w(x86_mmx, i32) 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine i64 @t4(<1 x i64>* %a, i32* %b) { 72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t4: 73*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 74*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1]]), %mm0 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslld (%[[REG2]]), %mm0 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 78*9880d681SAndroid Build Coastguard Workerentry: 79*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 80*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 81*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 82*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.pslli.d(x86_mmx %1, i32 %2) 83*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 84*9880d681SAndroid Build Coastguard Worker ret i64 %4 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.pslli.d(x86_mmx, i32) 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerdefine i64 @t5(<1 x i64>* %a, i32* %b) { 89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t5: 90*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 91*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1]]), %mm0 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrld (%[[REG2]]), %mm0 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 95*9880d681SAndroid Build Coastguard Workerentry: 96*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 97*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 98*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 99*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.psrli.d(x86_mmx %1, i32 %2) 100*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 101*9880d681SAndroid Build Coastguard Worker ret i64 %4 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrli.d(x86_mmx, i32) 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerdefine i64 @t6(<1 x i64>* %a, i32* %b) { 106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t6: 107*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 108*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1]]), %mm0 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psraw (%[[REG2]]), %mm0 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 112*9880d681SAndroid Build Coastguard Workerentry: 113*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 114*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 115*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 116*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.psrai.w(x86_mmx %1, i32 %2) 117*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 118*9880d681SAndroid Build Coastguard Worker ret i64 %4 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrai.w(x86_mmx, i32) 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerdefine i64 @t7(<1 x i64>* %a, i32* %b) { 123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t7: 124*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 125*9880d681SAndroid Build Coastguard Worker; CHECK: movq (%[[REG1]]), %mm0 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrad (%[[REG2]]), %mm0 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 129*9880d681SAndroid Build Coastguard Workerentry: 130*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x i64>* %a to x86_mmx* 131*9880d681SAndroid Build Coastguard Worker %1 = load x86_mmx, x86_mmx* %0, align 8 132*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %b, align 4 133*9880d681SAndroid Build Coastguard Worker %3 = tail call x86_mmx @llvm.x86.mmx.psrai.d(x86_mmx %1, i32 %2) 134*9880d681SAndroid Build Coastguard Worker %4 = bitcast x86_mmx %3 to i64 135*9880d681SAndroid Build Coastguard Worker ret i64 %4 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrai.d(x86_mmx, i32) 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine i64 @tt0(x86_mmx %t, x86_mmx* %q) { 140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt0: 141*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 142*9880d681SAndroid Build Coastguard Worker; CHECK: paddb (%[[REG3:[a-z]+]]), %mm0 143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 146*9880d681SAndroid Build Coastguard Workerentry: 147*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 148*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.padd.b(x86_mmx %t, x86_mmx %v) 149*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 150*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 151*9880d681SAndroid Build Coastguard Worker ret i64 %s 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.b(x86_mmx, x86_mmx) 154*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.mmx.emms() 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerdefine i64 @tt1(x86_mmx %t, x86_mmx* %q) { 157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt1: 158*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 159*9880d681SAndroid Build Coastguard Worker; CHECK: paddw (%[[REG3]]), %mm0 160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 163*9880d681SAndroid Build Coastguard Workerentry: 164*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 165*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.padd.w(x86_mmx %t, x86_mmx %v) 166*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 167*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 168*9880d681SAndroid Build Coastguard Worker ret i64 %s 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.w(x86_mmx, x86_mmx) 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine i64 @tt2(x86_mmx %t, x86_mmx* %q) { 173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt2: 174*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 175*9880d681SAndroid Build Coastguard Worker; CHECK: paddd (%[[REG3]]), %mm0 176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 179*9880d681SAndroid Build Coastguard Workerentry: 180*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 181*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.padd.d(x86_mmx %t, x86_mmx %v) 182*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 183*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 184*9880d681SAndroid Build Coastguard Worker ret i64 %s 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.d(x86_mmx, x86_mmx) 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Workerdefine i64 @tt3(x86_mmx %t, x86_mmx* %q) { 189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt3: 190*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 191*9880d681SAndroid Build Coastguard Worker; CHECK: paddq (%[[REG3]]), %mm0 192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 195*9880d681SAndroid Build Coastguard Workerentry: 196*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 197*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.padd.q(x86_mmx %t, x86_mmx %v) 198*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 199*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 200*9880d681SAndroid Build Coastguard Worker ret i64 %s 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.q(x86_mmx, x86_mmx) 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Workerdefine i64 @tt4(x86_mmx %t, x86_mmx* %q) { 205*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt4: 206*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 207*9880d681SAndroid Build Coastguard Worker; CHECK: paddusb (%[[REG3]]), %mm0 208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 211*9880d681SAndroid Build Coastguard Workerentry: 212*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 213*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx %t, x86_mmx %v) 214*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 215*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 216*9880d681SAndroid Build Coastguard Worker ret i64 %s 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx, x86_mmx) 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerdefine i64 @tt5(x86_mmx %t, x86_mmx* %q) { 221*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt5: 222*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 223*9880d681SAndroid Build Coastguard Worker; CHECK: paddusw (%[[REG3]]), %mm0 224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 227*9880d681SAndroid Build Coastguard Workerentry: 228*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 229*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx %t, x86_mmx %v) 230*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 231*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 232*9880d681SAndroid Build Coastguard Worker ret i64 %s 233*9880d681SAndroid Build Coastguard Worker} 234*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx, x86_mmx) 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Workerdefine i64 @tt6(x86_mmx %t, x86_mmx* %q) { 237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt6: 238*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 239*9880d681SAndroid Build Coastguard Worker; CHECK: psrlw (%[[REG3]]), %mm0 240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 243*9880d681SAndroid Build Coastguard Workerentry: 244*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 245*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx %t, x86_mmx %v) 246*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 247*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 248*9880d681SAndroid Build Coastguard Worker ret i64 %s 249*9880d681SAndroid Build Coastguard Worker} 250*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx, x86_mmx) 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Workerdefine i64 @tt7(x86_mmx %t, x86_mmx* %q) { 253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt7: 254*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 255*9880d681SAndroid Build Coastguard Worker; CHECK: psrld (%[[REG3]]), %mm0 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 259*9880d681SAndroid Build Coastguard Workerentry: 260*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 261*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx %t, x86_mmx %v) 262*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 263*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 264*9880d681SAndroid Build Coastguard Worker ret i64 %s 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx, x86_mmx) 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine i64 @tt8(x86_mmx %t, x86_mmx* %q) { 269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt8: 270*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0:{{.*}} %entry 271*9880d681SAndroid Build Coastguard Worker; CHECK: psrlq (%[[REG3]]), %mm0 272*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %mm0, %rax 273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: emms 274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 275*9880d681SAndroid Build Coastguard Workerentry: 276*9880d681SAndroid Build Coastguard Worker %v = load x86_mmx, x86_mmx* %q 277*9880d681SAndroid Build Coastguard Worker %u = tail call x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx %t, x86_mmx %v) 278*9880d681SAndroid Build Coastguard Worker %s = bitcast x86_mmx %u to i64 279*9880d681SAndroid Build Coastguard Worker call void @llvm.x86.mmx.emms() 280*9880d681SAndroid Build Coastguard Worker ret i64 %s 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx, x86_mmx) 283