@@ -440,6 +440,7 @@ void RISCVRegisterInfo::lowerSegmentSpillReload(MachineBasicBlock::iterator II,
440440 auto [LMulHandled, RegClass, Opcode] =
441441 getSpillReloadInfo (NumRegs - I, RegEncoding, IsSpill);
442442 auto [RegNumHandled, _] = RISCVVType::decodeVLMUL (LMulHandled);
443+ bool IsLast = I + RegNumHandled == NumRegs;
443444 if (PreHandledNum) {
444445 Register Step;
445446 // Optimize for constant VLEN.
@@ -458,23 +459,22 @@ void RISCVRegisterInfo::lowerSegmentSpillReload(MachineBasicBlock::iterator II,
458459 else {
459460 Step = MRI.createVirtualRegister (&RISCV::GPRRegClass);
460461 BuildMI (MBB, II, DL, TII->get (RISCV::SLLI), Step)
461- .addReg (VLENB, getKillRegState (I + RegNumHandled == NumRegs ))
462+ .addReg (VLENB, getKillRegState (IsLast ))
462463 .addImm (ShiftAmount);
463464 }
464465 }
465466
466467 BuildMI (MBB, II, DL, TII->get (RISCV::ADD), NewBase)
467468 .addReg (Base, getKillRegState (I != 0 || IsBaseKill))
468- .addReg (Step, getKillRegState (Step != VLENB ||
469- I + RegNumHandled == NumRegs));
469+ .addReg (Step, getKillRegState (Step != VLENB || IsLast));
470470 Base = NewBase;
471471 }
472472
473473 MCRegister ActualReg = findVRegWithEncoding (RegClass, RegEncoding);
474474 MachineInstrBuilder MIB =
475475 BuildMI (MBB, II, DL, TII->get (Opcode))
476476 .addReg (ActualReg, getDefRegState (!IsSpill))
477- .addReg (Base, getKillRegState (I + RegNumHandled == NumRegs ))
477+ .addReg (Base, getKillRegState (IsLast ))
478478 .addMemOperand (MF.getMachineMemOperand (OldMMO, OldMMO->getOffset (),
479479 VRegSize * RegNumHandled));
480480
0 commit comments