xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sse3-avx-addsub-2.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=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefix=SSE
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx | FileCheck %s --check-prefix=AVX
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Verify that we correctly generate 'addsub' instructions from
6*9880d681SAndroid Build Coastguard Worker; a sequence of vector extracts + float add/sub + vector inserts.
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test1(<4 x float> %A, <4 x float> %B) {
9*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test1:
10*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
11*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm1, %xmm0
12*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
13*9880d681SAndroid Build Coastguard Worker;
14*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test1:
15*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
16*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %xmm1, %xmm0, %xmm0
17*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
18*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 0
19*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 0
20*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
21*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 2
22*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 2
23*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub float %3, %4
24*9880d681SAndroid Build Coastguard Worker  %5 = extractelement <4 x float> %A, i32 1
25*9880d681SAndroid Build Coastguard Worker  %6 = extractelement <4 x float> %B, i32 1
26*9880d681SAndroid Build Coastguard Worker  %add = fadd float %5, %6
27*9880d681SAndroid Build Coastguard Worker  %7 = extractelement <4 x float> %A, i32 3
28*9880d681SAndroid Build Coastguard Worker  %8 = extractelement <4 x float> %B, i32 3
29*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %7, %8
30*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %add, i32 1
31*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add2, i32 3
32*9880d681SAndroid Build Coastguard Worker  %vecinsert3 = insertelement <4 x float> %vecinsert2, float %sub, i32 0
33*9880d681SAndroid Build Coastguard Worker  %vecinsert4 = insertelement <4 x float> %vecinsert3, float %sub2, i32 2
34*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert4
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test2(<4 x float> %A, <4 x float> %B) {
38*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test2:
39*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
40*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm1, %xmm0
41*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
42*9880d681SAndroid Build Coastguard Worker;
43*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2:
44*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
45*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %xmm1, %xmm0, %xmm0
46*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
47*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 2
48*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 2
49*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub float %1, %2
50*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 3
51*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 3
52*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %3, %4
53*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %sub2, i32 2
54*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add2, i32 3
55*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert2
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test3(<4 x float> %A, <4 x float> %B) {
59*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test3:
60*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
61*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm1, %xmm0
62*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
63*9880d681SAndroid Build Coastguard Worker;
64*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test3:
65*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
66*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %xmm1, %xmm0, %xmm0
67*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
68*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 0
69*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 0
70*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
71*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 3
72*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 3
73*9880d681SAndroid Build Coastguard Worker  %add = fadd float %4, %3
74*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %sub, i32 0
75*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add, i32 3
76*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert2
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test4(<4 x float> %A, <4 x float> %B) {
80*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test4:
81*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
82*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm1, %xmm0
83*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
84*9880d681SAndroid Build Coastguard Worker;
85*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test4:
86*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
87*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %xmm1, %xmm0, %xmm0
88*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
89*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 2
90*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 2
91*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
92*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 1
93*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 1
94*9880d681SAndroid Build Coastguard Worker  %add = fadd float %3, %4
95*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %sub, i32 2
96*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add, i32 1
97*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert2
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test5(<4 x float> %A, <4 x float> %B) {
101*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test5:
102*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
103*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm1, %xmm0
104*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
105*9880d681SAndroid Build Coastguard Worker;
106*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test5:
107*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
108*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %xmm1, %xmm0, %xmm0
109*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
110*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 0
111*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 0
112*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub float %1, %2
113*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 1
114*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 1
115*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %3, %4
116*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %sub2, i32 0
117*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add2, i32 1
118*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert2
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test6(<4 x float> %A, <4 x float> %B) {
122*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test6:
123*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
124*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm1, %xmm0
125*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
126*9880d681SAndroid Build Coastguard Worker;
127*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test6:
128*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
129*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %xmm1, %xmm0, %xmm0
130*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
131*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 0
132*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 0
133*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
134*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 2
135*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 2
136*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub float %3, %4
137*9880d681SAndroid Build Coastguard Worker  %5 = extractelement <4 x float> %A, i32 1
138*9880d681SAndroid Build Coastguard Worker  %6 = extractelement <4 x float> %B, i32 1
139*9880d681SAndroid Build Coastguard Worker  %add = fadd float %5, %6
140*9880d681SAndroid Build Coastguard Worker  %7 = extractelement <4 x float> %A, i32 3
141*9880d681SAndroid Build Coastguard Worker  %8 = extractelement <4 x float> %B, i32 3
142*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %7, %8
143*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %add, i32 1
144*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add2, i32 3
145*9880d681SAndroid Build Coastguard Worker  %vecinsert3 = insertelement <4 x float> %vecinsert2, float %sub, i32 0
146*9880d681SAndroid Build Coastguard Worker  %vecinsert4 = insertelement <4 x float> %vecinsert3, float %sub2, i32 2
147*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert4
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test7(<4 x double> %A, <4 x double> %B) {
151*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test7:
152*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
153*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubpd %xmm2, %xmm0
154*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubpd %xmm3, %xmm1
155*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
156*9880d681SAndroid Build Coastguard Worker;
157*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test7:
158*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
159*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubpd %ymm1, %ymm0, %ymm0
160*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
161*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x double> %A, i32 0
162*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x double> %B, i32 0
163*9880d681SAndroid Build Coastguard Worker  %sub = fsub double %1, %2
164*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x double> %A, i32 2
165*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x double> %B, i32 2
166*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub double %3, %4
167*9880d681SAndroid Build Coastguard Worker  %5 = extractelement <4 x double> %A, i32 1
168*9880d681SAndroid Build Coastguard Worker  %6 = extractelement <4 x double> %B, i32 1
169*9880d681SAndroid Build Coastguard Worker  %add = fadd double %5, %6
170*9880d681SAndroid Build Coastguard Worker  %7 = extractelement <4 x double> %A, i32 3
171*9880d681SAndroid Build Coastguard Worker  %8 = extractelement <4 x double> %B, i32 3
172*9880d681SAndroid Build Coastguard Worker  %add2 = fadd double %7, %8
173*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x double> undef, double %add, i32 1
174*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x double> %vecinsert1, double %add2, i32 3
175*9880d681SAndroid Build Coastguard Worker  %vecinsert3 = insertelement <4 x double> %vecinsert2, double %sub, i32 0
176*9880d681SAndroid Build Coastguard Worker  %vecinsert4 = insertelement <4 x double> %vecinsert3, double %sub2, i32 2
177*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %vecinsert4
178*9880d681SAndroid Build Coastguard Worker}
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test8(<2 x double> %A, <2 x double> %B) {
181*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test8:
182*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
183*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubpd %xmm1, %xmm0
184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
185*9880d681SAndroid Build Coastguard Worker;
186*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test8:
187*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
188*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubpd %xmm1, %xmm0, %xmm0
189*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
190*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <2 x double> %A, i32 0
191*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <2 x double> %B, i32 0
192*9880d681SAndroid Build Coastguard Worker  %sub = fsub double %1, %2
193*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <2 x double> %A, i32 1
194*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <2 x double> %B, i32 1
195*9880d681SAndroid Build Coastguard Worker  %add = fadd double %3, %4
196*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <2 x double> undef, double %sub, i32 0
197*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <2 x double> %vecinsert1, double %add, i32 1
198*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %vecinsert2
199*9880d681SAndroid Build Coastguard Worker}
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test9(<8 x float> %A, <8 x float> %B) {
202*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test9:
203*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
204*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm2, %xmm0
205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm3, %xmm1
206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
207*9880d681SAndroid Build Coastguard Worker;
208*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test9:
209*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
210*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %ymm1, %ymm0, %ymm0
211*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
212*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <8 x float> %A, i32 0
213*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <8 x float> %B, i32 0
214*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
215*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <8 x float> %A, i32 2
216*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <8 x float> %B, i32 2
217*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub float %3, %4
218*9880d681SAndroid Build Coastguard Worker  %5 = extractelement <8 x float> %A, i32 1
219*9880d681SAndroid Build Coastguard Worker  %6 = extractelement <8 x float> %B, i32 1
220*9880d681SAndroid Build Coastguard Worker  %add = fadd float %5, %6
221*9880d681SAndroid Build Coastguard Worker  %7 = extractelement <8 x float> %A, i32 3
222*9880d681SAndroid Build Coastguard Worker  %8 = extractelement <8 x float> %B, i32 3
223*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %7, %8
224*9880d681SAndroid Build Coastguard Worker  %9 = extractelement <8 x float> %A, i32 4
225*9880d681SAndroid Build Coastguard Worker  %10 = extractelement <8 x float> %B, i32 4
226*9880d681SAndroid Build Coastguard Worker  %sub3 = fsub float %9, %10
227*9880d681SAndroid Build Coastguard Worker  %11 = extractelement <8 x float> %A, i32 6
228*9880d681SAndroid Build Coastguard Worker  %12 = extractelement <8 x float> %B, i32 6
229*9880d681SAndroid Build Coastguard Worker  %sub4 = fsub float %11, %12
230*9880d681SAndroid Build Coastguard Worker  %13 = extractelement <8 x float> %A, i32 5
231*9880d681SAndroid Build Coastguard Worker  %14 = extractelement <8 x float> %B, i32 5
232*9880d681SAndroid Build Coastguard Worker  %add3 = fadd float %13, %14
233*9880d681SAndroid Build Coastguard Worker  %15 = extractelement <8 x float> %A, i32 7
234*9880d681SAndroid Build Coastguard Worker  %16 = extractelement <8 x float> %B, i32 7
235*9880d681SAndroid Build Coastguard Worker  %add4 = fadd float %15, %16
236*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <8 x float> undef, float %add, i32 1
237*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <8 x float> %vecinsert1, float %add2, i32 3
238*9880d681SAndroid Build Coastguard Worker  %vecinsert3 = insertelement <8 x float> %vecinsert2, float %sub, i32 0
239*9880d681SAndroid Build Coastguard Worker  %vecinsert4 = insertelement <8 x float> %vecinsert3, float %sub2, i32 2
240*9880d681SAndroid Build Coastguard Worker  %vecinsert5 = insertelement <8 x float> %vecinsert4, float %add3, i32 5
241*9880d681SAndroid Build Coastguard Worker  %vecinsert6 = insertelement <8 x float> %vecinsert5, float %add4, i32 7
242*9880d681SAndroid Build Coastguard Worker  %vecinsert7 = insertelement <8 x float> %vecinsert6, float %sub3, i32 4
243*9880d681SAndroid Build Coastguard Worker  %vecinsert8 = insertelement <8 x float> %vecinsert7, float %sub4, i32 6
244*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %vecinsert8
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; Verify that we don't generate addsub instruction for the following
248*9880d681SAndroid Build Coastguard Worker; functions.
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test10(<4 x float> %A, <4 x float> %B) {
251*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test10:
252*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
253*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    subss %xmm1, %xmm0
254*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
255*9880d681SAndroid Build Coastguard Worker;
256*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test10:
257*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
258*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vsubss %xmm1, %xmm0, %xmm0
259*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
260*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 0
261*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 0
262*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
263*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %sub, i32 0
264*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert1
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test11(<4 x float> %A, <4 x float> %B) {
268*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test11:
269*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
270*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1,0]
271*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1,0]
272*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    subss %xmm1, %xmm0
273*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movddup {{.*#+}} xmm0 = xmm0[0,0]
274*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
275*9880d681SAndroid Build Coastguard Worker;
276*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test11:
277*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
278*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
279*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
280*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vsubss %xmm1, %xmm0, %xmm0
281*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]
282*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
283*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 2
284*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 2
285*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
286*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %sub, i32 2
287*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert1
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test12(<4 x float> %A, <4 x float> %B) {
291*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test12:
292*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
293*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
294*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]
295*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addss %xmm0, %xmm1
296*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movsldup {{.*#+}} xmm0 = xmm1[0,0,2,2]
297*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
298*9880d681SAndroid Build Coastguard Worker;
299*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test12:
300*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
301*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
302*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]
303*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddss %xmm1, %xmm0, %xmm0
304*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2]
305*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
306*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 1
307*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 1
308*9880d681SAndroid Build Coastguard Worker  %add = fadd float %1, %2
309*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %add, i32 1
310*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert1
311*9880d681SAndroid Build Coastguard Worker}
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test13(<4 x float> %A, <4 x float> %B) {
314*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test13:
315*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
316*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,2,3]
317*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,1,2,3]
318*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addss %xmm0, %xmm1
319*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1,2,0]
320*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm1, %xmm0
321*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
322*9880d681SAndroid Build Coastguard Worker;
323*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test13:
324*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
325*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
326*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
327*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddss %xmm1, %xmm0, %xmm0
328*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,1,2,0]
329*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
330*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 3
331*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 3
332*9880d681SAndroid Build Coastguard Worker  %add = fadd float %1, %2
333*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %add, i32 3
334*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert1
335*9880d681SAndroid Build Coastguard Worker}
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test14(<4 x float> %A, <4 x float> %B) {
338*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test14:
339*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
340*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm0, %xmm2
341*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    subss %xmm1, %xmm2
342*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1,0]
343*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1,0]
344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    subss %xmm1, %xmm0
345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1,1,3]
347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm2, %xmm0
348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
349*9880d681SAndroid Build Coastguard Worker;
350*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test14:
351*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
352*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vsubss %xmm1, %xmm0, %xmm2
353*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
354*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
355*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vsubss %xmm1, %xmm0, %xmm0
356*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm2[0,1],xmm0[0],xmm2[3]
357*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
358*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 0
359*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 0
360*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, %2
361*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 2
362*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 2
363*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub float %3, %4
364*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %sub, i32 0
365*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %sub2, i32 2
366*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert2
367*9880d681SAndroid Build Coastguard Worker}
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test15(<4 x float> %A, <4 x float> %B) {
370*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test15:
371*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
372*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]
373*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movshdup {{.*#+}} xmm2 = xmm1[1,1,3,3]
374*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addss %xmm3, %xmm2
375*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,2,3]
376*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,1,2,3]
377*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addss %xmm0, %xmm1
378*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
379*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0,2,1]
380*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm2, %xmm0
381*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
382*9880d681SAndroid Build Coastguard Worker;
383*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test15:
384*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
385*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
386*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovshdup {{.*#+}} xmm3 = xmm1[1,1,3,3]
387*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddss %xmm3, %xmm2, %xmm2
388*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
389*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
390*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddss %xmm1, %xmm0, %xmm0
391*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovsldup {{.*#+}} xmm1 = xmm2[0,0,2,2]
392*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
393*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
394*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 1
395*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 1
396*9880d681SAndroid Build Coastguard Worker  %add = fadd float %1, %2
397*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 3
398*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 3
399*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %3, %4
400*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %add, i32 1
401*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add2, i32 3
402*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert2
403*9880d681SAndroid Build Coastguard Worker}
404*9880d681SAndroid Build Coastguard Worker
405*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test16(<4 x float> %A, <4 x float> %B) {
406*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test16:
407*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
408*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm0, %xmm2
409*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    subss %xmm0, %xmm2
410*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm0, %xmm3
411*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm3 = xmm3[1,0]
412*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movapd %xmm1, %xmm4
413*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufpd {{.*#+}} xmm4 = xmm4[1,0]
414*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    subss %xmm4, %xmm3
415*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
416*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addss %xmm0, %xmm4
417*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,2,3]
418*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,1,2,3]
419*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addss %xmm0, %xmm1
420*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklps {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]
421*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
422*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
423*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movaps %xmm2, %xmm0
424*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
425*9880d681SAndroid Build Coastguard Worker;
426*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test16:
427*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
428*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vsubss %xmm0, %xmm0, %xmm2
429*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm3 = xmm0[1,0]
430*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilpd {{.*#+}} xmm4 = xmm1[1,0]
431*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vsubss %xmm4, %xmm3, %xmm3
432*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
433*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddss %xmm0, %xmm4, %xmm4
434*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[3,1,2,3]
435*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[3,1,2,3]
436*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddss %xmm1, %xmm0, %xmm0
437*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm4[0],xmm2[2,3]
438*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0],xmm1[3]
439*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]
440*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
441*9880d681SAndroid Build Coastguard Worker  %1 = extractelement <4 x float> %A, i32 0
442*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x float> %B, i32 0
443*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %1, undef
444*9880d681SAndroid Build Coastguard Worker  %3 = extractelement <4 x float> %A, i32 2
445*9880d681SAndroid Build Coastguard Worker  %4 = extractelement <4 x float> %B, i32 2
446*9880d681SAndroid Build Coastguard Worker  %sub2 = fsub float %3, %4
447*9880d681SAndroid Build Coastguard Worker  %5 = extractelement <4 x float> %A, i32 1
448*9880d681SAndroid Build Coastguard Worker  %6 = extractelement <4 x float> %B, i32 1
449*9880d681SAndroid Build Coastguard Worker  %add = fadd float %5, undef
450*9880d681SAndroid Build Coastguard Worker  %7 = extractelement <4 x float> %A, i32 3
451*9880d681SAndroid Build Coastguard Worker  %8 = extractelement <4 x float> %B, i32 3
452*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %7, %8
453*9880d681SAndroid Build Coastguard Worker  %vecinsert1 = insertelement <4 x float> undef, float %add, i32 1
454*9880d681SAndroid Build Coastguard Worker  %vecinsert2 = insertelement <4 x float> %vecinsert1, float %add2, i32 3
455*9880d681SAndroid Build Coastguard Worker  %vecinsert3 = insertelement <4 x float> %vecinsert2, float %sub, i32 0
456*9880d681SAndroid Build Coastguard Worker  %vecinsert4 = insertelement <4 x float> %vecinsert3, float %sub2, i32 2
457*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %vecinsert4
458*9880d681SAndroid Build Coastguard Worker}
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_v2f32(<2 x float> %v0, <2 x float> %v1) {
461*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test_v2f32:
462*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    addsubps %xmm1, %xmm0
464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
465*9880d681SAndroid Build Coastguard Worker;
466*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test_v2f32:
467*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
468*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vaddsubps %xmm1, %xmm0, %xmm0
469*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
470*9880d681SAndroid Build Coastguard Worker  %v2 = extractelement <2 x float> %v0, i32 0
471*9880d681SAndroid Build Coastguard Worker  %v3 = extractelement <2 x float> %v1, i32 0
472*9880d681SAndroid Build Coastguard Worker  %v4 = extractelement <2 x float> %v0, i32 1
473*9880d681SAndroid Build Coastguard Worker  %v5 = extractelement <2 x float> %v1, i32 1
474*9880d681SAndroid Build Coastguard Worker  %sub = fsub float %v2, %v3
475*9880d681SAndroid Build Coastguard Worker  %add = fadd float %v5, %v4
476*9880d681SAndroid Build Coastguard Worker  %res0 = insertelement <2 x float> undef, float %sub, i32 0
477*9880d681SAndroid Build Coastguard Worker  %res1 = insertelement <2 x float> %res0, float %add, i32 1
478*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %res1
479*9880d681SAndroid Build Coastguard Worker}
480