@@ -76,21 +76,11 @@ define void @extract_4xdouble(ptr %src, ptr %dst) nounwind {
7676define void @extract_32xi8_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
7777; CHECK-LABEL: extract_32xi8_idx:
7878; CHECK: # %bb.0:
79- ; CHECK-NEXT: addi.d $sp, $sp, -96
80- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
81- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
82- ; CHECK-NEXT: addi.d $fp, $sp, 96
83- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
8479; CHECK-NEXT: xvld $xr0, $a0, 0
85- ; CHECK-NEXT: xvst $xr0, $sp, 32
86- ; CHECK-NEXT: addi.d $a0, $sp, 32
87- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 0
88- ; CHECK-NEXT: ld.b $a0, $a0, 0
89- ; CHECK-NEXT: st.b $a0, $a1, 0
90- ; CHECK-NEXT: addi.d $sp, $fp, -96
91- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
92- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
93- ; CHECK-NEXT: addi.d $sp, $sp, 96
80+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
81+ ; CHECK-NEXT: movgr2fr.w $fa2, $a2
82+ ; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2
83+ ; CHECK-NEXT: xvstelm.b $xr0, $a1, 0, 0
9484; CHECK-NEXT: ret
9585 %v = load volatile <32 x i8 >, ptr %src
9686 %e = extractelement <32 x i8 > %v , i32 %idx
@@ -101,21 +91,11 @@ define void @extract_32xi8_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
10191define void @extract_16xi16_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
10292; CHECK-LABEL: extract_16xi16_idx:
10393; CHECK: # %bb.0:
104- ; CHECK-NEXT: addi.d $sp, $sp, -96
105- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
106- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
107- ; CHECK-NEXT: addi.d $fp, $sp, 96
108- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
10994; CHECK-NEXT: xvld $xr0, $a0, 0
110- ; CHECK-NEXT: xvst $xr0, $sp, 32
111- ; CHECK-NEXT: addi.d $a0, $sp, 32
112- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 1
113- ; CHECK-NEXT: ld.h $a0, $a0, 0
114- ; CHECK-NEXT: st.h $a0, $a1, 0
115- ; CHECK-NEXT: addi.d $sp, $fp, -96
116- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
117- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
118- ; CHECK-NEXT: addi.d $sp, $sp, 96
95+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
96+ ; CHECK-NEXT: movgr2fr.w $fa2, $a2
97+ ; CHECK-NEXT: xvshuf.h $xr2, $xr1, $xr0
98+ ; CHECK-NEXT: xvstelm.h $xr2, $a1, 0, 0
11999; CHECK-NEXT: ret
120100 %v = load volatile <16 x i16 >, ptr %src
121101 %e = extractelement <16 x i16 > %v , i32 %idx
@@ -126,21 +106,10 @@ define void @extract_16xi16_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
126106define void @extract_8xi32_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
127107; CHECK-LABEL: extract_8xi32_idx:
128108; CHECK: # %bb.0:
129- ; CHECK-NEXT: addi.d $sp, $sp, -96
130- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
131- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
132- ; CHECK-NEXT: addi.d $fp, $sp, 96
133- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
134109; CHECK-NEXT: xvld $xr0, $a0, 0
135- ; CHECK-NEXT: xvst $xr0, $sp, 32
136- ; CHECK-NEXT: addi.d $a0, $sp, 32
137- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 2
138- ; CHECK-NEXT: ld.w $a0, $a0, 0
139- ; CHECK-NEXT: st.w $a0, $a1, 0
140- ; CHECK-NEXT: addi.d $sp, $fp, -96
141- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
142- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
143- ; CHECK-NEXT: addi.d $sp, $sp, 96
110+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
111+ ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
112+ ; CHECK-NEXT: xvstelm.w $xr0, $a1, 0, 0
144113; CHECK-NEXT: ret
145114 %v = load volatile <8 x i32 >, ptr %src
146115 %e = extractelement <8 x i32 > %v , i32 %idx
@@ -151,21 +120,11 @@ define void @extract_8xi32_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
151120define void @extract_4xi64_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
152121; CHECK-LABEL: extract_4xi64_idx:
153122; CHECK: # %bb.0:
154- ; CHECK-NEXT: addi.d $sp, $sp, -96
155- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
156- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
157- ; CHECK-NEXT: addi.d $fp, $sp, 96
158- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
159123; CHECK-NEXT: xvld $xr0, $a0, 0
160- ; CHECK-NEXT: xvst $xr0, $sp, 32
161- ; CHECK-NEXT: addi.d $a0, $sp, 32
162- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 3
163- ; CHECK-NEXT: ld.d $a0, $a0, 0
164- ; CHECK-NEXT: st.d $a0, $a1, 0
165- ; CHECK-NEXT: addi.d $sp, $fp, -96
166- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
167- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
168- ; CHECK-NEXT: addi.d $sp, $sp, 96
124+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
125+ ; CHECK-NEXT: movgr2fr.w $fa2, $a2
126+ ; CHECK-NEXT: xvshuf.d $xr2, $xr1, $xr0
127+ ; CHECK-NEXT: xvstelm.d $xr2, $a1, 0, 0
169128; CHECK-NEXT: ret
170129 %v = load volatile <4 x i64 >, ptr %src
171130 %e = extractelement <4 x i64 > %v , i32 %idx
@@ -176,21 +135,10 @@ define void @extract_4xi64_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
176135define void @extract_8xfloat_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
177136; CHECK-LABEL: extract_8xfloat_idx:
178137; CHECK: # %bb.0:
179- ; CHECK-NEXT: addi.d $sp, $sp, -96
180- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
181- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
182- ; CHECK-NEXT: addi.d $fp, $sp, 96
183- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
184138; CHECK-NEXT: xvld $xr0, $a0, 0
185- ; CHECK-NEXT: xvst $xr0, $sp, 32
186- ; CHECK-NEXT: addi.d $a0, $sp, 32
187- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 2
188- ; CHECK-NEXT: fld.s $fa0, $a0, 0
189- ; CHECK-NEXT: fst.s $fa0, $a1, 0
190- ; CHECK-NEXT: addi.d $sp, $fp, -96
191- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
192- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
193- ; CHECK-NEXT: addi.d $sp, $sp, 96
139+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
140+ ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
141+ ; CHECK-NEXT: xvstelm.w $xr0, $a1, 0, 0
194142; CHECK-NEXT: ret
195143 %v = load volatile <8 x float >, ptr %src
196144 %e = extractelement <8 x float > %v , i32 %idx
@@ -201,21 +149,11 @@ define void @extract_8xfloat_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
201149define void @extract_4xdouble_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
202150; CHECK-LABEL: extract_4xdouble_idx:
203151; CHECK: # %bb.0:
204- ; CHECK-NEXT: addi.d $sp, $sp, -96
205- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
206- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
207- ; CHECK-NEXT: addi.d $fp, $sp, 96
208- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
209152; CHECK-NEXT: xvld $xr0, $a0, 0
210- ; CHECK-NEXT: xvst $xr0, $sp, 32
211- ; CHECK-NEXT: addi.d $a0, $sp, 32
212- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 3
213- ; CHECK-NEXT: fld.d $fa0, $a0, 0
214- ; CHECK-NEXT: fst.d $fa0, $a1, 0
215- ; CHECK-NEXT: addi.d $sp, $fp, -96
216- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
217- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
218- ; CHECK-NEXT: addi.d $sp, $sp, 96
153+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
154+ ; CHECK-NEXT: movgr2fr.w $fa2, $a2
155+ ; CHECK-NEXT: xvshuf.d $xr2, $xr1, $xr0
156+ ; CHECK-NEXT: xvstelm.d $xr2, $a1, 0, 0
219157; CHECK-NEXT: ret
220158 %v = load volatile <4 x double >, ptr %src
221159 %e = extractelement <4 x double > %v , i32 %idx
0 commit comments