Skip to content

Commit b71d88c

Browse files
committed
[RISCV] Constrain passthru regclass in vmerge -> vmv peephole
In llvm#107827 we now set true's passthru to the false operand if it was undef. We need to remember to also constrain the regclass in case true is a masked pseudo which needs its passthrus to be in VR[M*]NoV0
1 parent 9b67c99 commit b71d88c

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,10 @@ bool RISCVVectorPeephole::convertSameMaskVMergeToVMv(MachineInstr &MI) {
421421
!ensureDominates(MI.getOperand(2), *True))
422422
return false;
423423
True->getOperand(1).setReg(MI.getOperand(2).getReg());
424+
// If True is masked then its passthru needs to be in VRNoV0.
425+
MRI->constrainRegClass(True->getOperand(1).getReg(),
426+
TII->getRegClass(True->getDesc(), 1, TRI,
427+
*True->getParent()->getParent()));
424428
}
425429

426430
MI.setDesc(TII->get(NewOpc));

llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-to-vmv.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ body: |
152152
; CHECK-NEXT: $v0 = COPY %mask
153153
; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, $v0, 4, 5 /* e32 */, 1 /* ta, mu */
154154
; CHECK-NEXT: $v0 = COPY %mask
155-
%false:vrnov0 = COPY $v8
155+
%false:vr = COPY $v8
156156
%mask:vr = COPY $v0
157157
$v0 = COPY %mask
158158
%true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */

0 commit comments

Comments
 (0)