Skip to content

Commit 46c21bc

Browse files
fixup! fix bug in getEMULEqualsEEWDivSEWTimesLMUL
1 parent 7db13a9 commit 46c21bc

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ getEMULEqualsEEWDivSEWTimesLMUL(unsigned Log2EEW, const MachineInstr &MI) {
159159
auto [MILMUL, MILMULIsFractional] = RISCVVType::decodeVLMUL(MIVLMUL);
160160
unsigned MILog2SEW =
161161
MI.getOperand(RISCVII::getSEWOpNum(MI.getDesc())).getImm();
162+
163+
// Mask instructions will have 0 as the SEW operand. But the LMUL of these
164+
// instructions is calculated is as if the SEW operand was 3 (e8).
165+
if (MILog2SEW == 0)
166+
MILog2SEW = 3;
167+
162168
unsigned MISEW = 1 << MILog2SEW;
163169

164170
unsigned EEW = 1 << Log2EEW;

llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ name: vmop_mm_mask
575575
body: |
576576
bb.0:
577577
; CHECK-LABEL: name: vmop_mm_mask
578-
; CHECK: %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 /* e8 */
578+
; CHECK: %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, 1, 0 /* e8 */
579579
; CHECK-NEXT: %y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */
580580
%x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0
581581
%y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0

0 commit comments

Comments
 (0)