Skip to content

Commit 0e24327

Browse files
fixup! respond to review
1 parent 1c90218 commit 0e24327

File tree

2 files changed

+60
-61
lines changed

2 files changed

+60
-61
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,26 @@ static bool isSupportedInstr(const MachineInstr &MI) {
499499
case RISCV::VSUB_VX:
500500
case RISCV::VRSUB_VI:
501501
case RISCV::VRSUB_VX:
502+
// Vector Bitwise Logical Instructions
503+
// Vector Single-Width Shift Instructions
504+
case RISCV::VAND_VI:
505+
case RISCV::VAND_VV:
506+
case RISCV::VAND_VX:
507+
case RISCV::VOR_VI:
508+
case RISCV::VOR_VV:
509+
case RISCV::VOR_VX:
510+
case RISCV::VXOR_VI:
511+
case RISCV::VXOR_VV:
512+
case RISCV::VXOR_VX:
513+
case RISCV::VSLL_VI:
514+
case RISCV::VSLL_VV:
515+
case RISCV::VSLL_VX:
516+
case RISCV::VSRL_VI:
517+
case RISCV::VSRL_VV:
518+
case RISCV::VSRL_VX:
519+
case RISCV::VSRA_VI:
520+
case RISCV::VSRA_VV:
521+
case RISCV::VSRA_VX:
502522
// Vector Widening Integer Add/Subtract
503523
case RISCV::VWADDU_VV:
504524
case RISCV::VWADDU_VX:
@@ -525,11 +545,6 @@ static bool isSupportedInstr(const MachineInstr &MI) {
525545
case RISCV::VSEXT_VF8:
526546
// Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
527547
// FIXME: Add support
528-
// Vector Bitwise Logical Instructions
529-
// FIXME: Add support
530-
// Vector Single-Width Shift Instructions
531-
// FIXME: Add support
532-
case RISCV::VSLL_VI:
533548
// Vector Narrowing Integer Right Shift Instructions
534549
// FIXME: Add support
535550
case RISCV::VNSRL_WI:
@@ -592,6 +607,7 @@ static bool isSupportedInstr(const MachineInstr &MI) {
592607
// FIXME: Add support
593608
case RISCV::VMV_V_I:
594609
case RISCV::VMV_V_X:
610+
case RISCV::VMV_V_V:
595611

596612
// Vector Crypto
597613
case RISCV::VWSLL_VI:

llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll

Lines changed: 39 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,8 @@ define <vscale x 4 x i32> @vand_vi(<vscale x 4 x i32> %a, iXLen %vl) {
157157
;
158158
; VLOPT-LABEL: vand_vi:
159159
; VLOPT: # %bb.0:
160-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
161-
; VLOPT-NEXT: vand.vi v10, v8, 5
162160
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
161+
; VLOPT-NEXT: vand.vi v10, v8, 5
163162
; VLOPT-NEXT: vadd.vv v8, v10, v8
164163
; VLOPT-NEXT: ret
165164
%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 5, 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,
178177
;
179178
; VLOPT-LABEL: vand_vv:
180179
; VLOPT: # %bb.0:
181-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
182-
; VLOPT-NEXT: vand.vv v8, v8, v10
183180
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
181+
; VLOPT-NEXT: vand.vv v8, v8, v10
184182
; VLOPT-NEXT: vadd.vv v8, v8, v10
185183
; VLOPT-NEXT: ret
186184
%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) {
199197
;
200198
; VLOPT-LABEL: vand_vx:
201199
; VLOPT: # %bb.0:
202-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
203-
; VLOPT-NEXT: vand.vx v10, v8, a0
204200
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
201+
; VLOPT-NEXT: vand.vx v10, v8, a0
205202
; VLOPT-NEXT: vadd.vv v8, v10, v8
206203
; VLOPT-NEXT: ret
207204
%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) {
220217
;
221218
; VLOPT-LABEL: vor_vi:
222219
; VLOPT: # %bb.0:
223-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
224-
; VLOPT-NEXT: vor.vi v10, v8, 5
225220
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
221+
; VLOPT-NEXT: vor.vi v10, v8, 5
226222
; VLOPT-NEXT: vadd.vv v8, v10, v8
227223
; VLOPT-NEXT: ret
228224
%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 5, 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,
241237
;
242238
; VLOPT-LABEL: vor_vv:
243239
; VLOPT: # %bb.0:
244-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
245-
; VLOPT-NEXT: vor.vv v8, v8, v10
246240
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
241+
; VLOPT-NEXT: vor.vv v8, v8, v10
247242
; VLOPT-NEXT: vadd.vv v8, v8, v10
248243
; VLOPT-NEXT: ret
249244
%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) {
262257
;
263258
; VLOPT-LABEL: vor_vx:
264259
; VLOPT: # %bb.0:
265-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
266-
; VLOPT-NEXT: vor.vx v10, v8, a0
267260
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
261+
; VLOPT-NEXT: vor.vx v10, v8, a0
268262
; VLOPT-NEXT: vadd.vv v8, v10, v8
269263
; VLOPT-NEXT: ret
270264
%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) {
283277
;
284278
; VLOPT-LABEL: vxor_vi:
285279
; VLOPT: # %bb.0:
286-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
287-
; VLOPT-NEXT: vxor.vi v10, v8, 5
288280
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
281+
; VLOPT-NEXT: vxor.vi v10, v8, 5
289282
; VLOPT-NEXT: vadd.vv v8, v10, v8
290283
; VLOPT-NEXT: ret
291284
%1 = call <vscale x 4 x i32> @llvm.riscv.vxor.nxv4i32.i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 5, 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,
304297
;
305298
; VLOPT-LABEL: vxor_vv:
306299
; VLOPT: # %bb.0:
307-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
308-
; VLOPT-NEXT: vxor.vv v8, v8, v10
309300
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
301+
; VLOPT-NEXT: vxor.vv v8, v8, v10
310302
; VLOPT-NEXT: vadd.vv v8, v8, v10
311303
; VLOPT-NEXT: ret
312304
%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) {
325317
;
326318
; VLOPT-LABEL: vxor_vx:
327319
; VLOPT: # %bb.0:
328-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
329-
; VLOPT-NEXT: vxor.vx v10, v8, a0
330320
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
321+
; VLOPT-NEXT: vxor.vx v10, v8, a0
331322
; VLOPT-NEXT: vadd.vv v8, v10, v8
332323
; VLOPT-NEXT: ret
333324
%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,
366357
;
367358
; VLOPT-LABEL: vsll_vv:
368359
; VLOPT: # %bb.0:
369-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
370-
; VLOPT-NEXT: vsll.vv v8, v8, v10
371360
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
361+
; VLOPT-NEXT: vsll.vv v8, v8, v10
372362
; VLOPT-NEXT: vadd.vv v8, v8, v10
373363
; VLOPT-NEXT: ret
374364
%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) {
387377
;
388378
; VLOPT-LABEL: vsll_vx:
389379
; VLOPT: # %bb.0:
390-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
391-
; VLOPT-NEXT: vsll.vx v10, v8, a0
392380
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
381+
; VLOPT-NEXT: vsll.vx v10, v8, a0
393382
; VLOPT-NEXT: vadd.vv v8, v10, v8
394383
; VLOPT-NEXT: ret
395384
%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) {
429418
;
430419
; VLOPT-LABEL: vsrl_vi:
431420
; VLOPT: # %bb.0:
432-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
433-
; VLOPT-NEXT: vsrl.vi v10, v8, 5
434421
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
422+
; VLOPT-NEXT: vsrl.vi v10, v8, 5
435423
; VLOPT-NEXT: vadd.vv v8, v10, v8
436424
; VLOPT-NEXT: ret
437425
%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,
450438
;
451439
; VLOPT-LABEL: vsrl_vv:
452440
; VLOPT: # %bb.0:
453-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
454-
; VLOPT-NEXT: vsrl.vv v8, v8, v10
455441
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
442+
; VLOPT-NEXT: vsrl.vv v8, v8, v10
456443
; VLOPT-NEXT: vadd.vv v8, v8, v10
457444
; VLOPT-NEXT: ret
458445
%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) {
471458
;
472459
; VLOPT-LABEL: vsrl_vx:
473460
; VLOPT: # %bb.0:
474-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
475-
; VLOPT-NEXT: vsrl.vx v10, v8, a0
476461
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
462+
; VLOPT-NEXT: vsrl.vx v10, v8, a0
477463
; VLOPT-NEXT: vadd.vv v8, v10, v8
478464
; VLOPT-NEXT: ret
479465
%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) {
492478
;
493479
; VLOPT-LABEL: vsra_vi:
494480
; VLOPT: # %bb.0:
495-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
496-
; VLOPT-NEXT: vsra.vi v10, v8, 5
497481
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
482+
; VLOPT-NEXT: vsra.vi v10, v8, 5
498483
; VLOPT-NEXT: vadd.vv v8, v10, v8
499484
; VLOPT-NEXT: ret
500485
%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,
513498
;
514499
; VLOPT-LABEL: vsra_vv:
515500
; VLOPT: # %bb.0:
516-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
517-
; VLOPT-NEXT: vsra.vv v8, v8, v10
518501
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
502+
; VLOPT-NEXT: vsra.vv v8, v8, v10
519503
; VLOPT-NEXT: vadd.vv v8, v8, v10
520504
; VLOPT-NEXT: ret
521505
%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) {
534518
;
535519
; VLOPT-LABEL: vsra_vx:
536520
; VLOPT: # %bb.0:
537-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
538-
; VLOPT-NEXT: vsra.vx v10, v8, a0
539521
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
522+
; VLOPT-NEXT: vsra.vx v10, v8, a0
540523
; VLOPT-NEXT: vadd.vv v8, v10, v8
541524
; VLOPT-NEXT: ret
542525
%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) {
19481931
ret <vscale x 4 x i32> %2
19491932
}
19501933

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-
19731934
define <vscale x 4 x i32> @vmv_v_x(<vscale x 4 x i32> %a, i32 %x, iXLen %vl) {
19741935
; NOVLOPT-LABEL: vmv_v_x:
19751936
; 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) {
19901951
ret <vscale x 4 x i32> %2
19911952
}
19921953

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+
19931976
define <vscale x 4 x i32> @vwsll_vi(<vscale x 4 x i16> %a, <vscale x 4 x i32> %b, iXLen %vl) {
19941977
; NOVLOPT-LABEL: vwsll_vi:
19951978
; NOVLOPT: # %bb.0:

0 commit comments

Comments
 (0)