You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll
+39-56Lines changed: 39 additions & 56 deletions
Original file line number
Diff line number
Diff line change
@@ -157,9 +157,8 @@ define <vscale x 4 x i32> @vand_vi(<vscale x 4 x i32> %a, iXLen %vl) {
157
157
;
158
158
; VLOPT-LABEL: vand_vi:
159
159
; VLOPT: # %bb.0:
160
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
161
-
; VLOPT-NEXT: vand.vi v10, v8, 5
162
160
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
161
+
; VLOPT-NEXT: vand.vi v10, v8, 5
163
162
; VLOPT-NEXT: vadd.vv v8, v10, v8
164
163
; VLOPT-NEXT: ret
165
164
%1 = call <vscale x 4 x i32> @llvm.riscv.vand.nxv4i32.i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i325, iXLen -1)
@@ -178,9 +177,8 @@ define <vscale x 4 x i32> @vand_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b,
178
177
;
179
178
; VLOPT-LABEL: vand_vv:
180
179
; VLOPT: # %bb.0:
181
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
182
-
; VLOPT-NEXT: vand.vv v8, v8, v10
183
180
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
181
+
; VLOPT-NEXT: vand.vv v8, v8, v10
184
182
; VLOPT-NEXT: vadd.vv v8, v8, v10
185
183
; VLOPT-NEXT: ret
186
184
%1 = call <vscale x 4 x i32> @llvm.riscv.vand.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -199,9 +197,8 @@ define <vscale x 4 x i32> @vand_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
199
197
;
200
198
; VLOPT-LABEL: vand_vx:
201
199
; VLOPT: # %bb.0:
202
-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
203
-
; VLOPT-NEXT: vand.vx v10, v8, a0
204
200
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
201
+
; VLOPT-NEXT: vand.vx v10, v8, a0
205
202
; VLOPT-NEXT: vadd.vv v8, v10, v8
206
203
; VLOPT-NEXT: ret
207
204
%1 = call <vscale x 4 x i32> @llvm.riscv.vand.nxv4i32.i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32%b, iXLen -1)
@@ -220,9 +217,8 @@ define <vscale x 4 x i32> @vor_vi(<vscale x 4 x i32> %a, iXLen %vl) {
220
217
;
221
218
; VLOPT-LABEL: vor_vi:
222
219
; VLOPT: # %bb.0:
223
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
224
-
; VLOPT-NEXT: vor.vi v10, v8, 5
225
220
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
221
+
; VLOPT-NEXT: vor.vi v10, v8, 5
226
222
; VLOPT-NEXT: vadd.vv v8, v10, v8
227
223
; VLOPT-NEXT: ret
228
224
%1 = call <vscale x 4 x i32> @llvm.riscv.vor.nxv4i32.i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i325, iXLen -1)
@@ -241,9 +237,8 @@ define <vscale x 4 x i32> @vor_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b,
241
237
;
242
238
; VLOPT-LABEL: vor_vv:
243
239
; VLOPT: # %bb.0:
244
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
245
-
; VLOPT-NEXT: vor.vv v8, v8, v10
246
240
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
241
+
; VLOPT-NEXT: vor.vv v8, v8, v10
247
242
; VLOPT-NEXT: vadd.vv v8, v8, v10
248
243
; VLOPT-NEXT: ret
249
244
%1 = call <vscale x 4 x i32> @llvm.riscv.vor.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -262,9 +257,8 @@ define <vscale x 4 x i32> @vor_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
262
257
;
263
258
; VLOPT-LABEL: vor_vx:
264
259
; VLOPT: # %bb.0:
265
-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
266
-
; VLOPT-NEXT: vor.vx v10, v8, a0
267
260
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
261
+
; VLOPT-NEXT: vor.vx v10, v8, a0
268
262
; VLOPT-NEXT: vadd.vv v8, v10, v8
269
263
; VLOPT-NEXT: ret
270
264
%1 = call <vscale x 4 x i32> @llvm.riscv.vor.nxv4i32.i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32%b, iXLen -1)
@@ -283,9 +277,8 @@ define <vscale x 4 x i32> @vxor_vi(<vscale x 4 x i32> %a, iXLen %vl) {
283
277
;
284
278
; VLOPT-LABEL: vxor_vi:
285
279
; VLOPT: # %bb.0:
286
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
287
-
; VLOPT-NEXT: vxor.vi v10, v8, 5
288
280
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
281
+
; VLOPT-NEXT: vxor.vi v10, v8, 5
289
282
; VLOPT-NEXT: vadd.vv v8, v10, v8
290
283
; VLOPT-NEXT: ret
291
284
%1 = call <vscale x 4 x i32> @llvm.riscv.vxor.nxv4i32.i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i325, iXLen -1)
@@ -304,9 +297,8 @@ define <vscale x 4 x i32> @vxor_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b,
304
297
;
305
298
; VLOPT-LABEL: vxor_vv:
306
299
; VLOPT: # %bb.0:
307
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
308
-
; VLOPT-NEXT: vxor.vv v8, v8, v10
309
300
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
301
+
; VLOPT-NEXT: vxor.vv v8, v8, v10
310
302
; VLOPT-NEXT: vadd.vv v8, v8, v10
311
303
; VLOPT-NEXT: ret
312
304
%1 = call <vscale x 4 x i32> @llvm.riscv.vxor.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -325,9 +317,8 @@ define <vscale x 4 x i32> @vxor_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
325
317
;
326
318
; VLOPT-LABEL: vxor_vx:
327
319
; VLOPT: # %bb.0:
328
-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
329
-
; VLOPT-NEXT: vxor.vx v10, v8, a0
330
320
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
321
+
; VLOPT-NEXT: vxor.vx v10, v8, a0
331
322
; VLOPT-NEXT: vadd.vv v8, v10, v8
332
323
; VLOPT-NEXT: ret
333
324
%1 = call <vscale x 4 x i32> @llvm.riscv.vxor.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32%b, iXLen -1)
@@ -366,9 +357,8 @@ define <vscale x 4 x i32> @vsll_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b,
366
357
;
367
358
; VLOPT-LABEL: vsll_vv:
368
359
; VLOPT: # %bb.0:
369
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
370
-
; VLOPT-NEXT: vsll.vv v8, v8, v10
371
360
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
361
+
; VLOPT-NEXT: vsll.vv v8, v8, v10
372
362
; VLOPT-NEXT: vadd.vv v8, v8, v10
373
363
; VLOPT-NEXT: ret
374
364
%1 = call <vscale x 4 x i32> @llvm.riscv.vsll.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -387,9 +377,8 @@ define <vscale x 4 x i32> @vsll_vx(<vscale x 4 x i32> %a, iXLen %b, iXLen %vl) {
387
377
;
388
378
; VLOPT-LABEL: vsll_vx:
389
379
; VLOPT: # %bb.0:
390
-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
391
-
; VLOPT-NEXT: vsll.vx v10, v8, a0
392
380
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
381
+
; VLOPT-NEXT: vsll.vx v10, v8, a0
393
382
; VLOPT-NEXT: vadd.vv v8, v10, v8
394
383
; VLOPT-NEXT: ret
395
384
%1 = call <vscale x 4 x i32> @llvm.riscv.vsll.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen %b, iXLen -1)
@@ -429,9 +418,8 @@ define <vscale x 4 x i32> @vsrl_vi(<vscale x 4 x i32> %a, iXLen %vl) {
429
418
;
430
419
; VLOPT-LABEL: vsrl_vi:
431
420
; VLOPT: # %bb.0:
432
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
433
-
; VLOPT-NEXT: vsrl.vi v10, v8, 5
434
421
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
422
+
; VLOPT-NEXT: vsrl.vi v10, v8, 5
435
423
; VLOPT-NEXT: vadd.vv v8, v10, v8
436
424
; VLOPT-NEXT: ret
437
425
%1 = call <vscale x 4 x i32> @llvm.riscv.vsrl.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen 5, iXLen -1)
@@ -450,9 +438,8 @@ define <vscale x 4 x i32> @vsrl_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b,
450
438
;
451
439
; VLOPT-LABEL: vsrl_vv:
452
440
; VLOPT: # %bb.0:
453
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
454
-
; VLOPT-NEXT: vsrl.vv v8, v8, v10
455
441
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
442
+
; VLOPT-NEXT: vsrl.vv v8, v8, v10
456
443
; VLOPT-NEXT: vadd.vv v8, v8, v10
457
444
; VLOPT-NEXT: ret
458
445
%1 = call <vscale x 4 x i32> @llvm.riscv.vsrl.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -471,9 +458,8 @@ define <vscale x 4 x i32> @vsrl_vx(<vscale x 4 x i32> %a, iXLen %b, iXLen %vl) {
471
458
;
472
459
; VLOPT-LABEL: vsrl_vx:
473
460
; VLOPT: # %bb.0:
474
-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
475
-
; VLOPT-NEXT: vsrl.vx v10, v8, a0
476
461
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
462
+
; VLOPT-NEXT: vsrl.vx v10, v8, a0
477
463
; VLOPT-NEXT: vadd.vv v8, v10, v8
478
464
; VLOPT-NEXT: ret
479
465
%1 = call <vscale x 4 x i32> @llvm.riscv.vsrl.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen %b, iXLen -1)
@@ -492,9 +478,8 @@ define <vscale x 4 x i32> @vsra_vi(<vscale x 4 x i32> %a, iXLen %vl) {
492
478
;
493
479
; VLOPT-LABEL: vsra_vi:
494
480
; VLOPT: # %bb.0:
495
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
496
-
; VLOPT-NEXT: vsra.vi v10, v8, 5
497
481
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
482
+
; VLOPT-NEXT: vsra.vi v10, v8, 5
498
483
; VLOPT-NEXT: vadd.vv v8, v10, v8
499
484
; VLOPT-NEXT: ret
500
485
%1 = call <vscale x 4 x i32> @llvm.riscv.vsra.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen 5, iXLen -1)
@@ -513,9 +498,8 @@ define <vscale x 4 x i32> @vsra_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b,
513
498
;
514
499
; VLOPT-LABEL: vsra_vv:
515
500
; VLOPT: # %bb.0:
516
-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
517
-
; VLOPT-NEXT: vsra.vv v8, v8, v10
518
501
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
502
+
; VLOPT-NEXT: vsra.vv v8, v8, v10
519
503
; VLOPT-NEXT: vadd.vv v8, v8, v10
520
504
; VLOPT-NEXT: ret
521
505
%1 = call <vscale x 4 x i32> @llvm.riscv.vsra.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -534,9 +518,8 @@ define <vscale x 4 x i32> @vsra_vx(<vscale x 4 x i32> %a, iXLen %b, iXLen %vl) {
534
518
;
535
519
; VLOPT-LABEL: vsra_vx:
536
520
; VLOPT: # %bb.0:
537
-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
538
-
; VLOPT-NEXT: vsra.vx v10, v8, a0
539
521
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
522
+
; VLOPT-NEXT: vsra.vx v10, v8, a0
540
523
; VLOPT-NEXT: vadd.vv v8, v10, v8
541
524
; VLOPT-NEXT: ret
542
525
%1 = call <vscale x 4 x i32> @llvm.riscv.vsra.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen %b, iXLen -1)
@@ -1948,28 +1931,6 @@ define <vscale x 4 x i32> @vmv_v_i(<vscale x 4 x i32> %a, i32 %x, iXLen %vl) {
1948
1931
ret <vscale x 4 x i32> %2
1949
1932
}
1950
1933
1951
-
; The vmv.v.v is optimized away if we use a vadd as the user.
1952
-
define <vscale x 1 x i8> @vmv_v_v(<vscale x 1 x i8> %a, i8%b, <vscale x 1 x i8> %c, <vscale x 1 x i1> %m, iXLen %vl) {
1953
-
; NOVLOPT-LABEL: vmerge_vvm:
1954
-
; NOVLOPT: # %bb.0:
1955
-
; NOVLOPT-NEXT: vsetvli a2, zero, e8, mf8, tu, ma
1956
-
; NOVLOPT-NEXT: vmv.v.x v8, a0
1957
-
; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
1958
-
; NOVLOPT-NEXT: vmerge.vvm v8, v8, v9, v0
1959
-
; NOVLOPT-NEXT: ret
1960
-
;
1961
-
; VLOPT-LABEL: vmerge_vvm:
1962
-
; VLOPT: # %bb.0:
1963
-
; VLOPT-NEXT: vsetvli zero, a1, e8, mf8, tu, ma
1964
-
; VLOPT-NEXT: vmv.v.x v8, a0
1965
-
; VLOPT-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
1966
-
; VLOPT-NEXT: vmerge.vvm v8, v8, v9, v0
1967
-
; VLOPT-NEXT: ret
1968
-
%2 = call <vscale x 1 x i8> @llvm.riscv.vmv.v.x.nxv1i8(<vscale x 1 x i8> %a, i8%b, iXLen -1)
1969
-
%3 = call <vscale x 1 x i8> @llvm.riscv.vmerge.nxv1i8.nxv1i8(<vscale x 1 x i8> undef, <vscale x 1 x i8> %2, <vscale x 1 x i8> %c, <vscale x 1 x i1> %m, iXLen %vl)
1970
-
ret <vscale x 1 x i8> %3
1971
-
}
1972
-
1973
1934
define <vscale x 4 x i32> @vmv_v_x(<vscale x 4 x i32> %a, i32%x, iXLen %vl) {
1974
1935
; NOVLOPT-LABEL: vmv_v_x:
1975
1936
; NOVLOPT: # %bb.0:
@@ -1990,6 +1951,28 @@ define <vscale x 4 x i32> @vmv_v_x(<vscale x 4 x i32> %a, i32 %x, iXLen %vl) {
1990
1951
ret <vscale x 4 x i32> %2
1991
1952
}
1992
1953
1954
+
; The vmv.v.v is optimized away if we use a vadd as the user.
1955
+
define <vscale x 1 x i8> @vmv_v_v(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i8> %c, <vscale x 1 x i1> %m, iXLen %vl) {
1956
+
; NOVLOPT-LABEL: vmv_v_v:
1957
+
; NOVLOPT: # %bb.0:
1958
+
; NOVLOPT-NEXT: vsetvli a1, zero, e8, mf8, tu, ma
1959
+
; NOVLOPT-NEXT: vmv.v.v v8, v9
1960
+
; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
1961
+
; NOVLOPT-NEXT: vmerge.vvm v8, v8, v10, v0
1962
+
; NOVLOPT-NEXT: ret
1963
+
;
1964
+
; VLOPT-LABEL: vmv_v_v:
1965
+
; VLOPT: # %bb.0:
1966
+
; VLOPT-NEXT: vsetvli zero, a0, e8, mf8, tu, ma
1967
+
; VLOPT-NEXT: vmv.v.v v8, v9
1968
+
; VLOPT-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
1969
+
; VLOPT-NEXT: vmerge.vvm v8, v8, v10, v0
1970
+
; VLOPT-NEXT: ret
1971
+
%2 = call <vscale x 1 x i8> @llvm.riscv.vmv.v.v.nxv1i8.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, iXLen -1)
1972
+
%3 = call <vscale x 1 x i8> @llvm.riscv.vmerge.nxv1i8.nxv1i8(<vscale x 1 x i8> undef, <vscale x 1 x i8> %2, <vscale x 1 x i8> %c, <vscale x 1 x i1> %m, iXLen %vl)
1973
+
ret <vscale x 1 x i8> %3
1974
+
}
1975
+
1993
1976
define <vscale x 4 x i32> @vwsll_vi(<vscale x 4 x i16> %a, <vscale x 4 x i32> %b, iXLen %vl) {
0 commit comments