Skip to content

Commit 7f6441f

Browse files
committed
[TableGen][RISCV] Relax a restriction in generating patterns for commutable SDNodes.
Previously, all children would be checked to see if any were an explicit Register. If anywhere no commutable patterns would be generated. This patch loosens the restriction to only check the children that are being commuted. Digging back through history, this code predates the existence of commutable intrinsics and commutable SDNodes with more than 2 operands. At that time the loop would count the number of children that weren't registers and if that was equal to 2 it would allow commuting. I don't think this loop was re-considered when commutable intrinsics were added or when we allowed SDNodes with more than 2 operands. This important for RISCV were our isel patterns have a V0 mask operand after the commutable operands on some RISCVISD opcodes. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D117955
1 parent 42f87a0 commit 7f6441f

12 files changed

+28
-56
lines changed

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vadd-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,8 @@ define <4 x i8> @vadd_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl
131131
define <4 x i8> @vadd_vx_v4i8_commute(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
132132
; CHECK-LABEL: vadd_vx_v4i8_commute:
133133
; CHECK: # %bb.0:
134-
; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu
135-
; CHECK-NEXT: vmv.v.x v9, a0
136134
; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu
137-
; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
135+
; CHECK-NEXT: vadd.vx v8, v8, a0, v0.t
138136
; CHECK-NEXT: ret
139137
%elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
140138
%vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vand-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,8 @@ define <2 x i8> @vand_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl
5555
define <2 x i8> @vand_vx_v2i8_commute(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
5656
; CHECK-LABEL: vand_vx_v2i8_commute:
5757
; CHECK: # %bb.0:
58-
; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, mu
59-
; CHECK-NEXT: vmv.v.x v9, a0
6058
; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu
61-
; CHECK-NEXT: vand.vv v8, v9, v8, v0.t
59+
; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
6260
; CHECK-NEXT: ret
6361
%elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
6462
%vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfadd-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,8 @@ define <2 x float> @vfadd_vf_v2f32(<2 x float> %va, float %b, <2 x i1> %m, i32 z
255255
define <2 x float> @vfadd_vf_v2f32_commute(<2 x float> %va, float %b, <2 x i1> %m, i32 zeroext %evl) {
256256
; CHECK-LABEL: vfadd_vf_v2f32_commute:
257257
; CHECK: # %bb.0:
258-
; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, mu
259-
; CHECK-NEXT: vfmv.v.f v9, fa0
260258
; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu
261-
; CHECK-NEXT: vfadd.vv v8, v9, v8, v0.t
259+
; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t
262260
; CHECK-NEXT: ret
263261
%elt.head = insertelement <2 x float> poison, float %b, i32 0
264262
%vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmul-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -355,10 +355,8 @@ define <8 x i16> @vmul_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext
355355
define <8 x i16> @vmul_vx_v8i16_commute(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
356356
; CHECK-LABEL: vmul_vx_v8i16_commute:
357357
; CHECK: # %bb.0:
358-
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, mu
359-
; CHECK-NEXT: vmv.v.x v9, a0
360358
; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu
361-
; CHECK-NEXT: vmul.vv v8, v9, v8, v0.t
359+
; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
362360
; CHECK-NEXT: ret
363361
%elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
364362
%vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vor-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,8 @@ define <4 x i8> @vor_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl)
131131
define <4 x i8> @vor_vx_v4i8_commute(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
132132
; CHECK-LABEL: vor_vx_v4i8_commute:
133133
; CHECK: # %bb.0:
134-
; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu
135-
; CHECK-NEXT: vmv.v.x v9, a0
136134
; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu
137-
; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
135+
; CHECK-NEXT: vor.vx v8, v8, a0, v0.t
138136
; CHECK-NEXT: ret
139137
%elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
140138
%vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vxor-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,8 @@ define <2 x i8> @vxor_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl
5555
define <2 x i8> @vxor_vx_v2i8_commute(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
5656
; CHECK-LABEL: vxor_vx_v2i8_commute:
5757
; CHECK: # %bb.0:
58-
; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, mu
59-
; CHECK-NEXT: vmv.v.x v9, a0
6058
; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu
61-
; CHECK-NEXT: vxor.vv v8, v9, v8, v0.t
59+
; CHECK-NEXT: vxor.vx v8, v8, a0, v0.t
6260
; CHECK-NEXT: ret
6361
%elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
6462
%vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/vadd-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,8 @@ define <vscale x 1 x i8> @vadd_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x
5757
define <vscale x 1 x i8> @vadd_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
5858
; CHECK-LABEL: vadd_vx_nxv1i8_commute:
5959
; CHECK: # %bb.0:
60-
; CHECK-NEXT: vsetvli a2, zero, e8, mf8, ta, mu
61-
; CHECK-NEXT: vmv.v.x v9, a0
6260
; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu
63-
; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
61+
; CHECK-NEXT: vadd.vx v8, v8, a0, v0.t
6462
; CHECK-NEXT: ret
6563
%elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
6664
%vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/vand-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,10 +1045,8 @@ define <vscale x 32 x i16> @vand_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <v
10451045
define <vscale x 32 x i16> @vand_vx_nxv32i16_commute(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
10461046
; CHECK-LABEL: vand_vx_nxv32i16_commute:
10471047
; CHECK: # %bb.0:
1048-
; CHECK-NEXT: vsetvli a2, zero, e16, m8, ta, mu
1049-
; CHECK-NEXT: vmv.v.x v16, a0
10501048
; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu
1051-
; CHECK-NEXT: vand.vv v8, v16, v8, v0.t
1049+
; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
10521050
; CHECK-NEXT: ret
10531051
%elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
10541052
%vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/vmul-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -957,10 +957,8 @@ define <vscale x 16 x i32> @vmul_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <v
957957
define <vscale x 16 x i32> @vmul_vx_nxv16i32_commute(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
958958
; CHECK-LABEL: vmul_vx_nxv16i32_commute:
959959
; CHECK: # %bb.0:
960-
; CHECK-NEXT: vsetvli a2, zero, e32, m8, ta, mu
961-
; CHECK-NEXT: vmv.v.x v16, a0
962960
; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu
963-
; CHECK-NEXT: vmul.vv v8, v16, v8, v0.t
961+
; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
964962
; CHECK-NEXT: ret
965963
%elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
966964
%vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer

llvm/test/CodeGen/RISCV/rvv/vor-vp.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,10 +1121,8 @@ define <vscale x 2 x i32> @vor_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscal
11211121
define <vscale x 2 x i32> @vor_vx_nxv2i32_commute(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
11221122
; CHECK-LABEL: vor_vx_nxv2i32_commute:
11231123
; CHECK: # %bb.0:
1124-
; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, mu
1125-
; CHECK-NEXT: vmv.v.x v9, a0
11261124
; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu
1127-
; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
1125+
; CHECK-NEXT: vor.vx v8, v8, a0, v0.t
11281126
; CHECK-NEXT: ret
11291127
%elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
11301128
%vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer

0 commit comments

Comments
 (0)