Skip to content

Commit 0b238ee

Browse files
committed
[RISCV] Fold vmv.v.v into vleNff.v
We currently already fold vmerge.vvm into vleNff.v via RISCVDAGToDAGISel::performCombineVMergeAndVOps, so this teaches RISCVVectorPeephole::foldVMV_V_V to do the same. Stacked on llvm#143935
1 parent ec16b44 commit 0b238ee

File tree

3 files changed

+6
-8
lines changed

3 files changed

+6
-8
lines changed

llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
611611

612612
MachineInstr *Src = MRI->getVRegDef(MI.getOperand(2).getReg());
613613
if (!Src || Src->hasUnmodeledSideEffects() ||
614-
Src->getParent() != MI.getParent() || Src->getNumDefs() != 1 ||
614+
Src->getParent() != MI.getParent() ||
615615
!RISCVII::isFirstDefTiedToFirstUse(Src->getDesc()) ||
616616
!RISCVII::hasVLOp(Src->getDesc().TSFlags) ||
617617
!RISCVII::hasVecPolicyOp(Src->getDesc().TSFlags))
@@ -622,7 +622,7 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
622622
return false;
623623

624624
// Src needs to have the same passthru as VMV_V_V
625-
MachineOperand &SrcPassthru = Src->getOperand(1);
625+
MachineOperand &SrcPassthru = Src->getOperand(Src->getNumExplicitDefs());
626626
if (SrcPassthru.getReg() != RISCV::NoRegister &&
627627
SrcPassthru.getReg() != Passthru.getReg())
628628
return false;
@@ -643,7 +643,8 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
643643
// If Src is masked then its passthru needs to be in VRNoV0.
644644
if (Passthru.getReg() != RISCV::NoRegister)
645645
MRI->constrainRegClass(Passthru.getReg(),
646-
TII->getRegClass(Src->getDesc(), 1, TRI,
646+
TII->getRegClass(Src->getDesc(),
647+
SrcPassthru.getOperandNo(), TRI,
647648
*Src->getParent()->getParent()));
648649
}
649650

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,9 @@ define <vscale x 1 x i64> @undef_passthru(<vscale x 1 x i64> %passthru, <vscale
212212
define <vscale x 1 x i64> @vleff_move_past_passthru(ptr %p, ptr %q, iXLen %avl) {
213213
; CHECK-LABEL: vleff_move_past_passthru:
214214
; CHECK: # %bb.0:
215-
; CHECK-NEXT: vsetvli zero, a2, e64, m1, ta, ma
216-
; CHECK-NEXT: vle64ff.v v9, (a0)
217215
; CHECK-NEXT: vl1re64.v v8, (a1)
218216
; CHECK-NEXT: vsetvli zero, a2, e64, m1, tu, ma
219-
; CHECK-NEXT: vmv.v.v v8, v9
217+
; CHECK-NEXT: vle64ff.v v8, (a0)
220218
; CHECK-NEXT: ret
221219
%a = call { <vscale x 1 x i64>, iXLen } @llvm.riscv.vleff(<vscale x 1 x i64> poison, ptr %p, iXLen %avl)
222220
%vec = extractvalue { <vscale x 1 x i64>, iXLen } %a, 0

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,9 @@ body: |
144144
; CHECK-LABEL: name: move_vleff
145145
; CHECK: liveins: $v8
146146
; CHECK-NEXT: {{ $}}
147-
; CHECK-NEXT: %x:vr, %vl:gpr = PseudoVLE32FF_V_M1 $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 1)
148147
; CHECK-NEXT: %passthru:vr = COPY $v8
148+
; CHECK-NEXT: %x:vr, %vl:gpr = PseudoVLE32FF_V_M1 %passthru, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 1)
149149
; CHECK-NEXT: %y:gpr = ADDI $x0, 1
150-
; CHECK-NEXT: %z:vr = PseudoVMV_V_V_M1 %passthru, %x, 4, 5 /* e32 */, 0 /* tu, mu */
151150
%x:vr, %vl:gpr = PseudoVLE32FF_V_M1 $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size)
152151
%passthru:vr = COPY $v8
153152
%y:gpr = ADDI $x0, 1

0 commit comments

Comments
 (0)