@@ -6,8 +6,7 @@ define void @load_trunc_2i64_to_2i32(ptr %ptr, ptr %dst) nounwind {
66; CHECK: # %bb.0:
77; CHECK-NEXT: vld $vr0, $a0, 0
88; CHECK-NEXT: vshuf4i.w $vr0, $vr0, 8
9- ; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
10- ; CHECK-NEXT: st.d $a0, $a1, 0
9+ ; CHECK-NEXT: vstelm.d $vr0, $a1, 0, 0
1110; CHECK-NEXT: ret
1211 %a = load <2 x i64 >, ptr %ptr
1312 %trunc = trunc <2 x i64 > %a to <2 x i32 >
@@ -22,8 +21,7 @@ define void @load_trunc_2i64_to_2i16(ptr %ptr, ptr %dst) nounwind {
2221; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI1_0)
2322; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI1_0)
2423; CHECK-NEXT: vshuf.h $vr1, $vr0, $vr0
25- ; CHECK-NEXT: vpickve2gr.w $a0, $vr1, 0
26- ; CHECK-NEXT: st.w $a0, $a1, 0
24+ ; CHECK-NEXT: vstelm.w $vr1, $a1, 0, 0
2725; CHECK-NEXT: ret
2826 %a = load <2 x i64 >, ptr %ptr
2927 %trunc = trunc <2 x i64 > %a to <2 x i16 >
@@ -38,8 +36,7 @@ define void @load_trunc_2i64_to_2i8(ptr %ptr, ptr %dst) nounwind {
3836; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)
3937; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI2_0)
4038; CHECK-NEXT: vshuf.b $vr0, $vr0, $vr0, $vr1
41- ; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
42- ; CHECK-NEXT: st.h $a0, $a1, 0
39+ ; CHECK-NEXT: vstelm.h $vr0, $a1, 0, 0
4340; CHECK-NEXT: ret
4441 %a = load <2 x i64 >, ptr %ptr
4542 %trunc = trunc <2 x i64 > %a to <2 x i8 >
@@ -52,8 +49,7 @@ define void @load_trunc_4i32_to_4i16(ptr %ptr, ptr %dst) nounwind {
5249; CHECK: # %bb.0:
5350; CHECK-NEXT: vld $vr0, $a0, 0
5451; CHECK-NEXT: vpickev.h $vr0, $vr0, $vr0
55- ; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
56- ; CHECK-NEXT: st.d $a0, $a1, 0
52+ ; CHECK-NEXT: vstelm.d $vr0, $a1, 0, 0
5753; CHECK-NEXT: ret
5854 %a = load <4 x i32 >, ptr %ptr
5955 %trunc = trunc <4 x i32 > %a to <4 x i16 >
@@ -68,8 +64,7 @@ define void @load_trunc_4i32_to_4i8(ptr %ptr, ptr %dst) nounwind {
6864; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)
6965; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI4_0)
7066; CHECK-NEXT: vshuf.b $vr0, $vr0, $vr0, $vr1
71- ; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
72- ; CHECK-NEXT: st.w $a0, $a1, 0
67+ ; CHECK-NEXT: vstelm.w $vr0, $a1, 0, 0
7368; CHECK-NEXT: ret
7469 %a = load <4 x i32 >, ptr %ptr
7570 %trunc = trunc <4 x i32 > %a to <4 x i8 >
@@ -82,8 +77,7 @@ define void @load_trunc_8i16_to_8i8(ptr %ptr, ptr %dst) nounwind {
8277; CHECK: # %bb.0:
8378; CHECK-NEXT: vld $vr0, $a0, 0
8479; CHECK-NEXT: vpickev.b $vr0, $vr0, $vr0
85- ; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
86- ; CHECK-NEXT: st.d $a0, $a1, 0
80+ ; CHECK-NEXT: vstelm.d $vr0, $a1, 0, 0
8781; CHECK-NEXT: ret
8882 %a = load <8 x i16 >, ptr %ptr
8983 %trunc = trunc <8 x i16 > %a to <8 x i8 >
@@ -97,8 +91,7 @@ define void @load_trunc_2i32_to_2i16(ptr %ptr, ptr %dst) nounwind {
9791; CHECK-NEXT: ld.d $a0, $a0, 0
9892; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
9993; CHECK-NEXT: vshuf4i.h $vr0, $vr0, 8
100- ; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
101- ; CHECK-NEXT: st.w $a0, $a1, 0
94+ ; CHECK-NEXT: vstelm.w $vr0, $a1, 0, 0
10295; CHECK-NEXT: ret
10396 %a = load <2 x i32 >, ptr %ptr
10497 %trunc = trunc <2 x i32 > %a to <2 x i16 >
@@ -114,8 +107,7 @@ define void @load_trunc_2i32_to_2i8(ptr %ptr, ptr %dst) nounwind {
114107; CHECK-NEXT: vld $vr0, $a2, %pc_lo12(.LCPI7_0)
115108; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 0
116109; CHECK-NEXT: vshuf.b $vr0, $vr0, $vr1, $vr0
117- ; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
118- ; CHECK-NEXT: st.h $a0, $a1, 0
110+ ; CHECK-NEXT: vstelm.h $vr0, $a1, 0, 0
119111; CHECK-NEXT: ret
120112 %a = load <2 x i32 >, ptr %ptr
121113 %trunc = trunc <2 x i32 > %a to <2 x i8 >
@@ -129,8 +121,7 @@ define void @load_trunc_4i16_to_4i8(ptr %ptr, ptr %dst) nounwind {
129121; CHECK-NEXT: ld.d $a0, $a0, 0
130122; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
131123; CHECK-NEXT: vpickev.b $vr0, $vr0, $vr0
132- ; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
133- ; CHECK-NEXT: st.w $a0, $a1, 0
124+ ; CHECK-NEXT: vstelm.w $vr0, $a1, 0, 0
134125; CHECK-NEXT: ret
135126 %a = load <4 x i16 >, ptr %ptr
136127 %trunc = trunc <4 x i16 > %a to <4 x i8 >
@@ -144,8 +135,7 @@ define void @load_trunc_2i16_to_2i8(ptr %ptr, ptr %dst) nounwind {
144135; CHECK-NEXT: ld.w $a0, $a0, 0
145136; CHECK-NEXT: vinsgr2vr.w $vr0, $a0, 0
146137; CHECK-NEXT: vshuf4i.b $vr0, $vr0, 8
147- ; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
148- ; CHECK-NEXT: st.h $a0, $a1, 0
138+ ; CHECK-NEXT: vstelm.h $vr0, $a1, 0, 0
149139; CHECK-NEXT: ret
150140 %a = load <2 x i16 >, ptr %ptr
151141 %trunc = trunc <2 x i16 > %a to <2 x i8 >
0 commit comments