xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vec_shift4.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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