@@ -461,8 +461,6 @@ GCNRPTracker::LiveRegSet llvm::getLiveRegs(SlotIndex SI,
461461 const LiveIntervals &LIS,
462462 const MachineRegisterInfo &MRI) {
463463 GCNRPTracker::LiveRegSet LiveRegs;
464- if (!SI.isValid ())
465- return LiveRegs;
466464 for (unsigned I = 0 , E = MRI.getNumVirtRegs (); I != E; ++I) {
467465 auto Reg = Register::index2VirtReg (I);
468466 if (!LIS.hasInterval (Reg))
@@ -908,28 +906,29 @@ bool GCNRegPressurePrinter::runOnMachineFunction(MachineFunction &MF) {
908906
909907 SlotIndex MBBStartSlot = LIS.getSlotIndexes ()->getMBBStartIdx (&MBB);
910908 SlotIndex MBBLastSlot = LIS.getSlotIndexes ()->getMBBLastIdx (&MBB);
911- bool MBBHasNonDebugInstrs = MBBStartSlot != MBBLastSlot.getBaseIndex ();
912909
913910 GCNRPTracker::LiveRegSet LiveIn, LiveOut;
914911 GCNRegPressure RPAtMBBEnd;
915912
916- if (!MBBHasNonDebugInstrs) {
917- LiveIn = LiveOut = getLiveRegs (MBBStartSlot, LIS, MRI);
918- RPAtMBBEnd = getRegPressure (MRI, LiveIn);
919- } else if (UseDownwardTracker) {
920- GCNDownwardRPTracker RPT (LIS);
921- RPT.reset (MBB.front ());
913+ if (UseDownwardTracker) {
914+ if (MBB.empty ()) {
915+ LiveIn = LiveOut = getLiveRegs (MBBStartSlot, LIS, MRI);
916+ RPAtMBBEnd = getRegPressure (MRI, LiveIn);
917+ } else {
918+ GCNDownwardRPTracker RPT (LIS);
919+ RPT.reset (MBB.front ());
922920
923- LiveIn = RPT.getLiveRegs ();
921+ LiveIn = RPT.getLiveRegs ();
924922
925- while (!RPT.advanceBeforeNext ()) {
926- GCNRegPressure RPBeforeMI = RPT.getPressure ();
927- RPT.advanceToNext ();
928- RP.emplace_back (RPBeforeMI, RPT.getPressure ());
929- }
923+ while (!RPT.advanceBeforeNext ()) {
924+ GCNRegPressure RPBeforeMI = RPT.getPressure ();
925+ RPT.advanceToNext ();
926+ RP.emplace_back (RPBeforeMI, RPT.getPressure ());
927+ }
930928
931- LiveOut = RPT.getLiveRegs ();
932- RPAtMBBEnd = RPT.getPressure ();
929+ LiveOut = RPT.getLiveRegs ();
930+ RPAtMBBEnd = RPT.getPressure ();
931+ }
933932 } else {
934933 GCNUpwardRPTracker RPT (LIS);
935934 RPT.reset (MRI, MBBLastSlot);
@@ -973,9 +972,8 @@ bool GCNRegPressurePrinter::runOnMachineFunction(MachineFunction &MF) {
973972 for (auto [Reg, Mask] : LiveIn) {
974973 LaneBitmask MaskIntersection = Mask & LiveOut.lookup (Reg);
975974 if (MaskIntersection.any ()) {
976- SlotIndex MBBEndSlot = LIS.getSlotIndexes ()->getMBBEndIdx (&MBB);
977975 LaneBitmask LTMask = getRegLiveThroughMask (
978- MRI, LIS, Reg, MBBStartSlot, MBBEndSlot , MaskIntersection);
976+ MRI, LIS, Reg, MBBStartSlot, MBBLastSlot , MaskIntersection);
979977 if (LTMask.any ())
980978 LiveThrough[Reg] = LTMask;
981979 }
0 commit comments