1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shl1(<4 x i32> %r, <4 x i32> %a) nounwind readnone ssp { 6*9880d681SAndroid Build Coastguard Worker; X32-LABEL: shl1: 7*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: # %entry 8*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pslld $23, %xmm1 9*9880d681SAndroid Build Coastguard Worker; X32-NEXT: paddd {{\.LCPI.*}}, %xmm1 10*9880d681SAndroid Build Coastguard Worker; X32-NEXT: cvttps2dq %xmm1, %xmm1 11*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pmulld %xmm1, %xmm0 12*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 13*9880d681SAndroid Build Coastguard Worker; 14*9880d681SAndroid Build Coastguard Worker; X64-LABEL: shl1: 15*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: # %entry 16*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pslld $23, %xmm1 17*9880d681SAndroid Build Coastguard Worker; X64-NEXT: paddd {{.*}}(%rip), %xmm1 18*9880d681SAndroid Build Coastguard Worker; X64-NEXT: cvttps2dq %xmm1, %xmm1 19*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pmulld %xmm1, %xmm0 20*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shll 23*9880d681SAndroid Build Coastguard Worker; CHECK: pslld 24*9880d681SAndroid Build Coastguard Worker; CHECK: paddd 25*9880d681SAndroid Build Coastguard Worker; CHECK: cvttps2dq 26*9880d681SAndroid Build Coastguard Worker; CHECK: pmulld 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i32> %r, %a ; <<4 x i32>> [#uses=1] 29*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast <4 x i32> %shl to <2 x i64> ; <<2 x i64>> [#uses=1] 30*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp2 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shl2(<16 x i8> %r, <16 x i8> %a) nounwind readnone ssp { 34*9880d681SAndroid Build Coastguard Worker; X32-LABEL: shl2: 35*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: # %entry 36*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm0, %xmm2 37*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psllw $5, %xmm1 38*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm2, %xmm3 39*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psllw $4, %xmm3 40*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pand {{\.LCPI.*}}, %xmm3 41*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm1, %xmm0 42*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pblendvb %xmm3, %xmm2 43*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm2, %xmm3 44*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psllw $2, %xmm3 45*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pand {{\.LCPI.*}}, %xmm3 46*9880d681SAndroid Build Coastguard Worker; X32-NEXT: paddb %xmm1, %xmm1 47*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm1, %xmm0 48*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pblendvb %xmm3, %xmm2 49*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm2, %xmm3 50*9880d681SAndroid Build Coastguard Worker; X32-NEXT: paddb %xmm3, %xmm3 51*9880d681SAndroid Build Coastguard Worker; X32-NEXT: paddb %xmm1, %xmm1 52*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm1, %xmm0 53*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pblendvb %xmm3, %xmm2 54*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm2, %xmm0 55*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 56*9880d681SAndroid Build Coastguard Worker; 57*9880d681SAndroid Build Coastguard Worker; X64-LABEL: shl2: 58*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: # %entry 59*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm0, %xmm2 60*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psllw $5, %xmm1 61*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm2, %xmm3 62*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psllw $4, %xmm3 63*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pand {{.*}}(%rip), %xmm3 64*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm1, %xmm0 65*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pblendvb %xmm3, %xmm2 66*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm2, %xmm3 67*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psllw $2, %xmm3 68*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pand {{.*}}(%rip), %xmm3 69*9880d681SAndroid Build Coastguard Worker; X64-NEXT: paddb %xmm1, %xmm1 70*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm1, %xmm0 71*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pblendvb %xmm3, %xmm2 72*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm2, %xmm3 73*9880d681SAndroid Build Coastguard Worker; X64-NEXT: paddb %xmm3, %xmm3 74*9880d681SAndroid Build Coastguard Worker; X64-NEXT: paddb %xmm1, %xmm1 75*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm1, %xmm0 76*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pblendvb %xmm3, %xmm2 77*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm2, %xmm0 78*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 79*9880d681SAndroid Build Coastguard Workerentry: 80*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shlb 81*9880d681SAndroid Build Coastguard Worker; CHECK: pblendvb 82*9880d681SAndroid Build Coastguard Worker; CHECK: pblendvb 83*9880d681SAndroid Build Coastguard Worker; CHECK: pblendvb 84*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i8> %r, %a ; <<16 x i8>> [#uses=1] 85*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast <16 x i8> %shl to <2 x i64> ; <<2 x i64>> [#uses=1] 86*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp2 87*9880d681SAndroid Build Coastguard Worker} 88