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
DAGCombiner (or InstCombine) will convert an add to an or if the bits
are disjoint, which can prevent what was originally an (add {s,z}ext,
{s,z}ext) from being selected as a vwadd.
This teaches combineBinOp_VLToVWBinOp_VL to recover it by treating it as
an add.
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/vwadd-sdnode.ll
+7-11Lines changed: 7 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -1401,11 +1401,9 @@ define <vscale x 2 x i32> @vwaddu_vv_disjoint_or_add(<vscale x 2 x i8> %x.i8, <v
1401
1401
; CHECK: # %bb.0:
1402
1402
; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1403
1403
; CHECK-NEXT: vzext.vf2 v10, v8
1404
-
; CHECK-NEXT: vsll.vi v8, v10, 8
1405
-
; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1406
-
; CHECK-NEXT: vzext.vf2 v10, v8
1407
-
; CHECK-NEXT: vzext.vf4 v8, v9
1408
-
; CHECK-NEXT: vor.vv v8, v10, v8
1404
+
; CHECK-NEXT: vsll.vi v10, v10, 8
1405
+
; CHECK-NEXT: vzext.vf2 v11, v9
1406
+
; CHECK-NEXT: vwaddu.vv v8, v10, v11
1409
1407
; CHECK-NEXT: ret
1410
1408
%x.i16 = zext <vscale x 2 x i8> %x.i8to <vscale x 2 x i16>
1411
1409
%x.shl = shl <vscale x 2 x i16> %x.i16, shufflevector(<vscale x 2 x i16> insertelement(<vscale x 2 x i16> poison, i168, i320), <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer)
@@ -1450,9 +1448,8 @@ define <vscale x 2 x i32> @vwadd_vv_disjoint_or(<vscale x 2 x i16> %x.i16, <vsca
1450
1448
define <vscale x 2 x i32> @vwaddu_wv_disjoint_or(<vscale x 2 x i32> %x.i32, <vscale x 2 x i16> %y.i16) {
1451
1449
; CHECK-LABEL: vwaddu_wv_disjoint_or:
1452
1450
; CHECK: # %bb.0:
1453
-
; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1454
-
; CHECK-NEXT: vzext.vf2 v10, v9
1455
-
; CHECK-NEXT: vor.vv v8, v8, v10
1451
+
; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1452
+
; CHECK-NEXT: vwaddu.wv v8, v8, v9
1456
1453
; CHECK-NEXT: ret
1457
1454
%y.i32 = zext <vscale x 2 x i16> %y.i16to <vscale x 2 x i32>
1458
1455
%or = or disjoint <vscale x 2 x i32> %x.i32, %y.i32
@@ -1462,9 +1459,8 @@ define <vscale x 2 x i32> @vwaddu_wv_disjoint_or(<vscale x 2 x i32> %x.i32, <vsc
1462
1459
define <vscale x 2 x i32> @vwadd_wv_disjoint_or(<vscale x 2 x i32> %x.i32, <vscale x 2 x i16> %y.i16) {
1463
1460
; CHECK-LABEL: vwadd_wv_disjoint_or:
1464
1461
; CHECK: # %bb.0:
1465
-
; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1466
-
; CHECK-NEXT: vsext.vf2 v10, v9
1467
-
; CHECK-NEXT: vor.vv v8, v8, v10
1462
+
; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1463
+
; CHECK-NEXT: vwadd.wv v8, v8, v9
1468
1464
; CHECK-NEXT: ret
1469
1465
%y.i32 = sext <vscale x 2 x i16> %y.i16to <vscale x 2 x i32>
1470
1466
%or = or disjoint <vscale x 2 x i32> %x.i32, %y.i32
0 commit comments