@@ -114,22 +114,15 @@ define void @insert_4xdouble(ptr %src, ptr %dst, double %in) nounwind {
114114define void @insert_32xi8_idx (ptr %src , ptr %dst , i8 %in , i32 %idx ) nounwind {
115115; CHECK-LABEL: insert_32xi8_idx:
116116; CHECK: # %bb.0:
117- ; CHECK-NEXT: addi.d $sp, $sp, -96
118- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
119- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
120- ; CHECK-NEXT: addi.d $fp, $sp, 96
121- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
122- ; CHECK-NEXT: xvld $xr0, $a0, 0
123- ; CHECK-NEXT: xvst $xr0, $sp, 32
124- ; CHECK-NEXT: addi.d $a0, $sp, 32
125- ; CHECK-NEXT: bstrins.d $a0, $a3, 4, 0
126- ; CHECK-NEXT: st.b $a2, $a0, 0
127- ; CHECK-NEXT: xvld $xr0, $sp, 32
117+ ; CHECK-NEXT: pcalau12i $a4, %pc_hi20(.LCPI8_0)
118+ ; CHECK-NEXT: xvld $xr0, $a4, %pc_lo12(.LCPI8_0)
119+ ; CHECK-NEXT: xvld $xr1, $a0, 0
120+ ; CHECK-NEXT: bstrpick.d $a0, $a3, 31, 0
121+ ; CHECK-NEXT: xvreplgr2vr.b $xr2, $a0
122+ ; CHECK-NEXT: xvseq.b $xr0, $xr2, $xr0
123+ ; CHECK-NEXT: xvreplgr2vr.b $xr2, $a2
124+ ; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr2, $xr0
128125; CHECK-NEXT: xvst $xr0, $a1, 0
129- ; CHECK-NEXT: addi.d $sp, $fp, -96
130- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
131- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
132- ; CHECK-NEXT: addi.d $sp, $sp, 96
133126; CHECK-NEXT: ret
134127 %v = load volatile <32 x i8 >, ptr %src
135128 %v_new = insertelement <32 x i8 > %v , i8 %in , i32 %idx
@@ -140,22 +133,15 @@ define void @insert_32xi8_idx(ptr %src, ptr %dst, i8 %in, i32 %idx) nounwind {
140133define void @insert_16xi16_idx (ptr %src , ptr %dst , i16 %in , i32 %idx ) nounwind {
141134; CHECK-LABEL: insert_16xi16_idx:
142135; CHECK: # %bb.0:
143- ; CHECK-NEXT: addi.d $sp, $sp, -96
144- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
145- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
146- ; CHECK-NEXT: addi.d $fp, $sp, 96
147- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
148- ; CHECK-NEXT: xvld $xr0, $a0, 0
149- ; CHECK-NEXT: xvst $xr0, $sp, 32
150- ; CHECK-NEXT: addi.d $a0, $sp, 32
151- ; CHECK-NEXT: bstrins.d $a0, $a3, 4, 1
152- ; CHECK-NEXT: st.h $a2, $a0, 0
153- ; CHECK-NEXT: xvld $xr0, $sp, 32
136+ ; CHECK-NEXT: pcalau12i $a4, %pc_hi20(.LCPI9_0)
137+ ; CHECK-NEXT: xvld $xr0, $a4, %pc_lo12(.LCPI9_0)
138+ ; CHECK-NEXT: xvld $xr1, $a0, 0
139+ ; CHECK-NEXT: bstrpick.d $a0, $a3, 31, 0
140+ ; CHECK-NEXT: xvreplgr2vr.h $xr2, $a0
141+ ; CHECK-NEXT: xvseq.h $xr0, $xr2, $xr0
142+ ; CHECK-NEXT: xvreplgr2vr.h $xr2, $a2
143+ ; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr2, $xr0
154144; CHECK-NEXT: xvst $xr0, $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
159145; CHECK-NEXT: ret
160146 %v = load volatile <16 x i16 >, ptr %src
161147 %v_new = insertelement <16 x i16 > %v , i16 %in , i32 %idx
@@ -166,22 +152,15 @@ define void @insert_16xi16_idx(ptr %src, ptr %dst, i16 %in, i32 %idx) nounwind {
166152define void @insert_8xi32_idx (ptr %src , ptr %dst , i32 %in , i32 %idx ) nounwind {
167153; CHECK-LABEL: insert_8xi32_idx:
168154; CHECK: # %bb.0:
169- ; CHECK-NEXT: addi.d $sp, $sp, -96
170- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
171- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
172- ; CHECK-NEXT: addi.d $fp, $sp, 96
173- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
174- ; CHECK-NEXT: xvld $xr0, $a0, 0
175- ; CHECK-NEXT: xvst $xr0, $sp, 32
176- ; CHECK-NEXT: addi.d $a0, $sp, 32
177- ; CHECK-NEXT: bstrins.d $a0, $a3, 4, 2
178- ; CHECK-NEXT: st.w $a2, $a0, 0
179- ; CHECK-NEXT: xvld $xr0, $sp, 32
155+ ; CHECK-NEXT: pcalau12i $a4, %pc_hi20(.LCPI10_0)
156+ ; CHECK-NEXT: xvld $xr0, $a4, %pc_lo12(.LCPI10_0)
157+ ; CHECK-NEXT: xvld $xr1, $a0, 0
158+ ; CHECK-NEXT: bstrpick.d $a0, $a3, 31, 0
159+ ; CHECK-NEXT: xvreplgr2vr.w $xr2, $a0
160+ ; CHECK-NEXT: xvseq.w $xr0, $xr2, $xr0
161+ ; CHECK-NEXT: xvreplgr2vr.w $xr2, $a2
162+ ; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr2, $xr0
180163; CHECK-NEXT: xvst $xr0, $a1, 0
181- ; CHECK-NEXT: addi.d $sp, $fp, -96
182- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
183- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
184- ; CHECK-NEXT: addi.d $sp, $sp, 96
185164; CHECK-NEXT: ret
186165 %v = load volatile <8 x i32 >, ptr %src
187166 %v_new = insertelement <8 x i32 > %v , i32 %in , i32 %idx
@@ -192,22 +171,15 @@ define void @insert_8xi32_idx(ptr %src, ptr %dst, i32 %in, i32 %idx) nounwind {
192171define void @insert_4xi64_idx (ptr %src , ptr %dst , i64 %in , i32 %idx ) nounwind {
193172; CHECK-LABEL: insert_4xi64_idx:
194173; CHECK: # %bb.0:
195- ; CHECK-NEXT: addi.d $sp, $sp, -96
196- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
197- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
198- ; CHECK-NEXT: addi.d $fp, $sp, 96
199- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
200- ; CHECK-NEXT: xvld $xr0, $a0, 0
201- ; CHECK-NEXT: xvst $xr0, $sp, 32
202- ; CHECK-NEXT: addi.d $a0, $sp, 32
203- ; CHECK-NEXT: bstrins.d $a0, $a3, 4, 3
204- ; CHECK-NEXT: st.d $a2, $a0, 0
205- ; CHECK-NEXT: xvld $xr0, $sp, 32
174+ ; CHECK-NEXT: pcalau12i $a4, %pc_hi20(.LCPI11_0)
175+ ; CHECK-NEXT: xvld $xr0, $a4, %pc_lo12(.LCPI11_0)
176+ ; CHECK-NEXT: xvld $xr1, $a0, 0
177+ ; CHECK-NEXT: bstrpick.d $a0, $a3, 31, 0
178+ ; CHECK-NEXT: xvreplgr2vr.d $xr2, $a0
179+ ; CHECK-NEXT: xvseq.d $xr0, $xr2, $xr0
180+ ; CHECK-NEXT: xvreplgr2vr.d $xr2, $a2
181+ ; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr2, $xr0
206182; CHECK-NEXT: xvst $xr0, $a1, 0
207- ; CHECK-NEXT: addi.d $sp, $fp, -96
208- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
209- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
210- ; CHECK-NEXT: addi.d $sp, $sp, 96
211183; CHECK-NEXT: ret
212184 %v = load volatile <4 x i64 >, ptr %src
213185 %v_new = insertelement <4 x i64 > %v , i64 %in , i32 %idx
@@ -218,22 +190,16 @@ define void @insert_4xi64_idx(ptr %src, ptr %dst, i64 %in, i32 %idx) nounwind {
218190define void @insert_8xfloat_idx (ptr %src , ptr %dst , float %in , i32 %idx ) nounwind {
219191; CHECK-LABEL: insert_8xfloat_idx:
220192; CHECK: # %bb.0:
221- ; CHECK-NEXT: addi.d $sp, $sp, -96
222- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
223- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
224- ; CHECK-NEXT: addi.d $fp, $sp, 96
225- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
226- ; CHECK-NEXT: xvld $xr1, $a0, 0
227- ; CHECK-NEXT: xvst $xr1, $sp, 32
228- ; CHECK-NEXT: addi.d $a0, $sp, 32
229- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 2
230- ; CHECK-NEXT: fst.s $fa0, $a0, 0
231- ; CHECK-NEXT: xvld $xr0, $sp, 32
193+ ; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
194+ ; CHECK-NEXT: pcalau12i $a3, %pc_hi20(.LCPI12_0)
195+ ; CHECK-NEXT: xvld $xr1, $a3, %pc_lo12(.LCPI12_0)
196+ ; CHECK-NEXT: xvld $xr2, $a0, 0
197+ ; CHECK-NEXT: bstrpick.d $a0, $a2, 31, 0
198+ ; CHECK-NEXT: xvreplgr2vr.w $xr3, $a0
199+ ; CHECK-NEXT: xvseq.w $xr1, $xr3, $xr1
200+ ; CHECK-NEXT: xvreplve0.w $xr0, $xr0
201+ ; CHECK-NEXT: xvbitsel.v $xr0, $xr2, $xr0, $xr1
232202; CHECK-NEXT: xvst $xr0, $a1, 0
233- ; CHECK-NEXT: addi.d $sp, $fp, -96
234- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
235- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
236- ; CHECK-NEXT: addi.d $sp, $sp, 96
237203; CHECK-NEXT: ret
238204 %v = load volatile <8 x float >, ptr %src
239205 %v_new = insertelement <8 x float > %v , float %in , i32 %idx
@@ -244,22 +210,16 @@ define void @insert_8xfloat_idx(ptr %src, ptr %dst, float %in, i32 %idx) nounwin
244210define void @insert_4xdouble_idx (ptr %src , ptr %dst , double %in , i32 %idx ) nounwind {
245211; CHECK-LABEL: insert_4xdouble_idx:
246212; CHECK: # %bb.0:
247- ; CHECK-NEXT: addi.d $sp, $sp, -96
248- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
249- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
250- ; CHECK-NEXT: addi.d $fp, $sp, 96
251- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
252- ; CHECK-NEXT: xvld $xr1, $a0, 0
253- ; CHECK-NEXT: xvst $xr1, $sp, 32
254- ; CHECK-NEXT: addi.d $a0, $sp, 32
255- ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 3
256- ; CHECK-NEXT: fst.d $fa0, $a0, 0
257- ; CHECK-NEXT: xvld $xr0, $sp, 32
213+ ; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
214+ ; CHECK-NEXT: pcalau12i $a3, %pc_hi20(.LCPI13_0)
215+ ; CHECK-NEXT: xvld $xr1, $a3, %pc_lo12(.LCPI13_0)
216+ ; CHECK-NEXT: xvld $xr2, $a0, 0
217+ ; CHECK-NEXT: bstrpick.d $a0, $a2, 31, 0
218+ ; CHECK-NEXT: xvreplgr2vr.d $xr3, $a0
219+ ; CHECK-NEXT: xvseq.d $xr1, $xr3, $xr1
220+ ; CHECK-NEXT: xvreplve0.d $xr0, $xr0
221+ ; CHECK-NEXT: xvbitsel.v $xr0, $xr2, $xr0, $xr1
258222; CHECK-NEXT: xvst $xr0, $a1, 0
259- ; CHECK-NEXT: addi.d $sp, $fp, -96
260- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
261- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
262- ; CHECK-NEXT: addi.d $sp, $sp, 96
263223; CHECK-NEXT: ret
264224 %v = load volatile <4 x double >, ptr %src
265225 %v_new = insertelement <4 x double > %v , double %in , i32 %idx
0 commit comments