xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-shuffle-sse1.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 -mcpu=x86-64 -mattr=-sse2 | FileCheck %s --check-prefix=SSE1
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0001(<4 x float> %a, <4 x float> %b) {
7*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_0001:
8*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
9*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,1]
10*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
11*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1>
12*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0020(<4 x float> %a, <4 x float> %b) {
15*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_0020:
16*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
17*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,2,0]
18*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
19*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0>
20*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0300(<4 x float> %a, <4 x float> %b) {
23*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_0300:
24*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
25*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3,0,0]
26*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
27*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0>
28*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_1000(<4 x float> %a, <4 x float> %b) {
31*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_1000:
32*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
33*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0,0,0]
34*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
35*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
36*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_2200(<4 x float> %a, <4 x float> %b) {
39*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_2200:
40*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
41*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,2,0,0]
42*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
43*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0>
44*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_3330(<4 x float> %a, <4 x float> %b) {
47*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_3330:
48*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
49*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,0]
50*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
51*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
52*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_3210(<4 x float> %a, <4 x float> %b) {
55*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_3210:
56*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
57*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
58*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
59*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
60*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0011(<4 x float> %a, <4 x float> %b) {
63*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_0011:
64*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
65*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0,0,1,1]
66*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
67*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
68*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_2233(<4 x float> %a, <4 x float> %b) {
71*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_2233:
72*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
73*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2,2,3,3]
74*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
75*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 2, i32 3, i32 3>
76*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0022(<4 x float> %a, <4 x float> %b) {
79*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_0022:
80*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
81*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,2,2]
82*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
83*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
84*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_1133(<4 x float> %a, <4 x float> %b) {
87*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_1133:
88*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
89*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,3,3]
90*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
91*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
92*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0145(<4 x float> %a, <4 x float> %b) {
95*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_0145:
96*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
97*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
98*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
99*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
100*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_6723(<4 x float> %a, <4 x float> %b) {
103*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_6723:
104*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
105*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1]
106*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
107*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
108*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_4zzz(<4 x float> %a) {
112*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_4zzz:
113*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
114*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm1, %xmm1
115*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]
116*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movaps %xmm1, %xmm0
117*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
118*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
119*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_z4zz(<4 x float> %a) {
123*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_z4zz:
124*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
125*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm1, %xmm1
126*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]
127*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]
128*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
129*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <4 x i32> <i32 2, i32 4, i32 3, i32 0>
130*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_zz4z(<4 x float> %a) {
134*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_zz4z:
135*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
136*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm1, %xmm1
137*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[3,0]
138*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[0,2]
139*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movaps %xmm1, %xmm0
140*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
141*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <4 x i32> <i32 0, i32 0, i32 4, i32 0>
142*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
143*9880d681SAndroid Build Coastguard Worker}
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_zuu4(<4 x float> %a) {
146*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_zuu4:
147*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
148*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm1, %xmm1
149*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
150*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movaps %xmm1, %xmm0
151*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
152*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <4 x i32> <i32 0, i32 undef, i32 undef, i32 4>
153*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
154*9880d681SAndroid Build Coastguard Worker}
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_zzz7(<4 x float> %a) {
157*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_zzz7:
158*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
159*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm1, %xmm1
160*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
161*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
162*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movaps %xmm1, %xmm0
163*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
164*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <4 x i32> <i32 0, i32 1, i32 2, i32 7>
165*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
166*9880d681SAndroid Build Coastguard Worker}
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_z6zz(<4 x float> %a) {
169*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_v4f32_z6zz:
170*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
171*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm1, %xmm1
172*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[0,0]
173*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]
174*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
175*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <4 x i32> <i32 0, i32 6, i32 2, i32 3>
176*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_reg_and_zero_v4f32(float %a) {
180*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: insert_reg_and_zero_v4f32:
181*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
182*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm1, %xmm1
183*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]
184*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movaps %xmm1, %xmm0
185*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
186*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x float> undef, float %a, i32 0
187*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %v, <4 x float> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
188*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_mem_and_zero_v4f32(float* %ptr) {
192*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: insert_mem_and_zero_v4f32:
193*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
194*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
195*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
196*9880d681SAndroid Build Coastguard Worker  %a = load float, float* %ptr
197*9880d681SAndroid Build Coastguard Worker  %v = insertelement <4 x float> undef, float %a, i32 0
198*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %v, <4 x float> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>
199*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_mem_lo_v4f32(<2 x float>* %ptr, <4 x float> %b) {
203*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: insert_mem_lo_v4f32:
204*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
205*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movq (%rdi), %rax
206*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
207*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shrq $32, %rax
208*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
209*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
210*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
211*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
212*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm2, %xmm2
213*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
214*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,3]
215*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movaps %xmm1, %xmm0
216*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
217*9880d681SAndroid Build Coastguard Worker  %a = load <2 x float>, <2 x float>* %ptr
218*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x float> %a, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
219*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %v, <4 x float> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>
220*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
221*9880d681SAndroid Build Coastguard Worker}
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_mem_hi_v4f32(<2 x float>* %ptr, <4 x float> %b) {
224*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: insert_mem_hi_v4f32:
225*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
226*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movq (%rdi), %rax
227*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
228*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shrq $32, %rax
229*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
230*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
231*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
232*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
233*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    xorps %xmm2, %xmm2
234*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
235*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
236*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
237*9880d681SAndroid Build Coastguard Worker  %a = load <2 x float>, <2 x float>* %ptr
238*9880d681SAndroid Build Coastguard Worker  %v = shufflevector <2 x float> %a, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
239*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %v, <4 x float> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>
240*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
241*9880d681SAndroid Build Coastguard Worker}
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_mem_v4f32_3210(<4 x float>* %ptr) {
244*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_mem_v4f32_3210:
245*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
246*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movaps (%rdi), %xmm0
247*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
248*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
249*9880d681SAndroid Build Coastguard Worker  %a = load <4 x float>, <4 x float>* %ptr
250*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
251*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
252*9880d681SAndroid Build Coastguard Worker}
253*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_mem_v4f32_0145(<4 x float> %a, <4 x float>* %pb) {
254*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_mem_v4f32_0145:
255*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
256*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movhps (%rdi), %xmm0
257*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
258*9880d681SAndroid Build Coastguard Worker  %b = load <4 x float>, <4 x float>* %pb, align 16
259*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
260*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
261*9880d681SAndroid Build Coastguard Worker}
262*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_mem_v4f32_6723(<4 x float> %a, <4 x float>* %pb) {
263*9880d681SAndroid Build Coastguard Worker; SSE1-LABEL: shuffle_mem_v4f32_6723:
264*9880d681SAndroid Build Coastguard Worker; SSE1:       # BB#0:
265*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    movlps 8(%rdi), %xmm0
266*9880d681SAndroid Build Coastguard Worker; SSE1-NEXT:    retq
267*9880d681SAndroid Build Coastguard Worker  %b = load <4 x float>, <4 x float>* %pb, align 16
268*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
269*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
270*9880d681SAndroid Build Coastguard Worker}
271