[llvm] d15e53c - [RISCV] Check vmerge's true is in same block in vmerge -> vmv.v.v peephole (#110861)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 2 21:02:57 PDT 2024
Author: Luke Lau
Date: 2024-10-03T12:02:54+08:00
New Revision: d15e53c1e4a05f6f4876f25813c57b37d4887a70
URL: https://github.com/llvm/llvm-project/commit/d15e53c1e4a05f6f4876f25813c57b37d4887a70
DIFF: https://github.com/llvm/llvm-project/commit/d15e53c1e4a05f6f4876f25813c57b37d4887a70.diff
LOG: [RISCV] Check vmerge's true is in same block in vmerge -> vmv.v.v peephole (#110861)
The peepholes in RISCVVectorPeephole need to be local and we were
failing to check if the true operand was in the same block as the
vmerge.
Fixes #110832
Added:
Modified:
llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp
llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-to-vmv.mir
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp b/llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp
index 026e5d653c38c2..b883c50beadc09 100644
--- a/llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp
+++ b/llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp
@@ -419,8 +419,8 @@ bool RISCVVectorPeephole::convertSameMaskVMergeToVMv(MachineInstr &MI) {
if (!NewOpc)
return false;
MachineInstr *True = MRI->getVRegDef(MI.getOperand(3).getReg());
- if (!True || !RISCV::getMaskedPseudoInfo(True->getOpcode()) ||
- !hasSameEEW(MI, *True))
+ if (!True || True->getParent() != MI.getParent() ||
+ !RISCV::getMaskedPseudoInfo(True->getOpcode()) || !hasSameEEW(MI, *True))
return false;
const MachineInstr *TrueV0Def = V0Defs.lookup(True);
diff --git a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-to-vmv.mir b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-to-vmv.mir
index e2f1fe4094b5c9..a5622fd466217c 100644
--- a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-to-vmv.mir
+++ b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-to-vmv.mir
@@ -159,3 +159,29 @@ body: |
$v0 = COPY %mask
%x:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, 4, 5 /* e32 */
...
+---
+# Shouldn't be converted because true is in a
diff erent block
+name: same_mask_
diff _blocks
+body: |
+ ; CHECK-LABEL: name: same_mask_
diff _blocks
+ ; CHECK: bb.0:
+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
+ ; CHECK-NEXT: liveins: $v8, $v0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %false:vr = COPY $v8
+ ; CHECK-NEXT: %mask:vr = COPY $v0
+ ; CHECK-NEXT: $v0 = COPY %mask
+ ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1:
+ ; CHECK-NEXT: $v0 = COPY %mask
+ ; CHECK-NEXT: [[PseudoVMERGE_VVM_M1_:%[0-9]+]]:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, 4, 5 /* e32 */
+ bb.0:
+ liveins: $v8, $v0
+ %false:vr = COPY $v8
+ %mask:vr = COPY $v0
+ $v0 = COPY %mask
+ %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */
+ bb.1:
+ $v0 = COPY %mask
+ %5:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, 4, 5 /* e32 */
More information about the llvm-commits
mailing list