@@ -228,7 +228,7 @@ class SILoadStoreOptimizer : public MachineFunctionPass {
228228
229229 void copyToDestRegs (CombineInfo &CI, CombineInfo &Paired,
230230 MachineBasicBlock::iterator InsertBefore, int OpName,
231- Register DestReg) const ;
231+ Register DestReg, MachineInstr *NewMI ) const ;
232232 Register copyFromSrcRegs (CombineInfo &CI, CombineInfo &Paired,
233233 MachineBasicBlock::iterator InsertBefore,
234234 int OpName) const ;
@@ -1203,9 +1203,10 @@ SILoadStoreOptimizer::checkAndPrepareMerge(CombineInfo &CI,
12031203// Paired.
12041204void SILoadStoreOptimizer::copyToDestRegs (
12051205 CombineInfo &CI, CombineInfo &Paired,
1206- MachineBasicBlock::iterator InsertBefore, int OpName,
1207- Register DestReg ) const {
1206+ MachineBasicBlock::iterator InsertBefore, int OpName, Register DestReg,
1207+ MachineInstr *NewMI ) const {
12081208 MachineBasicBlock *MBB = CI.I ->getParent ();
1209+ MachineFunction *MF = MBB->getParent ();
12091210 DebugLoc DL = CI.I ->getDebugLoc ();
12101211
12111212 auto [SubRegIdx0, SubRegIdx1] = getSubRegIdxs (CI, Paired);
@@ -1221,6 +1222,17 @@ void SILoadStoreOptimizer::copyToDestRegs(
12211222 BuildMI (*MBB, InsertBefore, DL, CopyDesc)
12221223 .add (*Dest1)
12231224 .addReg (DestReg, RegState::Kill, SubRegIdx1);
1225+
1226+ if (unsigned DINum = CI.I ->peekDebugInstrNum ()) {
1227+ unsigned NewDINum = NewMI->getDebugInstrNum ();
1228+ MF->makeDebugValueSubstitution (std::make_pair (DINum, 0 ),
1229+ std::make_pair (NewDINum, 0 ), SubRegIdx0);
1230+ }
1231+ if (unsigned DINum = Paired.I ->peekDebugInstrNum ()) {
1232+ unsigned NewDINum = NewMI->getDebugInstrNum ();
1233+ MF->makeDebugValueSubstitution (std::make_pair (DINum, 0 ),
1234+ std::make_pair (NewDINum, 0 ), SubRegIdx1);
1235+ }
12241236}
12251237
12261238// Return a register for the source of the merged store after copying the
@@ -1314,7 +1326,8 @@ SILoadStoreOptimizer::mergeRead2Pair(CombineInfo &CI, CombineInfo &Paired,
13141326 .addImm (0 ) // gds
13151327 .cloneMergedMemRefs ({&*CI.I , &*Paired.I });
13161328
1317- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg);
1329+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg,
1330+ Read2);
13181331
13191332 CI.I ->eraseFromParent ();
13201333 Paired.I ->eraseFromParent ();
@@ -1434,7 +1447,7 @@ SILoadStoreOptimizer::mergeImagePair(CombineInfo &CI, CombineInfo &Paired,
14341447
14351448 MachineInstr *New = MIB.addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
14361449
1437- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1450+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
14381451
14391452 CI.I ->eraseFromParent ();
14401453 Paired.I ->eraseFromParent ();
@@ -1466,7 +1479,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeSMemLoadImmPair(
14661479 New.addImm (MergedOffset);
14671480 New.addImm (CI.CPol ).addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
14681481
1469- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::sdst, DestReg);
1482+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::sdst, DestReg, New );
14701483
14711484 CI.I ->eraseFromParent ();
14721485 Paired.I ->eraseFromParent ();
@@ -1507,7 +1520,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeBufferLoadPair(
15071520 .addImm (0 ) // swz
15081521 .addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
15091522
1510- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1523+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
15111524
15121525 CI.I ->eraseFromParent ();
15131526 Paired.I ->eraseFromParent ();
@@ -1552,7 +1565,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeTBufferLoadPair(
15521565 .addImm (0 ) // swz
15531566 .addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
15541567
1555- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1568+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
15561569
15571570 CI.I ->eraseFromParent ();
15581571 Paired.I ->eraseFromParent ();
@@ -1622,7 +1635,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeFlatLoadPair(
16221635 .addImm (CI.CPol )
16231636 .addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
16241637
1625- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg);
1638+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg, New );
16261639
16271640 CI.I ->eraseFromParent ();
16281641 Paired.I ->eraseFromParent ();
0 commit comments