@@ -77,10 +77,9 @@ define void @extract_32xi8_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
7777; CHECK-LABEL: extract_32xi8_idx:
7878; CHECK: # %bb.0:
7979; CHECK-NEXT: xvld $xr0, $a0, 0
80- ; CHECK-NEXT: srai.d $a0, $a2, 2
81- ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a0
82- ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
83- ; CHECK-NEXT: xvreplve.b $xr0, $xr0, $a2
80+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
81+ ; CHECK-NEXT: xvreplgr2vr.b $xr2, $a2
82+ ; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2
8483; CHECK-NEXT: xvstelm.b $xr0, $a1, 0, 0
8584; CHECK-NEXT: ret
8685 %v = load volatile <32 x i8 >, ptr %src
@@ -93,11 +92,10 @@ define void @extract_16xi16_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
9392; CHECK-LABEL: extract_16xi16_idx:
9493; CHECK: # %bb.0:
9594; CHECK-NEXT: xvld $xr0, $a0, 0
96- ; CHECK-NEXT: srai.d $a0, $a2, 1
97- ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a0
98- ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
99- ; CHECK-NEXT: xvreplve.h $xr0, $xr0, $a2
100- ; CHECK-NEXT: xvstelm.h $xr0, $a1, 0, 0
95+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
96+ ; CHECK-NEXT: xvreplgr2vr.h $xr2, $a2
97+ ; CHECK-NEXT: xvshuf.h $xr2, $xr1, $xr0
98+ ; CHECK-NEXT: xvstelm.h $xr2, $a1, 0, 0
10199; CHECK-NEXT: ret
102100 %v = load volatile <16 x i16 >, ptr %src
103101 %e = extractelement <16 x i16 > %v , i32 %idx
@@ -123,13 +121,10 @@ define void @extract_4xi64_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
123121; CHECK-LABEL: extract_4xi64_idx:
124122; CHECK: # %bb.0:
125123; CHECK-NEXT: xvld $xr0, $a0, 0
126- ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
127- ; CHECK-NEXT: xvslli.w $xr1, $xr1, 1
128- ; CHECK-NEXT: xvperm.w $xr2, $xr0, $xr1
129- ; CHECK-NEXT: xvaddi.wu $xr1, $xr1, 1
130- ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
131- ; CHECK-NEXT: xvilvl.w $xr0, $xr0, $xr2
132- ; CHECK-NEXT: xvstelm.d $xr0, $a1, 0, 0
124+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
125+ ; CHECK-NEXT: xvreplgr2vr.d $xr2, $a2
126+ ; CHECK-NEXT: xvshuf.d $xr2, $xr1, $xr0
127+ ; CHECK-NEXT: xvstelm.d $xr2, $a1, 0, 0
133128; CHECK-NEXT: ret
134129 %v = load volatile <4 x i64 >, ptr %src
135130 %e = extractelement <4 x i64 > %v , i32 %idx
@@ -155,13 +150,10 @@ define void @extract_4xdouble_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
155150; CHECK-LABEL: extract_4xdouble_idx:
156151; CHECK: # %bb.0:
157152; CHECK-NEXT: xvld $xr0, $a0, 0
158- ; CHECK-NEXT: xvreplgr2vr.w $xr1, $a2
159- ; CHECK-NEXT: xvslli.w $xr1, $xr1, 1
160- ; CHECK-NEXT: xvperm.w $xr2, $xr0, $xr1
161- ; CHECK-NEXT: xvaddi.wu $xr1, $xr1, 1
162- ; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
163- ; CHECK-NEXT: xvilvl.w $xr0, $xr0, $xr2
164- ; CHECK-NEXT: xvstelm.d $xr0, $a1, 0, 0
153+ ; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
154+ ; CHECK-NEXT: xvreplgr2vr.d $xr2, $a2
155+ ; CHECK-NEXT: xvshuf.d $xr2, $xr1, $xr0
156+ ; CHECK-NEXT: xvstelm.d $xr2, $a1, 0, 0
165157; CHECK-NEXT: ret
166158 %v = load volatile <4 x double >, ptr %src
167159 %e = extractelement <4 x double > %v , i32 %idx
0 commit comments