@@ -76,21 +76,13 @@ define void @extract_4xdouble(ptr %src, ptr %dst) nounwind {
76
76
define void @extract_32xi8_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
77
77
; CHECK-LABEL: extract_32xi8_idx:
78
78
; 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
84
79
; 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
94
86
; CHECK-NEXT: ret
95
87
%v = load volatile <32 x i8 >, ptr %src
96
88
%e = extractelement <32 x i8 > %v , i32 %idx
@@ -101,21 +93,13 @@ define void @extract_32xi8_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
101
93
define void @extract_16xi16_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
102
94
; CHECK-LABEL: extract_16xi16_idx:
103
95
; 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
109
96
; 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
119
103
; CHECK-NEXT: ret
120
104
%v = load volatile <16 x i16 >, ptr %src
121
105
%e = extractelement <16 x i16 > %v , i32 %idx
@@ -127,8 +111,7 @@ define void @extract_8xi32_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
127
111
; CHECK-LABEL: extract_8xi32_idx:
128
112
; CHECK: # %bb.0:
129
113
; 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
132
115
; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
133
116
; CHECK-NEXT: xvstelm.w $xr0, $a1, 0, 0
134
117
; CHECK-NEXT: ret
@@ -141,21 +124,14 @@ define void @extract_8xi32_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
141
124
define void @extract_4xi64_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
142
125
; CHECK-LABEL: extract_4xi64_idx:
143
126
; 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
149
127
; 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
159
135
; CHECK-NEXT: ret
160
136
%v = load volatile <4 x i64 >, ptr %src
161
137
%e = extractelement <4 x i64 > %v , i32 %idx
@@ -167,8 +143,7 @@ define void @extract_8xfloat_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
167
143
; CHECK-LABEL: extract_8xfloat_idx:
168
144
; CHECK: # %bb.0:
169
145
; 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
172
147
; CHECK-NEXT: xvperm.w $xr0, $xr0, $xr1
173
148
; CHECK-NEXT: xvstelm.w $xr0, $a1, 0, 0
174
149
; CHECK-NEXT: ret
@@ -181,21 +156,14 @@ define void @extract_8xfloat_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
181
156
define void @extract_4xdouble_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
182
157
; CHECK-LABEL: extract_4xdouble_idx:
183
158
; 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
189
159
; 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
199
167
; CHECK-NEXT: ret
200
168
%v = load volatile <4 x double >, ptr %src
201
169
%e = extractelement <4 x double > %v , i32 %idx
0 commit comments