@@ -229,7 +229,7 @@ class SILoadStoreOptimizer {
229229
230230 void copyToDestRegs (CombineInfo &CI, CombineInfo &Paired,
231231 MachineBasicBlock::iterator InsertBefore, int OpName,
232- Register DestReg) const ;
232+ Register DestReg, MachineInstr *NewMI ) const ;
233233 Register copyFromSrcRegs (CombineInfo &CI, CombineInfo &Paired,
234234 MachineBasicBlock::iterator InsertBefore,
235235 int OpName) const ;
@@ -1256,9 +1256,10 @@ SILoadStoreOptimizer::checkAndPrepareMerge(CombineInfo &CI,
12561256// Paired.
12571257void SILoadStoreOptimizer::copyToDestRegs (
12581258 CombineInfo &CI, CombineInfo &Paired,
1259- MachineBasicBlock::iterator InsertBefore, int OpName,
1260- Register DestReg ) const {
1259+ MachineBasicBlock::iterator InsertBefore, int OpName, Register DestReg,
1260+ MachineInstr *NewMI ) const {
12611261 MachineBasicBlock *MBB = CI.I ->getParent ();
1262+ MachineFunction *MF = MBB->getParent ();
12621263 DebugLoc DL = CI.I ->getDebugLoc ();
12631264
12641265 auto [SubRegIdx0, SubRegIdx1] = getSubRegIdxs (CI, Paired);
@@ -1280,6 +1281,17 @@ void SILoadStoreOptimizer::copyToDestRegs(
12801281 BuildMI (*MBB, InsertBefore, DL, CopyDesc)
12811282 .add (*Dest1)
12821283 .addReg (DestReg, RegState::Kill, SubRegIdx1);
1284+
1285+ if (unsigned DINum = CI.I ->peekDebugInstrNum ()) {
1286+ unsigned NewDINum = NewMI->getDebugInstrNum ();
1287+ MF->makeDebugValueSubstitution (std::make_pair (DINum, 0 ),
1288+ std::make_pair (NewDINum, 0 ), SubRegIdx0);
1289+ }
1290+ if (unsigned DINum = Paired.I ->peekDebugInstrNum ()) {
1291+ unsigned NewDINum = NewMI->getDebugInstrNum ();
1292+ MF->makeDebugValueSubstitution (std::make_pair (DINum, 0 ),
1293+ std::make_pair (NewDINum, 0 ), SubRegIdx1);
1294+ }
12831295}
12841296
12851297// Return a register for the source of the merged store after copying the
@@ -1373,7 +1385,8 @@ SILoadStoreOptimizer::mergeRead2Pair(CombineInfo &CI, CombineInfo &Paired,
13731385 .addImm (0 ) // gds
13741386 .cloneMergedMemRefs ({&*CI.I , &*Paired.I });
13751387
1376- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg);
1388+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg,
1389+ Read2);
13771390
13781391 CI.I ->eraseFromParent ();
13791392 Paired.I ->eraseFromParent ();
@@ -1493,7 +1506,7 @@ SILoadStoreOptimizer::mergeImagePair(CombineInfo &CI, CombineInfo &Paired,
14931506
14941507 MachineInstr *New = MIB.addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
14951508
1496- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1509+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
14971510
14981511 CI.I ->eraseFromParent ();
14991512 Paired.I ->eraseFromParent ();
@@ -1525,7 +1538,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeSMemLoadImmPair(
15251538 New.addImm (MergedOffset);
15261539 New.addImm (CI.CPol ).addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
15271540
1528- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::sdst, DestReg);
1541+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::sdst, DestReg, New );
15291542
15301543 CI.I ->eraseFromParent ();
15311544 Paired.I ->eraseFromParent ();
@@ -1566,7 +1579,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeBufferLoadPair(
15661579 .addImm (0 ) // swz
15671580 .addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
15681581
1569- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1582+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
15701583
15711584 CI.I ->eraseFromParent ();
15721585 Paired.I ->eraseFromParent ();
@@ -1611,7 +1624,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeTBufferLoadPair(
16111624 .addImm (0 ) // swz
16121625 .addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
16131626
1614- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1627+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
16151628
16161629 CI.I ->eraseFromParent ();
16171630 Paired.I ->eraseFromParent ();
@@ -1681,7 +1694,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeFlatLoadPair(
16811694 .addImm (CI.CPol )
16821695 .addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
16831696
1684- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg);
1697+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg, New );
16851698
16861699 CI.I ->eraseFromParent ();
16871700 Paired.I ->eraseFromParent ();
0 commit comments