Skip to content

Commit e2f3773

Browse files
committed
!fixup Use constrainRegClass
1 parent d7173d9 commit e2f3773

File tree

2 files changed

+8
-16
lines changed

2 files changed

+8
-16
lines changed

llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -565,11 +565,6 @@ bool RISCVVectorPeephole::foldUndefPassthruVMV_V_V(MachineInstr &MI) {
565565
if (MI.getOperand(1).getReg() != RISCV::NoRegister)
566566
return false;
567567

568-
const TargetRegisterClass *RC1 = MRI->getRegClass(MI.getOperand(0).getReg());
569-
const TargetRegisterClass *RC2 = MRI->getRegClass(MI.getOperand(2).getReg());
570-
if (!RC1->hasSubClassEq(RC2))
571-
return false;
572-
573568
// If the input was a pseudo with a policy operand, we can give it a tail
574569
// agnostic policy if MI's undef tail subsumes the input's.
575570
MachineInstr *Src = MRI->getVRegDef(MI.getOperand(2).getReg());
@@ -588,6 +583,8 @@ bool RISCVVectorPeephole::foldUndefPassthruVMV_V_V(MachineInstr &MI) {
588583
SrcPolicy.setImm(SrcPolicy.getImm() | RISCVVType::TAIL_AGNOSTIC);
589584
}
590585

586+
MRI->constrainRegClass(MI.getOperand(2).getReg(),
587+
MRI->getRegClass(MI.getOperand(0).getReg()));
591588
MRI->replaceRegWith(MI.getOperand(0).getReg(), MI.getOperand(2).getReg());
592589
MI.eraseFromParent();
593590
return true;
@@ -612,11 +609,6 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
612609
if (!MRI->hasOneUse(MI.getOperand(2).getReg()))
613610
return false;
614611

615-
const TargetRegisterClass *RC1 = MRI->getRegClass(MI.getOperand(0).getReg());
616-
const TargetRegisterClass *RC2 = MRI->getRegClass(MI.getOperand(2).getReg());
617-
if (!RC1->hasSubClassEq(RC2))
618-
return false;
619-
620612
MachineInstr *Src = MRI->getVRegDef(MI.getOperand(2).getReg());
621613
if (!Src || Src->hasUnmodeledSideEffects() ||
622614
Src->getParent() != MI.getParent() || Src->getNumDefs() != 1 ||
@@ -662,6 +654,8 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
662654
Policy |= RISCVVType::TAIL_AGNOSTIC;
663655
Src->getOperand(RISCVII::getVecPolicyOpNum(Src->getDesc())).setImm(Policy);
664656

657+
MRI->constrainRegClass(Src->getOperand(0).getReg(),
658+
MRI->getRegClass(MI.getOperand(0).getReg()));
665659
MRI->replaceRegWith(MI.getOperand(0).getReg(), Src->getOperand(0).getReg());
666660
MI.eraseFromParent();
667661

llvm/test/CodeGen/RISCV/rvv/vmv.v.v-peephole.mir

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,9 @@ body: |
9898
; CHECK-LABEL: name: diff_regclass
9999
; CHECK: liveins: $v8
100100
; CHECK-NEXT: {{ $}}
101-
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
102-
; CHECK-NEXT: [[PseudoVMV_V_V_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_V_MF2 $noreg, [[PseudoVMV_V_I_MF2_]], 0, 5 /* e32 */, 0 /* tu, mu */
101+
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
103102
; CHECK-NEXT: [[COPY:%[0-9]+]]:vmv0 = COPY $v8
104-
; CHECK-NEXT: [[PseudoVXOR_VV_MF2_MASK:%[0-9]+]]:vrnov0 = PseudoVXOR_VV_MF2_MASK [[PseudoVMV_V_V_MF2_]], [[PseudoVMV_V_I_MF2_]], [[PseudoVMV_V_I_MF2_]], [[COPY]], 0, 5 /* e32 */, 0 /* tu, mu */
103+
; CHECK-NEXT: [[PseudoVXOR_VV_MF2_MASK:%[0-9]+]]:vrnov0 = PseudoVXOR_VV_MF2_MASK [[PseudoVMV_V_I_MF2_]], [[PseudoVMV_V_I_MF2_]], [[PseudoVMV_V_I_MF2_]], [[COPY]], 0, 5 /* e32 */, 0 /* tu, mu */
105104
%0:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
106105
%1:vrnov0 = PseudoVMV_V_V_MF2 $noreg, %0, 0, 5 /* e32 */, 0 /* tu, mu */
107106
%4:vmv0 = COPY $v8
@@ -116,11 +115,10 @@ body: |
116115
; CHECK: liveins: $v8
117116
; CHECK-NEXT: {{ $}}
118117
; CHECK-NEXT: [[COPY:%[0-9]+]]:vr = COPY $v8
119-
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vr = PseudoVMV_V_I_MF2 $noreg, 0, 0, 5 /* e32 */, 0 /* tu, mu */
120-
; CHECK-NEXT: [[PseudoVMV_V_V_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_V_MF2 [[COPY]], killed [[PseudoVMV_V_I_MF2_]], 0, 5 /* e32 */, 0 /* tu, mu */
118+
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_I_MF2 [[COPY]], 0, 0, 5 /* e32 */, 0 /* tu, mu */
121119
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x0
122120
; CHECK-NEXT: [[COPY2:%[0-9]+]]:vmv0 = COPY $v8
123-
; CHECK-NEXT: [[PseudoVLSE32_V_MF2_MASK:%[0-9]+]]:vrnov0 = PseudoVLSE32_V_MF2_MASK [[PseudoVMV_V_V_MF2_]], [[COPY1]], [[COPY1]], killed [[COPY2]], 0, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 4)
121+
; CHECK-NEXT: [[PseudoVLSE32_V_MF2_MASK:%[0-9]+]]:vrnov0 = PseudoVLSE32_V_MF2_MASK [[PseudoVMV_V_I_MF2_]], [[COPY1]], [[COPY1]], killed [[COPY2]], 0, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 4)
124122
%0:vr = COPY $v8
125123
%2:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
126124
%3:vrnov0 = PseudoVMV_V_V_MF2 %0, killed %2, 0, 5 /* e32 */, 0 /* tu, mu */

0 commit comments

Comments
 (0)