@@ -351,17 +351,11 @@ void ModuloScheduleExpander::generateEpilog(
351351// / basic block with ToReg.
352352static void replaceRegUsesAfterLoop (Register FromReg, Register ToReg,
353353 MachineBasicBlock *MBB,
354- MachineRegisterInfo &MRI,
355- LiveIntervals &LIS,
356- SmallVector<Register> &NoIntervalRegs) {
354+ MachineRegisterInfo &MRI) {
357355 for (MachineOperand &O :
358356 llvm::make_early_inc_range (MRI.use_operands (FromReg)))
359357 if (O.getParent ()->getParent () != MBB)
360358 O.setReg (ToReg);
361- // The interval will be calculated after the kernel expansion in
362- // calculateIntervals().
363- if (!LIS.hasInterval (ToReg))
364- NoIntervalRegs.push_back (ToReg);
365359}
366360
367361// / Return true if the register has a use that occurs outside the
@@ -552,9 +546,10 @@ void ModuloScheduleExpander::generateExistingPhis(
552546 if (VRMap[LastStageNum - np - 1 ].count (LoopVal))
553547 PhiOp2 = VRMap[LastStageNum - np - 1 ][LoopVal];
554548
555- if (IsLast && np == NumPhis - 1 )
556- replaceRegUsesAfterLoop (Def, NewReg, BB, MRI, LIS,
557- NoIntervalRegs);
549+ if (IsLast && np == NumPhis - 1 ) {
550+ replaceRegUsesAfterLoop (Def, NewReg, BB, MRI);
551+ NoIntervalRegs.push_back (NewReg);
552+ }
558553 continue ;
559554 }
560555 }
@@ -594,8 +589,10 @@ void ModuloScheduleExpander::generateExistingPhis(
594589 // Check if we need to rename any uses that occurs after the loop. The
595590 // register to replace depends on whether the Phi is scheduled in the
596591 // epilog.
597- if (IsLast && np == NumPhis - 1 )
598- replaceRegUsesAfterLoop (Def, NewReg, BB, MRI, LIS, NoIntervalRegs);
592+ if (IsLast && np == NumPhis - 1 ) {
593+ replaceRegUsesAfterLoop (Def, NewReg, BB, MRI);
594+ NoIntervalRegs.push_back (NewReg);
595+ }
599596
600597 // In the kernel, a dependent Phi uses the value from this Phi.
601598 if (InKernel)
@@ -614,8 +611,10 @@ void ModuloScheduleExpander::generateExistingPhis(
614611 // scheduling.
615612 if (NumStages == 0 && IsLast) {
616613 auto It = VRMap[CurStageNum].find (LoopVal);
617- if (It != VRMap[CurStageNum].end ())
618- replaceRegUsesAfterLoop (Def, It->second , BB, MRI, LIS, NoIntervalRegs);
614+ if (It != VRMap[CurStageNum].end ()) {
615+ replaceRegUsesAfterLoop (Def, It->second , BB, MRI);
616+ NoIntervalRegs.push_back (It->second );
617+ }
619618 }
620619 }
621620}
@@ -735,8 +734,10 @@ void ModuloScheduleExpander::generatePhis(
735734 rewriteScheduledInstr (NewBB, InstrMap, CurStageNum, np, &*BBI, Def,
736735 NewReg);
737736 }
738- if (IsLast && np == NumPhis - 1 )
739- replaceRegUsesAfterLoop (Def, NewReg, BB, MRI, LIS, NoIntervalRegs);
737+ if (IsLast && np == NumPhis - 1 ) {
738+ replaceRegUsesAfterLoop (Def, NewReg, BB, MRI);
739+ NoIntervalRegs.push_back (NewReg);
740+ }
740741 }
741742 }
742743 }
@@ -1076,8 +1077,10 @@ void ModuloScheduleExpander::updateInstruction(MachineInstr *NewMI,
10761077 Register NewReg = MRI.createVirtualRegister (RC);
10771078 MO.setReg (NewReg);
10781079 VRMap[CurStageNum][reg] = NewReg;
1079- if (LastDef)
1080- replaceRegUsesAfterLoop (reg, NewReg, BB, MRI, LIS, NoIntervalRegs);
1080+ if (LastDef) {
1081+ replaceRegUsesAfterLoop (reg, NewReg, BB, MRI);
1082+ NoIntervalRegs.push_back (NewReg);
1083+ }
10811084 } else if (MO.isUse ()) {
10821085 MachineInstr *Def = MRI.getVRegDef (reg);
10831086 // Compute the stage that contains the last definition for instruction.
0 commit comments