@@ -1999,7 +1999,7 @@ bool RewriteScheduleStage::initHeuristics(
19991999 SmallVector<SlotIndex, 8 > DstUsesReachingDefs;
20002000 findReachingDefs (*RUOp, DAG.LIS , DstUsesReachingDefs);
20012001
2002- for (auto RDIndex : DstUsesReachingDefs) {
2002+ for (SlotIndex RDIndex : DstUsesReachingDefs) {
20032003 MachineInstr *RD = DAG.LIS ->getInstructionFromIndex (RDIndex);
20042004 if (TII->isMAI (*RD))
20052005 continue ;
@@ -2106,7 +2106,7 @@ int64_t RewriteScheduleStage::getRewriteCost(
21062106 uint64_t UseFreq =
21072107 EntryFreq ? MBFI.getBlockFreq (UseBlock).getFrequency () / EntryFreq : 1 ;
21082108
2109- for (auto UseReg : UseRegs) {
2109+ for (Register UseReg : UseRegs) {
21102110 unsigned RegSize =
21112111 DAG.TRI ->getRegSizeInBits (*DAG.MRI .getRegClass (UseReg));
21122112 unsigned NumRegs = std::max (RegSize / 32 , (unsigned )1 );
@@ -2142,7 +2142,7 @@ bool RewriteScheduleStage::rewrite(
21422142 DenseMap<MachineInstr *, unsigned > LastMIToRegion;
21432143
21442144 for (unsigned Region = 0 ; Region < DAG.Regions .size (); Region++) {
2145- auto Entry = DAG.Regions [Region];
2145+ RegionBoundaries Entry = DAG.Regions [Region];
21462146 if (Entry.first == Entry.second )
21472147 continue ;
21482148
@@ -2190,7 +2190,7 @@ bool RewriteScheduleStage::rewrite(
21902190 // up creating illegal instructions.
21912191
21922192 // The original registers of the MFMA that need to be reclassified as AGPR.
2193- std::set <Register> RewriteRegs;
2193+ DenseSet <Register> RewriteRegs;
21942194 // The map of an original register in the MFMA to a new register (result of a
21952195 // copy) that it should be replaced with.
21962196 DenseMap<Register, Register> RedefMap;
@@ -2204,15 +2204,13 @@ bool RewriteScheduleStage::rewrite(
22042204 ReachingUseTracker;
22052205
22062206 for (auto &[MI, OriginalOpcode] : RewriteCands) {
2207-
22082207 int ReplacementOp = AMDGPU::getMFMASrcCVDstAGPROp (MI->getOpcode ());
22092208 if (ReplacementOp == -1 )
22102209 continue ;
22112210 MI->setDesc (TII->get (ReplacementOp));
22122211
22132212 // Case 1: insert copies for the reaching defs of the Src2Reg.
22142213 MachineOperand *Src2 = TII->getNamedOperand (*MI, AMDGPU::OpName::src2);
2215-
22162214 if (Src2->isReg ()) {
22172215 Register Src2Reg = Src2->getReg ();
22182216 if (!Src2Reg.isVirtual ())
@@ -2223,7 +2221,7 @@ bool RewriteScheduleStage::rewrite(
22232221 findReachingDefs (*Src2, DAG.LIS , Src2ReachingDefs);
22242222 SmallVector<MachineInstr *, 8 > Src2DefsReplace;
22252223
2226- for (auto RDIndex : Src2ReachingDefs) {
2224+ for (SlotIndex RDIndex : Src2ReachingDefs) {
22272225 MachineInstr *RD = DAG.LIS ->getInstructionFromIndex (RDIndex);
22282226 if (TII->isMAI (*RD))
22292227 continue ;
@@ -2234,8 +2232,9 @@ bool RewriteScheduleStage::rewrite(
22342232 }
22352233
22362234 if (!Src2DefsReplace.empty ()) {
2237- if (RedefMap.contains (Src2Reg)) {
2238- MappedReg = RedefMap[Src2Reg];
2235+ DenseMap<Register, Register>::iterator RI = RedefMap.find (Src2Reg);
2236+ if (RI != RedefMap.end ()) {
2237+ MappedReg = RI->second ;
22392238 } else {
22402239 assert (!ReachingDefCopyMap.contains (Src2Reg));
22412240 const TargetRegisterClass *Src2RC = DAG.MRI .getRegClass (Src2Reg);
@@ -2304,7 +2303,7 @@ bool RewriteScheduleStage::rewrite(
23042303 SmallVector<SlotIndex, 8 > DstUsesReachingDefs;
23052304 findReachingDefs (*RUOp, DAG.LIS , DstUsesReachingDefs);
23062305
2307- for (auto RDIndex : DstUsesReachingDefs) {
2306+ for (SlotIndex RDIndex : DstUsesReachingDefs) {
23082307 MachineInstr *RD = DAG.LIS ->getInstructionFromIndex (RDIndex);
23092308 if (TII->isMAI (*RD))
23102309 continue ;
@@ -2317,9 +2316,10 @@ bool RewriteScheduleStage::rewrite(
23172316 }
23182317
23192318 if (!DstUseDefsReplace.empty ()) {
2320- if (RedefMap.contains (DstReg))
2321- MappedReg = RedefMap[DstReg];
2322- else {
2319+ DenseMap<Register, Register>::iterator RI = RedefMap.find (DstReg);
2320+ if (RI != RedefMap.end ()) {
2321+ MappedReg = RI->second ;
2322+ } else {
23232323 assert (!ReachingDefCopyMap.contains (DstReg));
23242324 const TargetRegisterClass *DstRC = DAG.MRI .getRegClass (DstReg);
23252325 const TargetRegisterClass *VGPRRC = SRI->getEquivalentVGPRClass (DstRC);
@@ -2343,8 +2343,10 @@ bool RewriteScheduleStage::rewrite(
23432343
23442344 // If this reaching def was the last MI in the region, update the
23452345 // region boundaries.
2346- if (LastMIToRegion.contains (RD)) {
2347- unsigned UpdateRegion = LastMIToRegion[RD];
2346+ DenseMap<MachineInstr *, unsigned >::iterator LMI =
2347+ LastMIToRegion.find (RD);
2348+ if (LMI != LastMIToRegion.end ()) {
2349+ unsigned UpdateRegion = LMI->second ;
23482350 DAG.Regions [UpdateRegion].second = VGPRCopy;
23492351 LastMIToRegion.erase (RD);
23502352 }
@@ -2389,13 +2391,16 @@ bool RewriteScheduleStage::rewrite(
23892391 }
23902392
23912393 // Handle the copies for dst uses.
2392- for (auto RUBlockEntry : ReachingUseTracker) {
2393- for (auto RUDst : RUBlockEntry.second ) {
2394+ using RUBType =
2395+ std::pair<unsigned , DenseMap<Register, SmallPtrSet<MachineOperand *, 8 >>>;
2396+ for (RUBType RUBlockEntry : ReachingUseTracker) {
2397+ using RUDType = std::pair<Register, SmallPtrSet<MachineOperand *, 8 >>;
2398+ for (RUDType RUDst : RUBlockEntry.second ) {
23942399 MachineOperand *OpBegin = *RUDst.second .begin ();
23952400 SlotIndex InstPt = DAG.LIS ->getInstructionIndex (*OpBegin->getParent ());
23962401
23972402 // Find the earliest use in this block.
2398- for (auto *User : RUDst.second ) {
2403+ for (MachineOperand *User : RUDst.second ) {
23992404 SlotIndex NewInstPt = DAG.LIS ->getInstructionIndex (*User->getParent ());
24002405 if (SlotIndex::isEarlierInstr (NewInstPt, InstPt))
24012406 InstPt = NewInstPt;
@@ -2415,8 +2420,10 @@ bool RewriteScheduleStage::rewrite(
24152420
24162421 // If this UseInst was the first MI in the region, update the region
24172422 // boundaries.
2418- if (FirstMIToRegion.contains (UseInst)) {
2419- unsigned UpdateRegion = FirstMIToRegion[UseInst];
2423+ DenseMap<MachineInstr *, unsigned >::iterator FI =
2424+ FirstMIToRegion.find (UseInst);
2425+ if (FI != FirstMIToRegion.end ()) {
2426+ unsigned UpdateRegion = FI->second ;
24202427 DAG.Regions [UpdateRegion].first = VGPRCopy;
24212428 FirstMIToRegion.erase (UseInst);
24222429 }
@@ -2434,7 +2441,7 @@ bool RewriteScheduleStage::rewrite(
24342441 // We may have needed to insert copies after the reaching defs of the MFMAs.
24352442 // Replace the original register with the result of the copy for all relevant
24362443 // operands.
2437- for (auto NewDef : RedefMap) {
2444+ for (std::pair<Register, Register> NewDef : RedefMap) {
24382445 Register OldReg = NewDef.first ;
24392446 Register NewReg = NewDef.second ;
24402447
0 commit comments