Skip to content

Commit 4a86c1d

Browse files
committed
Address Weining's comment
1 parent 279874f commit 4a86c1d

File tree

1 file changed

+144
-75
lines changed

1 file changed

+144
-75
lines changed

llvm/test/CodeGen/LoongArch/lasx/intrinsic-conversion.ll

Lines changed: 144 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -4,231 +4,300 @@
44

55
declare <8 x float> @llvm.loongarch.lasx.cast.128.s(<4 x float>)
66

7-
define <8 x float> @lasx_cast_128_s(<4 x float> %va) {
7+
define void @lasx_cast_128_s(ptr %vd, ptr %va) {
88
; CHECK-LABEL: lasx_cast_128_s:
99
; CHECK: # %bb.0: # %entry
10-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
10+
; CHECK-NEXT: vld $vr0, $a1, 0
11+
; CHECK-NEXT: xvst $xr0, $a0, 0
1112
; CHECK-NEXT: ret
1213
entry:
13-
%res = call <8 x float> @llvm.loongarch.lasx.cast.128.s(<4 x float> %va)
14-
ret <8 x float> %res
14+
%a = load <4 x float>, ptr %va
15+
%b = call <8 x float> @llvm.loongarch.lasx.cast.128.s(<4 x float> %a)
16+
store <8 x float> %b, ptr %vd
17+
ret void
1518
}
1619

1720
declare <4 x double> @llvm.loongarch.lasx.cast.128.d(<2 x double>)
1821

19-
define <4 x double> @lasx_cast_128_d(<2 x double> %va) {
22+
define void @lasx_cast_128_d(ptr %vd, ptr %va) {
2023
; CHECK-LABEL: lasx_cast_128_d:
2124
; CHECK: # %bb.0: # %entry
22-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
25+
; CHECK-NEXT: vld $vr0, $a1, 0
26+
; CHECK-NEXT: xvst $xr0, $a0, 0
2327
; CHECK-NEXT: ret
2428
entry:
25-
%res = call <4 x double> @llvm.loongarch.lasx.cast.128.d(<2 x double> %va)
26-
ret <4 x double> %res
29+
%a = load <2 x double>, ptr %va
30+
%b = call <4 x double> @llvm.loongarch.lasx.cast.128.d(<2 x double> %a)
31+
store <4 x double> %b, ptr %vd
32+
ret void
2733
}
2834

2935
declare <4 x i64> @llvm.loongarch.lasx.cast.128(<2 x i64>)
3036

31-
define <4 x i64> @lasx_cast_128(<2 x i64> %va) {
37+
define void @lasx_cast_128(ptr %vd, ptr %va) {
3238
; CHECK-LABEL: lasx_cast_128:
3339
; CHECK: # %bb.0: # %entry
34-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
40+
; CHECK-NEXT: vld $vr0, $a1, 0
41+
; CHECK-NEXT: xvst $xr0, $a0, 0
3542
; CHECK-NEXT: ret
3643
entry:
37-
%res = call <4 x i64> @llvm.loongarch.lasx.cast.128(<2 x i64> %va)
38-
ret <4 x i64> %res
44+
%a = load <2 x i64>, ptr %va
45+
%b = call <4 x i64> @llvm.loongarch.lasx.cast.128(<2 x i64> %a)
46+
store <4 x i64> %b, ptr %vd
47+
ret void
3948
}
4049

4150
declare <8 x float> @llvm.loongarch.lasx.concat.128.s(<4 x float>, <4 x float>)
4251

43-
define <8 x float> @lasx_concat_128_s(<4 x float> %va, <4 x float> %vb) {
52+
define void @lasx_concat_128_s(ptr %vd, ptr %va, ptr %vb) {
4453
; CHECK-LABEL: lasx_concat_128_s:
4554
; CHECK: # %bb.0: # %entry
46-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
47-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
55+
; CHECK-NEXT: vld $vr0, $a1, 0
56+
; CHECK-NEXT: vld $vr1, $a2, 0
4857
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
58+
; CHECK-NEXT: xvst $xr0, $a0, 0
4959
; CHECK-NEXT: ret
5060
entry:
51-
%res = call <8 x float> @llvm.loongarch.lasx.concat.128.s(<4 x float> %va, <4 x float> %vb)
52-
ret <8 x float> %res
61+
%a = load <4 x float>, ptr %va
62+
%b = load <4 x float>, ptr %vb
63+
%c = call <8 x float> @llvm.loongarch.lasx.concat.128.s(<4 x float> %a, <4 x float> %b)
64+
store <8 x float> %c, ptr %vd
65+
ret void
5366
}
5467

5568
declare <4 x double> @llvm.loongarch.lasx.concat.128.d(<2 x double>, <2 x double>)
5669

57-
define <4 x double> @lasx_concat_128_d(<2 x double> %va, <2 x double> %vb) {
70+
define void @lasx_concat_128_d(ptr %vd, ptr %va, ptr %vb) {
5871
; CHECK-LABEL: lasx_concat_128_d:
5972
; CHECK: # %bb.0: # %entry
60-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
61-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
73+
; CHECK-NEXT: vld $vr0, $a1, 0
74+
; CHECK-NEXT: vld $vr1, $a2, 0
6275
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
76+
; CHECK-NEXT: xvst $xr0, $a0, 0
6377
; CHECK-NEXT: ret
6478
entry:
65-
%res = call <4 x double> @llvm.loongarch.lasx.concat.128.d(<2 x double> %va, <2 x double> %vb)
66-
ret <4 x double> %res
79+
%a = load <2 x double>, ptr %va
80+
%b = load <2 x double>, ptr %vb
81+
%c = call <4 x double> @llvm.loongarch.lasx.concat.128.d(<2 x double> %a, <2 x double> %b)
82+
store <4 x double> %c, ptr %vd
83+
ret void
6784
}
6885

6986
declare <4 x i64> @llvm.loongarch.lasx.concat.128(<2 x i64>, <2 x i64>)
7087

71-
define <4 x i64> @lasx_concat_128(<2 x i64> %va, <2 x i64> %vb) {
88+
define void @lasx_concat_128(ptr %vd, ptr %va, ptr %vb) {
7289
; CHECK-LABEL: lasx_concat_128:
7390
; CHECK: # %bb.0: # %entry
74-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
75-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
91+
; CHECK-NEXT: vld $vr0, $a1, 0
92+
; CHECK-NEXT: vld $vr1, $a2, 0
7693
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
94+
; CHECK-NEXT: xvst $xr0, $a0, 0
7795
; CHECK-NEXT: ret
7896
entry:
79-
%res = call <4 x i64> @llvm.loongarch.lasx.concat.128(<2 x i64> %va, <2 x i64> %vb)
80-
ret <4 x i64> %res
97+
%a = load <2 x i64>, ptr %va
98+
%b = load <2 x i64>, ptr %vb
99+
%c = call <4 x i64> @llvm.loongarch.lasx.concat.128(<2 x i64> %a, <2 x i64> %b)
100+
store <4 x i64> %c, ptr %vd
101+
ret void
81102
}
82103

83104
declare <4 x float> @llvm.loongarch.lasx.extract.128.lo.s(<8 x float>)
84105

85-
define <4 x float> @lasx_extract_128_lo_s(<8 x float> %va) {
106+
define void @lasx_extract_128_lo_s(ptr %vd, ptr %va) {
86107
; CHECK-LABEL: lasx_extract_128_lo_s:
87108
; CHECK: # %bb.0: # %entry
88-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 killed $xr0
109+
; CHECK-NEXT: xvld $xr0, $a1, 0
110+
; CHECK-NEXT: vst $vr0, $a0, 0
89111
; CHECK-NEXT: ret
90112
entry:
91-
%res = call <4 x float> @llvm.loongarch.lasx.extract.128.lo.s(<8 x float> %va)
92-
ret <4 x float> %res
113+
%a = load <8 x float>, ptr %va
114+
%c = call <4 x float> @llvm.loongarch.lasx.extract.128.lo.s(<8 x float> %a)
115+
store <4 x float> %c, ptr %vd
116+
ret void
93117
}
94118

95119
declare <2 x double> @llvm.loongarch.lasx.extract.128.lo.d(<4 x double>)
96120

97-
define <2 x double> @lasx_extract_128_lo_d(<4 x double> %va) {
121+
define void @lasx_extract_128_lo_d(ptr %vd, ptr %va) {
98122
; CHECK-LABEL: lasx_extract_128_lo_d:
99123
; CHECK: # %bb.0: # %entry
100-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 killed $xr0
124+
; CHECK-NEXT: xvld $xr0, $a1, 0
125+
; CHECK-NEXT: vst $vr0, $a0, 0
101126
; CHECK-NEXT: ret
102127
entry:
103-
%res = call <2 x double> @llvm.loongarch.lasx.extract.128.lo.d(<4 x double> %va)
104-
ret <2 x double> %res
128+
%a = load <4 x double>, ptr %va
129+
%c = call <2 x double> @llvm.loongarch.lasx.extract.128.lo.d(<4 x double> %a)
130+
store <2 x double> %c, ptr %vd
131+
ret void
105132
}
106133

107134
declare <2 x i64> @llvm.loongarch.lasx.extract.128.lo(<4 x i64>)
108135

109-
define <2 x i64> @lasx_extract_128_lo(<4 x i64> %va) {
136+
define void @lasx_extract_128_lo(ptr %vd, ptr %va) {
110137
; CHECK-LABEL: lasx_extract_128_lo:
111138
; CHECK: # %bb.0: # %entry
112-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 killed $xr0
139+
; CHECK-NEXT: xvld $xr0, $a1, 0
140+
; CHECK-NEXT: vst $vr0, $a0, 0
113141
; CHECK-NEXT: ret
114142
entry:
115-
%res = call <2 x i64> @llvm.loongarch.lasx.extract.128.lo(<4 x i64> %va)
116-
ret <2 x i64> %res
143+
%a = load <4 x i64>, ptr %va
144+
%c = call <2 x i64> @llvm.loongarch.lasx.extract.128.lo(<4 x i64> %a)
145+
store <2 x i64> %c, ptr %vd
146+
ret void
117147
}
118148

119149
declare <4 x float> @llvm.loongarch.lasx.extract.128.hi.s(<8 x float>)
120150

121-
define <4 x float> @lasx_extract_128_hi_s(<8 x float> %va) {
151+
define void @lasx_extract_128_hi_s(ptr %vd, ptr %va) {
122152
; CHECK-LABEL: lasx_extract_128_hi_s:
123153
; CHECK: # %bb.0: # %entry
154+
; CHECK-NEXT: xvld $xr0, $a1, 0
124155
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 1
125-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 killed $xr0
156+
; CHECK-NEXT: vst $vr0, $a0, 0
126157
; CHECK-NEXT: ret
127158
entry:
128-
%res = call <4 x float> @llvm.loongarch.lasx.extract.128.hi.s(<8 x float> %va)
129-
ret <4 x float> %res
159+
%a = load <8 x float>, ptr %va
160+
%c = call <4 x float> @llvm.loongarch.lasx.extract.128.hi.s(<8 x float> %a)
161+
store <4 x float> %c, ptr %vd
162+
ret void
130163
}
131164

132165
declare <2 x double> @llvm.loongarch.lasx.extract.128.hi.d(<4 x double>)
133166

134-
define <2 x double> @lasx_extract_128_hi_d(<4 x double> %va) {
167+
define void @lasx_extract_128_hi_d(ptr %vd, ptr %va) {
135168
; CHECK-LABEL: lasx_extract_128_hi_d:
136169
; CHECK: # %bb.0: # %entry
170+
; CHECK-NEXT: xvld $xr0, $a1, 0
137171
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 1
138-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 killed $xr0
172+
; CHECK-NEXT: vst $vr0, $a0, 0
139173
; CHECK-NEXT: ret
140174
entry:
141-
%res = call <2 x double> @llvm.loongarch.lasx.extract.128.hi.d(<4 x double> %va)
142-
ret <2 x double> %res
175+
%a = load <4 x double>, ptr %va
176+
%c = call <2 x double> @llvm.loongarch.lasx.extract.128.hi.d(<4 x double> %a)
177+
store <2 x double> %c, ptr %vd
178+
ret void
143179
}
144180

145181
declare <2 x i64> @llvm.loongarch.lasx.extract.128.hi(<4 x i64>)
146182

147-
define <2 x i64> @lasx_extract_128_hi(<4 x i64> %va) {
183+
define void @lasx_extract_128_hi(ptr %vd, ptr %va) {
148184
; CHECK-LABEL: lasx_extract_128_hi:
149185
; CHECK: # %bb.0: # %entry
186+
; CHECK-NEXT: xvld $xr0, $a1, 0
150187
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 1
151-
; CHECK-NEXT: # kill: def $vr0 killed $vr0 killed $xr0
188+
; CHECK-NEXT: vst $vr0, $a0, 0
152189
; CHECK-NEXT: ret
153190
entry:
154-
%res = call <2 x i64> @llvm.loongarch.lasx.extract.128.hi(<4 x i64> %va)
155-
ret <2 x i64> %res
191+
%a = load <4 x i64>, ptr %va
192+
%c = call <2 x i64> @llvm.loongarch.lasx.extract.128.hi(<4 x i64> %a)
193+
store <2 x i64> %c, ptr %vd
194+
ret void
156195
}
157196

158197
declare <8 x float> @llvm.loongarch.lasx.insert.128.lo.s(<8 x float>, <4 x float>)
159198

160-
define <8 x float> @lasx_insert_128_lo_s(<8 x float> %va, <4 x float> %vb) {
199+
define void @lasx_insert_128_lo_s(ptr %vd, ptr %va, ptr %vb) {
161200
; CHECK-LABEL: lasx_insert_128_lo_s:
162201
; CHECK: # %bb.0: # %entry
163-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
202+
; CHECK-NEXT: xvld $xr0, $a1, 0
203+
; CHECK-NEXT: vld $vr1, $a2, 0
164204
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 48
205+
; CHECK-NEXT: xvst $xr0, $a0, 0
165206
; CHECK-NEXT: ret
166207
entry:
167-
%res = call <8 x float> @llvm.loongarch.lasx.insert.128.lo.s(<8 x float> %va, <4 x float> %vb)
168-
ret <8 x float> %res
208+
%a = load <8 x float>, ptr %va
209+
%b = load <4 x float>, ptr %vb
210+
%c = call <8 x float> @llvm.loongarch.lasx.insert.128.lo.s(<8 x float> %a, <4 x float> %b)
211+
store <8 x float> %c, ptr %vd
212+
ret void
169213
}
170214

171215
declare <4 x double> @llvm.loongarch.lasx.insert.128.lo.d(<4 x double>, <2 x double>)
172216

173-
define <4 x double> @lasx_insert_128_lo_d(<4 x double> %va, <2 x double> %vb) {
217+
define void @lasx_insert_128_lo_d(ptr %vd, ptr %va, ptr %vb) {
174218
; CHECK-LABEL: lasx_insert_128_lo_d:
175219
; CHECK: # %bb.0: # %entry
176-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
220+
; CHECK-NEXT: xvld $xr0, $a1, 0
221+
; CHECK-NEXT: vld $vr1, $a2, 0
177222
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 48
223+
; CHECK-NEXT: xvst $xr0, $a0, 0
178224
; CHECK-NEXT: ret
179225
entry:
180-
%res = call <4 x double> @llvm.loongarch.lasx.insert.128.lo.d(<4 x double> %va, <2 x double> %vb)
181-
ret <4 x double> %res
226+
%a = load <4 x double>, ptr %va
227+
%b = load <2 x double>, ptr %vb
228+
%c = call <4 x double> @llvm.loongarch.lasx.insert.128.lo.d(<4 x double> %a, <2 x double> %b)
229+
store <4 x double> %c, ptr %vd
230+
ret void
182231
}
183232

184233
declare <4 x i64> @llvm.loongarch.lasx.insert.128.lo(<4 x i64>, <2 x i64>)
185234

186-
define <4 x i64> @lasx_insert_128_lo(<4 x i64> %va, <2 x i64> %vb) {
235+
define void @lasx_insert_128_lo(ptr %vd, ptr %va, ptr %vb) {
187236
; CHECK-LABEL: lasx_insert_128_lo:
188237
; CHECK: # %bb.0: # %entry
189-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
238+
; CHECK-NEXT: xvld $xr0, $a1, 0
239+
; CHECK-NEXT: vld $vr1, $a2, 0
190240
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 48
241+
; CHECK-NEXT: xvst $xr0, $a0, 0
191242
; CHECK-NEXT: ret
192243
entry:
193-
%res = call <4 x i64> @llvm.loongarch.lasx.insert.128.lo(<4 x i64> %va, <2 x i64> %vb)
194-
ret <4 x i64> %res
244+
%a = load <4 x i64>, ptr %va
245+
%b = load <2 x i64>, ptr %vb
246+
%c = call <4 x i64> @llvm.loongarch.lasx.insert.128.lo(<4 x i64> %a, <2 x i64> %b)
247+
store <4 x i64> %c, ptr %vd
248+
ret void
195249
}
196250

197251
declare <8 x float> @llvm.loongarch.lasx.insert.128.hi.s(<8 x float>, <4 x float>)
198252

199-
define <8 x float> @lasx_insert_128_hi_s(<8 x float> %va, <4 x float> %vb) {
253+
define void @lasx_insert_128_hi_s(ptr %vd, ptr %va, ptr %vb) {
200254
; CHECK-LABEL: lasx_insert_128_hi_s:
201255
; CHECK: # %bb.0: # %entry
202-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
256+
; CHECK-NEXT: xvld $xr0, $a1, 0
257+
; CHECK-NEXT: vld $vr1, $a2, 0
203258
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
259+
; CHECK-NEXT: xvst $xr0, $a0, 0
204260
; CHECK-NEXT: ret
205261
entry:
206-
%res = call <8 x float> @llvm.loongarch.lasx.insert.128.hi.s(<8 x float> %va, <4 x float> %vb)
207-
ret <8 x float> %res
262+
%a = load <8 x float>, ptr %va
263+
%b = load <4 x float>, ptr %vb
264+
%c = call <8 x float> @llvm.loongarch.lasx.insert.128.hi.s(<8 x float> %a, <4 x float> %b)
265+
store <8 x float> %c, ptr %vd
266+
ret void
208267
}
209268

210269
declare <4 x double> @llvm.loongarch.lasx.insert.128.hi.d(<4 x double>, <2 x double>)
211270

212-
define <4 x double> @lasx_insert_128_hi_d(<4 x double> %va, <2 x double> %vb) {
271+
define void @lasx_insert_128_hi_d(ptr %vd, ptr %va, ptr %vb) {
213272
; CHECK-LABEL: lasx_insert_128_hi_d:
214273
; CHECK: # %bb.0: # %entry
215-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
274+
; CHECK-NEXT: xvld $xr0, $a1, 0
275+
; CHECK-NEXT: vld $vr1, $a2, 0
216276
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
277+
; CHECK-NEXT: xvst $xr0, $a0, 0
217278
; CHECK-NEXT: ret
218279
entry:
219-
%res = call <4 x double> @llvm.loongarch.lasx.insert.128.hi.d(<4 x double> %va, <2 x double> %vb)
220-
ret <4 x double> %res
280+
%a = load <4 x double>, ptr %va
281+
%b = load <2 x double>, ptr %vb
282+
%c = call <4 x double> @llvm.loongarch.lasx.insert.128.hi.d(<4 x double> %a, <2 x double> %b)
283+
store <4 x double> %c, ptr %vd
284+
ret void
221285
}
222286

223287
declare <4 x i64> @llvm.loongarch.lasx.insert.128.hi(<4 x i64>, <2 x i64>)
224288

225-
define <4 x i64> @lasx_insert_128_hi(<4 x i64> %va, <2 x i64> %vb) {
289+
define void @lasx_insert_128_hi(ptr %vd, ptr %va, ptr %vb) {
226290
; CHECK-LABEL: lasx_insert_128_hi:
227291
; CHECK: # %bb.0: # %entry
228-
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
292+
; CHECK-NEXT: xvld $xr0, $a1, 0
293+
; CHECK-NEXT: vld $vr1, $a2, 0
229294
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
295+
; CHECK-NEXT: xvst $xr0, $a0, 0
230296
; CHECK-NEXT: ret
231297
entry:
232-
%res = call <4 x i64> @llvm.loongarch.lasx.insert.128.hi(<4 x i64> %va, <2 x i64> %vb)
233-
ret <4 x i64> %res
298+
%a = load <4 x i64>, ptr %va
299+
%b = load <2 x i64>, ptr %vb
300+
%c = call <4 x i64> @llvm.loongarch.lasx.insert.128.hi(<4 x i64> %a, <2 x i64> %b)
301+
store <4 x i64> %c, ptr %vd
302+
ret void
234303
}

0 commit comments

Comments
 (0)