@@ -448,19 +448,6 @@ void GCNRPTracker::reset(const MachineRegisterInfo &MRI_,
448
448
MaxPressure = CurPressure = getRegPressure (MRI_, LiveRegs_);
449
449
}
450
450
451
- void GCNRPTracker::bumpDeadDefs (ArrayRef<RegisterMaskPair> DeadDefs) {
452
- GCNRegPressure TempPressure = CurPressure;
453
- for (const RegisterMaskPair &P : DeadDefs) {
454
- Register Reg = P.RegUnit ;
455
- if (!Reg.isVirtual ())
456
- continue ;
457
- LaneBitmask LiveMask = LiveRegs[Reg];
458
- LaneBitmask BumpedMask = LiveMask | P.LaneMask ;
459
- CurPressure.inc (Reg, LiveMask, BumpedMask, *MRI);
460
- }
461
- MaxPressure = max (MaxPressure, CurPressure);
462
- CurPressure = TempPressure;
463
- }
464
451
// / Mostly copy/paste from CodeGen/RegisterPressure.cpp
465
452
LaneBitmask GCNRPTracker::getLastUsedLanes (Register RegUnit,
466
453
SlotIndex Pos) const {
@@ -535,8 +522,9 @@ void GCNUpwardRPTracker::recede(const MachineInstr &MI) {
535
522
assert (CurPressure == getRegPressure (*MRI, LiveRegs));
536
523
}
537
524
538
- void GCNUpwardRPTracker::bumpUpwardPressure (const MachineInstr *MI,
539
- const SIRegisterInfo *TRI) {
525
+ GCNRegPressure
526
+ GCNUpwardRPTracker::bumpUpwardPressure (const MachineInstr *MI,
527
+ const SIRegisterInfo *TRI) const {
540
528
assert (!MI->isDebugOrPseudoInstr () && " Expect a nondebug instruction." );
541
529
542
530
SlotIndex SlotIdx = LIS.getInstructionIndex (*MI).getRegSlot ();
@@ -549,33 +537,32 @@ void GCNUpwardRPTracker::bumpUpwardPressure(const MachineInstr *MI,
549
537
adjustDefLaneLiveness (RegOpers.Defs , SlotIdx, LIS, *MRI);
550
538
RegOpers.detectDeadDefs (*MI, LIS);
551
539
552
- // Boost max pressure for all dead defs together.
553
- // Since CurrSetPressure and MaxSetPressure
554
- bumpDeadDefs (RegOpers.DeadDefs );
540
+ GCNRegPressure TempPressure = CurPressure;
555
541
556
542
// Kill liveness at live defs.
557
543
for (const RegisterMaskPair &P : RegOpers.Defs ) {
558
544
Register Reg = P.RegUnit ;
559
545
if (!Reg.isVirtual ())
560
546
continue ;
561
- LaneBitmask LiveAfter = LiveRegs[Reg];
547
+ LaneBitmask LiveAfter =
548
+ LiveRegs.contains (Reg) ? LiveRegs.at (Reg) : LaneBitmask (0 );
562
549
LaneBitmask UseLanes = getRegLanes (RegOpers.Uses , Reg);
563
550
LaneBitmask DefLanes = P.LaneMask ;
564
551
LaneBitmask LiveBefore = (LiveAfter & ~DefLanes) | UseLanes;
565
552
566
- CurPressure.inc (Reg, LiveAfter, LiveAfter & LiveBefore, *MRI);
567
- MaxPressure = max (MaxPressure, CurPressure);
553
+ TempPressure.inc (Reg, LiveAfter, LiveAfter & LiveBefore, *MRI);
568
554
}
569
555
// Generate liveness for uses.
570
556
for (const RegisterMaskPair &P : RegOpers.Uses ) {
571
557
Register Reg = P.RegUnit ;
572
558
if (!Reg.isVirtual ())
573
559
continue ;
574
- LaneBitmask LiveAfter = LiveRegs[Reg];
560
+ LaneBitmask LiveAfter =
561
+ LiveRegs.contains (Reg) ? LiveRegs.at (Reg) : LaneBitmask (0 );
575
562
LaneBitmask LiveBefore = LiveAfter | P.LaneMask ;
576
- CurPressure .inc (Reg, LiveAfter, LiveBefore, *MRI);
563
+ TempPressure .inc (Reg, LiveAfter, LiveBefore, *MRI);
577
564
}
578
- MaxPressure = max (MaxPressure, CurPressure) ;
565
+ return TempPressure ;
579
566
}
580
567
581
568
// //////////////////////////////////////////////////////////////////////////////
@@ -736,8 +723,9 @@ Printable llvm::reportMismatch(const GCNRPTracker::LiveRegSet &LISLR,
736
723
});
737
724
}
738
725
739
- void GCNDownwardRPTracker::bumpDownwardPressure (const MachineInstr *MI,
740
- const SIRegisterInfo *TRI) {
726
+ GCNRegPressure
727
+ GCNDownwardRPTracker::bumpDownwardPressure (const MachineInstr *MI,
728
+ const SIRegisterInfo *TRI) const {
741
729
assert (!MI->isDebugOrPseudoInstr () && " Expect a nondebug instruction." );
742
730
743
731
SlotIndex SlotIdx;
@@ -747,6 +735,7 @@ void GCNDownwardRPTracker::bumpDownwardPressure(const MachineInstr *MI,
747
735
RegisterOperands RegOpers;
748
736
RegOpers.collect (*MI, *TRI, *MRI, true , /* IgnoreDead=*/ false );
749
737
RegOpers.adjustLaneLiveness (LIS, *MRI, SlotIdx);
738
+ GCNRegPressure TempPressure = CurPressure;
750
739
751
740
for (const RegisterMaskPair &Use : RegOpers.Uses ) {
752
741
Register Reg = Use.RegUnit ;
@@ -775,24 +764,24 @@ void GCNDownwardRPTracker::bumpDownwardPressure(const MachineInstr *MI,
775
764
if (LastUseMask.none ())
776
765
continue ;
777
766
778
- LaneBitmask LiveMask = LiveRegs[Reg];
767
+ LaneBitmask LiveMask =
768
+ LiveRegs.contains (Reg) ? LiveRegs.at (Reg) : LaneBitmask (0 );
779
769
LaneBitmask NewMask = LiveMask & ~LastUseMask;
780
- CurPressure .inc (Reg, LiveMask, NewMask, *MRI);
770
+ TempPressure .inc (Reg, LiveMask, NewMask, *MRI);
781
771
}
782
772
783
773
// Generate liveness for defs.
784
774
for (const RegisterMaskPair &Def : RegOpers.Defs ) {
785
775
Register Reg = Def.RegUnit ;
786
776
if (!Reg.isVirtual ())
787
777
continue ;
788
- LaneBitmask LiveMask = LiveRegs[Reg];
778
+ LaneBitmask LiveMask =
779
+ LiveRegs.contains (Reg) ? LiveRegs.at (Reg) : LaneBitmask (0 );
789
780
LaneBitmask NewMask = LiveMask | Def.LaneMask ;
790
- CurPressure .inc (Reg, LiveMask, NewMask, *MRI);
781
+ TempPressure .inc (Reg, LiveMask, NewMask, *MRI);
791
782
}
792
- MaxPressure = max (MaxPressure, CurPressure);
793
783
794
- // Boost pressure for all dead defs together.
795
- bumpDeadDefs (RegOpers.DeadDefs );
784
+ return TempPressure;
796
785
}
797
786
798
787
bool GCNUpwardRPTracker::isValid () const {
0 commit comments