@@ -76,21 +76,13 @@ 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: bstrpick.d $a0, $a2, 31, 2
81+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a0
82+ ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
83+ ; CHECK-NEXT: andi $a0, $a2, 3
84+ ; CHECK-NEXT: xvreplve.b $xr0, $xr0, $a0
85+ ; CHECK-NEXT: xvstelm.b $xr0, $a1, 0, 0
9486; CHECK-NEXT: ret
9587 %v = load volatile <32 x i8 >, ptr %src
9688 %e = extractelement <32 x i8 > %v , i32 %idx
@@ -101,21 +93,13 @@ define void @extract_32xi8_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
10193define void @extract_16xi16_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
10294; CHECK-LABEL: extract_16xi16_idx:
10395; 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
10996; 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
97+ ; CHECK-NEXT: bstrpick.d $a0, $a2, 31, 1
98+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a0
99+ ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
100+ ; CHECK-NEXT: andi $a0, $a2, 1
101+ ; CHECK-NEXT: xvreplve.h $xr0, $xr0, $a0
102+ ; CHECK-NEXT: xvstelm.h $xr0, $a1, 0, 0
119103; CHECK-NEXT: ret
120104 %v = load volatile <16 x i16 >, ptr %src
121105 %e = extractelement <16 x i16 > %v , i32 %idx
@@ -127,8 +111,7 @@ define void @extract_8xi32_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
127111; CHECK-LABEL: extract_8xi32_idx:
128112; CHECK: # %bb.0:
129113; CHECK-NEXT: xvld $xr0, $a0, 0
130- ; CHECK-NEXT: bstrpick.d $a0, $a2, 31, 0
131- ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a0
114+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
132115; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
133116; CHECK-NEXT: xvstelm.w $xr0, $a1, 0, 0
134117; CHECK-NEXT: ret
@@ -141,21 +124,14 @@ define void @extract_8xi32_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
141124define void @extract_4xi64_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
142125; CHECK-LABEL: extract_4xi64_idx:
143126; CHECK: # %bb.0:
144- ; CHECK-NEXT: addi.d $sp, $sp, -96
145- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
146- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
147- ; CHECK-NEXT: addi.d $fp, $sp, 96
148- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
149127; CHECK-NEXT: xvld $xr0, $a0, 0
150- ; CHECK-NEXT: xvst $xr0, $sp, 32
151- ; CHECK-NEXT: addi.d $a0, $sp, 32
152- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 3
153- ; CHECK-NEXT: ld.d $a0, $a0, 0
154- ; CHECK-NEXT: st.d $a0, $a1, 0
155- ; CHECK-NEXT: addi.d $sp, $fp, -96
156- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
157- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
158- ; CHECK-NEXT: addi.d $sp, $sp, 96
128+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
129+ ; CHECK-NEXT: xvslli.w $xr1, $xr1, 1
130+ ; CHECK-NEXT: xvperm.w $xr2, $xr0, $xr1
131+ ; CHECK-NEXT: xvaddi.wu $xr1, $xr1, 1
132+ ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
133+ ; CHECK-NEXT: xvilvl.w $xr0, $xr0, $xr2
134+ ; CHECK-NEXT: xvstelm.d $xr0, $a1, 0, 0
159135; CHECK-NEXT: ret
160136 %v = load volatile <4 x i64 >, ptr %src
161137 %e = extractelement <4 x i64 > %v , i32 %idx
@@ -167,8 +143,7 @@ define void @extract_8xfloat_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
167143; CHECK-LABEL: extract_8xfloat_idx:
168144; CHECK: # %bb.0:
169145; CHECK-NEXT: xvld $xr0, $a0, 0
170- ; CHECK-NEXT: bstrpick.d $a0, $a2, 31, 0
171- ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a0
146+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
172147; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
173148; CHECK-NEXT: xvstelm.w $xr0, $a1, 0, 0
174149; CHECK-NEXT: ret
@@ -181,21 +156,14 @@ define void @extract_8xfloat_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
181156define void @extract_4xdouble_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
182157; CHECK-LABEL: extract_4xdouble_idx:
183158; CHECK: # %bb.0:
184- ; CHECK-NEXT: addi.d $sp, $sp, -96
185- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
186- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
187- ; CHECK-NEXT: addi.d $fp, $sp, 96
188- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
189159; CHECK-NEXT: xvld $xr0, $a0, 0
190- ; CHECK-NEXT: xvst $xr0, $sp, 32
191- ; CHECK-NEXT: addi.d $a0, $sp, 32
192- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 3
193- ; CHECK-NEXT: fld.d $fa0, $a0, 0
194- ; CHECK-NEXT: fst.d $fa0, $a1, 0
195- ; CHECK-NEXT: addi.d $sp, $fp, -96
196- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
197- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
198- ; CHECK-NEXT: addi.d $sp, $sp, 96
160+ ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
161+ ; CHECK-NEXT: xvslli.w $xr1, $xr1, 1
162+ ; CHECK-NEXT: xvperm.w $xr2, $xr0, $xr1
163+ ; CHECK-NEXT: xvaddi.wu $xr1, $xr1, 1
164+ ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
165+ ; CHECK-NEXT: xvilvl.w $xr0, $xr0, $xr2
166+ ; CHECK-NEXT: xvstelm.d $xr0, $a1, 0, 0
199167; CHECK-NEXT: ret
200168 %v = load volatile <4 x double >, ptr %src
201169 %e = extractelement <4 x double > %v , i32 %idx
0 commit comments