Skip to content

Commit 3f69d90

Browse files
authored
[RISCV] Add missing RISCVMaskedPseudo for TIED pseudos (#86787)
This was preventing us from folding away the vmerge into its mask.
1 parent 56b3222 commit 3f69d90

File tree

2 files changed

+8
-12
lines changed

2 files changed

+8
-12
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2212,7 +2212,8 @@ multiclass VPseudoTiedBinary<VReg RetClass,
22122212
def "_" # MInfo.MX # "_TIED": VPseudoTiedBinaryNoMask<RetClass, Op2Class,
22132213
Constraint, TargetConstraintType>;
22142214
def "_" # MInfo.MX # "_MASK_TIED" : VPseudoTiedBinaryMask<RetClass, Op2Class,
2215-
Constraint, TargetConstraintType>;
2215+
Constraint, TargetConstraintType>,
2216+
RISCVMaskedPseudo<MaskIdx=2>;
22162217
}
22172218
}
22182219

@@ -2225,7 +2226,8 @@ multiclass VPseudoTiedBinaryRoundingMode<VReg RetClass,
22252226
def "_" # MInfo.MX # "_TIED":
22262227
VPseudoTiedBinaryNoMaskRoundingMode<RetClass, Op2Class, Constraint, TargetConstraintType>;
22272228
def "_" # MInfo.MX # "_MASK_TIED" :
2228-
VPseudoTiedBinaryMaskRoundingMode<RetClass, Op2Class, Constraint, TargetConstraintType>;
2229+
VPseudoTiedBinaryMaskRoundingMode<RetClass, Op2Class, Constraint, TargetConstraintType>,
2230+
RISCVMaskedPseudo<MaskIdx=2>;
22292231
}
22302232
}
22312233

llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,11 +1192,8 @@ define <vscale x 2 x i32> @vmerge_larger_vl_false_becomes_tail(<vscale x 2 x i32
11921192
define <vscale x 2 x i64> @vpmerge_vwsub.w_tied(<vscale x 2 x i64> %passthru, <vscale x 2 x i64> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %mask, i32 zeroext %vl) {
11931193
; CHECK-LABEL: vpmerge_vwsub.w_tied:
11941194
; CHECK: # %bb.0:
1195-
; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma
1196-
; CHECK-NEXT: vmv2r.v v10, v8
1197-
; CHECK-NEXT: vwsub.wv v10, v10, v12
1198-
; CHECK-NEXT: vsetvli zero, zero, e64, m2, tu, ma
1199-
; CHECK-NEXT: vmerge.vvm v8, v8, v10, v0
1195+
; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu
1196+
; CHECK-NEXT: vwsub.wv v8, v8, v12, v0.t
12001197
; CHECK-NEXT: ret
12011198
%vl.zext = zext i32 %vl to i64
12021199
%a = call <vscale x 2 x i64> @llvm.riscv.vwsub.w.nxv2i64.nxv2i32(<vscale x 2 x i64> %passthru, <vscale x 2 x i64> %passthru, <vscale x 2 x i32> %y, i64 %vl.zext)
@@ -1207,12 +1204,9 @@ define <vscale x 2 x i64> @vpmerge_vwsub.w_tied(<vscale x 2 x i64> %passthru, <v
12071204
define <vscale x 2 x double> @vpmerge_vfwsub.w_tied(<vscale x 2 x double> %passthru, <vscale x 2 x double> %x, <vscale x 2 x float> %y, <vscale x 2 x i1> %mask, i32 zeroext %vl) {
12081205
; CHECK-LABEL: vpmerge_vfwsub.w_tied:
12091206
; CHECK: # %bb.0:
1210-
; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma
1207+
; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu
12111208
; CHECK-NEXT: fsrmi a0, 1
1212-
; CHECK-NEXT: vmv2r.v v10, v8
1213-
; CHECK-NEXT: vfwsub.wv v10, v10, v12
1214-
; CHECK-NEXT: vsetvli zero, zero, e64, m2, tu, ma
1215-
; CHECK-NEXT: vmerge.vvm v8, v8, v10, v0
1209+
; CHECK-NEXT: vfwsub.wv v8, v8, v12, v0.t
12161210
; CHECK-NEXT: fsrm a0
12171211
; CHECK-NEXT: ret
12181212
%vl.zext = zext i32 %vl to i64

0 commit comments

Comments
 (0)