Skip to content

Commit 921cedd

Browse files
committed
!fixup Use constrainRegClass
1 parent 2bd6fc4 commit 921cedd

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
MRI->clearKillFlags(MI.getOperand(2).getReg());
593590
MI.eraseFromParent();
@@ -613,11 +610,6 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
613610
if (!MRI->hasOneUse(MI.getOperand(2).getReg()))
614611
return false;
615612

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

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

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,9 @@ body: |
112112
; CHECK-LABEL: name: diff_regclass
113113
; CHECK: liveins: $v8
114114
; CHECK-NEXT: {{ $}}
115-
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
116-
; CHECK-NEXT: [[PseudoVMV_V_V_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_V_MF2 $noreg, [[PseudoVMV_V_I_MF2_]], 0, 5 /* e32 */, 0 /* tu, mu */
115+
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
117116
; CHECK-NEXT: [[COPY:%[0-9]+]]:vmv0 = COPY $v8
118-
; 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 */
117+
; 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 */
119118
%0:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
120119
%1:vrnov0 = PseudoVMV_V_V_MF2 $noreg, %0, 0, 5 /* e32 */, 0 /* tu, mu */
121120
%4:vmv0 = COPY $v8
@@ -130,11 +129,10 @@ body: |
130129
; CHECK: liveins: $v8
131130
; CHECK-NEXT: {{ $}}
132131
; CHECK-NEXT: [[COPY:%[0-9]+]]:vr = COPY $v8
133-
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vr = PseudoVMV_V_I_MF2 $noreg, 0, 0, 5 /* e32 */, 0 /* tu, mu */
134-
; 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 */
132+
; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_I_MF2 [[COPY]], 0, 0, 5 /* e32 */, 0 /* tu, mu */
135133
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x0
136134
; CHECK-NEXT: [[COPY2:%[0-9]+]]:vmv0 = COPY $v8
137-
; 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)
135+
; 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)
138136
%0:vr = COPY $v8
139137
%2:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
140138
%3:vrnov0 = PseudoVMV_V_V_MF2 %0, killed %2, 0, 5 /* e32 */, 0 /* tu, mu */

0 commit comments

Comments
 (0)