@@ -31,7 +31,7 @@ define void @extract_8xi32(ptr %src, ptr %dst) nounwind {
31
31
; CHECK-LABEL: extract_8xi32:
32
32
; CHECK: # %bb.0:
33
33
; CHECK-NEXT: xvld $xr0, $a0, 0
34
- ; CHECK-NEXT: vpickve2gr .w $a0, $vr0 , 1
34
+ ; CHECK-NEXT: xvpickve2gr .w $a0, $xr0 , 1
35
35
; CHECK-NEXT: st.w $a0, $a1, 0
36
36
; CHECK-NEXT: ret
37
37
%v = load volatile <8 x i32 >, ptr %src
@@ -44,7 +44,7 @@ define void @extract_4xi64(ptr %src, ptr %dst) nounwind {
44
44
; CHECK-LABEL: extract_4xi64:
45
45
; CHECK: # %bb.0:
46
46
; CHECK-NEXT: xvld $xr0, $a0, 0
47
- ; CHECK-NEXT: vpickve2gr .d $a0, $vr0 , 1
47
+ ; CHECK-NEXT: xvpickve2gr .d $a0, $xr0 , 1
48
48
; CHECK-NEXT: st.d $a0, $a1, 0
49
49
; CHECK-NEXT: ret
50
50
%v = load volatile <4 x i64 >, ptr %src
@@ -57,8 +57,8 @@ define void @extract_8xfloat(ptr %src, ptr %dst) nounwind {
57
57
; CHECK-LABEL: extract_8xfloat:
58
58
; CHECK: # %bb.0:
59
59
; CHECK-NEXT: xvld $xr0, $a0, 0
60
- ; CHECK-NEXT: ori $a0, $zero , 7
61
- ; CHECK-NEXT: xvreplve .w $xr0, $xr0 , $a0
60
+ ; CHECK-NEXT: xvpickve2gr.w $a0, $xr0 , 7
61
+ ; CHECK-NEXT: movgr2fr .w $fa0 , $a0
62
62
; CHECK-NEXT: fst.s $fa0, $a1, 0
63
63
; CHECK-NEXT: ret
64
64
%v = load volatile <8 x float >, ptr %src
@@ -71,8 +71,8 @@ define void @extract_4xdouble(ptr %src, ptr %dst) nounwind {
71
71
; CHECK-LABEL: extract_4xdouble:
72
72
; CHECK: # %bb.0:
73
73
; CHECK-NEXT: xvld $xr0, $a0, 0
74
- ; CHECK-NEXT: ori $a0, $zero , 3
75
- ; CHECK-NEXT: xvreplve .d $xr0, $xr0 , $a0
74
+ ; CHECK-NEXT: xvpickve2gr.d $a0, $xr0 , 3
75
+ ; CHECK-NEXT: movgr2fr .d $fa0 , $a0
76
76
; CHECK-NEXT: fst.d $fa0, $a1, 0
77
77
; CHECK-NEXT: ret
78
78
%v = load volatile <4 x double >, ptr %src
@@ -84,12 +84,21 @@ define void @extract_4xdouble(ptr %src, ptr %dst) nounwind {
84
84
define void @extract_32xi8_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
85
85
; CHECK-LABEL: extract_32xi8_idx:
86
86
; CHECK: # %bb.0:
87
- ; CHECK-NEXT: bstrpick.d $a2, $a2, 31, 0
87
+ ; CHECK-NEXT: addi.d $sp, $sp, -64
88
+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
89
+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
90
+ ; CHECK-NEXT: addi.d $fp, $sp, 64
91
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
88
92
; CHECK-NEXT: xvld $xr0, $a0, 0
89
- ; CHECK-NEXT: xvreplve.b $xr0, $xr0, $a2
90
- ; CHECK-NEXT: movfr2gr.s $a0, $fa0
91
- ; CHECK-NEXT: srai.w $a0, $a0, 24
93
+ ; CHECK-NEXT: xvst $xr0, $sp, 0
94
+ ; CHECK-NEXT: addi.d $a0, $sp, 0
95
+ ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 0
96
+ ; CHECK-NEXT: ld.b $a0, $a0, 0
92
97
; CHECK-NEXT: st.b $a0, $a1, 0
98
+ ; CHECK-NEXT: addi.d $sp, $fp, -64
99
+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
100
+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
101
+ ; CHECK-NEXT: addi.d $sp, $sp, 64
93
102
; CHECK-NEXT: ret
94
103
%v = load volatile <32 x i8 >, ptr %src
95
104
%e = extractelement <32 x i8 > %v , i32 %idx
@@ -100,12 +109,21 @@ define void @extract_32xi8_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
100
109
define void @extract_16xi16_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
101
110
; CHECK-LABEL: extract_16xi16_idx:
102
111
; CHECK: # %bb.0:
103
- ; CHECK-NEXT: bstrpick.d $a2, $a2, 31, 0
112
+ ; CHECK-NEXT: addi.d $sp, $sp, -64
113
+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
114
+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
115
+ ; CHECK-NEXT: addi.d $fp, $sp, 64
116
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
104
117
; CHECK-NEXT: xvld $xr0, $a0, 0
105
- ; CHECK-NEXT: xvreplve.h $xr0, $xr0, $a2
106
- ; CHECK-NEXT: movfr2gr.s $a0, $fa0
107
- ; CHECK-NEXT: srai.w $a0, $a0, 16
118
+ ; CHECK-NEXT: xvst $xr0, $sp, 0
119
+ ; CHECK-NEXT: addi.d $a0, $sp, 0
120
+ ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 1
121
+ ; CHECK-NEXT: ld.h $a0, $a0, 0
108
122
; CHECK-NEXT: st.h $a0, $a1, 0
123
+ ; CHECK-NEXT: addi.d $sp, $fp, -64
124
+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
125
+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
126
+ ; CHECK-NEXT: addi.d $sp, $sp, 64
109
127
; CHECK-NEXT: ret
110
128
%v = load volatile <16 x i16 >, ptr %src
111
129
%e = extractelement <16 x i16 > %v , i32 %idx
@@ -116,11 +134,21 @@ define void @extract_16xi16_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
116
134
define void @extract_8xi32_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
117
135
; CHECK-LABEL: extract_8xi32_idx:
118
136
; CHECK: # %bb.0:
119
- ; CHECK-NEXT: bstrpick.d $a2, $a2, 31, 0
137
+ ; CHECK-NEXT: addi.d $sp, $sp, -64
138
+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
139
+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
140
+ ; CHECK-NEXT: addi.d $fp, $sp, 64
141
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
120
142
; CHECK-NEXT: xvld $xr0, $a0, 0
121
- ; CHECK-NEXT: xvreplve.w $xr0, $xr0, $a2
122
- ; CHECK-NEXT: movfr2gr.s $a0, $fa0
143
+ ; CHECK-NEXT: xvst $xr0, $sp, 0
144
+ ; CHECK-NEXT: addi.d $a0, $sp, 0
145
+ ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 2
146
+ ; CHECK-NEXT: ld.w $a0, $a0, 0
123
147
; CHECK-NEXT: st.w $a0, $a1, 0
148
+ ; CHECK-NEXT: addi.d $sp, $fp, -64
149
+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
150
+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
151
+ ; CHECK-NEXT: addi.d $sp, $sp, 64
124
152
; CHECK-NEXT: ret
125
153
%v = load volatile <8 x i32 >, ptr %src
126
154
%e = extractelement <8 x i32 > %v , i32 %idx
@@ -131,11 +159,21 @@ define void @extract_8xi32_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
131
159
define void @extract_4xi64_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
132
160
; CHECK-LABEL: extract_4xi64_idx:
133
161
; CHECK: # %bb.0:
134
- ; CHECK-NEXT: bstrpick.d $a2, $a2, 31, 0
162
+ ; CHECK-NEXT: addi.d $sp, $sp, -64
163
+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
164
+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
165
+ ; CHECK-NEXT: addi.d $fp, $sp, 64
166
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
135
167
; CHECK-NEXT: xvld $xr0, $a0, 0
136
- ; CHECK-NEXT: xvreplve.d $xr0, $xr0, $a2
137
- ; CHECK-NEXT: movfr2gr.d $a0, $fa0
168
+ ; CHECK-NEXT: xvst $xr0, $sp, 0
169
+ ; CHECK-NEXT: addi.d $a0, $sp, 0
170
+ ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 3
171
+ ; CHECK-NEXT: ld.d $a0, $a0, 0
138
172
; CHECK-NEXT: st.d $a0, $a1, 0
173
+ ; CHECK-NEXT: addi.d $sp, $fp, -64
174
+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
175
+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
176
+ ; CHECK-NEXT: addi.d $sp, $sp, 64
139
177
; CHECK-NEXT: ret
140
178
%v = load volatile <4 x i64 >, ptr %src
141
179
%e = extractelement <4 x i64 > %v , i32 %idx
@@ -146,10 +184,21 @@ define void @extract_4xi64_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
146
184
define void @extract_8xfloat_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
147
185
; CHECK-LABEL: extract_8xfloat_idx:
148
186
; CHECK: # %bb.0:
149
- ; CHECK-NEXT: bstrpick.d $a2, $a2, 31, 0
187
+ ; CHECK-NEXT: addi.d $sp, $sp, -64
188
+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
189
+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
190
+ ; CHECK-NEXT: addi.d $fp, $sp, 64
191
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
150
192
; CHECK-NEXT: xvld $xr0, $a0, 0
151
- ; CHECK-NEXT: xvreplve.w $xr0, $xr0, $a2
193
+ ; CHECK-NEXT: xvst $xr0, $sp, 0
194
+ ; CHECK-NEXT: addi.d $a0, $sp, 0
195
+ ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 2
196
+ ; CHECK-NEXT: fld.s $fa0, $a0, 0
152
197
; CHECK-NEXT: fst.s $fa0, $a1, 0
198
+ ; CHECK-NEXT: addi.d $sp, $fp, -64
199
+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
200
+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
201
+ ; CHECK-NEXT: addi.d $sp, $sp, 64
153
202
; CHECK-NEXT: ret
154
203
%v = load volatile <8 x float >, ptr %src
155
204
%e = extractelement <8 x float > %v , i32 %idx
@@ -160,10 +209,21 @@ define void @extract_8xfloat_idx(ptr %src, ptr %dst, i32 %idx) nounwind {
160
209
define void @extract_4xdouble_idx (ptr %src , ptr %dst , i32 %idx ) nounwind {
161
210
; CHECK-LABEL: extract_4xdouble_idx:
162
211
; CHECK: # %bb.0:
163
- ; CHECK-NEXT: bstrpick.d $a2, $a2, 31, 0
212
+ ; CHECK-NEXT: addi.d $sp, $sp, -64
213
+ ; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
214
+ ; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
215
+ ; CHECK-NEXT: addi.d $fp, $sp, 64
216
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
164
217
; CHECK-NEXT: xvld $xr0, $a0, 0
165
- ; CHECK-NEXT: xvreplve.d $xr0, $xr0, $a2
218
+ ; CHECK-NEXT: xvst $xr0, $sp, 0
219
+ ; CHECK-NEXT: addi.d $a0, $sp, 0
220
+ ; CHECK-NEXT: bstrins.d $a0, $a2, 4, 3
221
+ ; CHECK-NEXT: fld.d $fa0, $a0, 0
166
222
; CHECK-NEXT: fst.d $fa0, $a1, 0
223
+ ; CHECK-NEXT: addi.d $sp, $fp, -64
224
+ ; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
225
+ ; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
226
+ ; CHECK-NEXT: addi.d $sp, $sp, 64
167
227
; CHECK-NEXT: ret
168
228
%v = load volatile <4 x double >, ptr %src
169
229
%e = extractelement <4 x double > %v , i32 %idx
0 commit comments