@@ -228,7 +228,7 @@ class SILoadStoreOptimizer : public MachineFunctionPass {
228
228
229
229
void copyToDestRegs (CombineInfo &CI, CombineInfo &Paired,
230
230
MachineBasicBlock::iterator InsertBefore, int OpName,
231
- Register DestReg) const ;
231
+ Register DestReg, MachineInstr *NewMI ) const ;
232
232
Register copyFromSrcRegs (CombineInfo &CI, CombineInfo &Paired,
233
233
MachineBasicBlock::iterator InsertBefore,
234
234
int OpName) const ;
@@ -1203,9 +1203,10 @@ SILoadStoreOptimizer::checkAndPrepareMerge(CombineInfo &CI,
1203
1203
// Paired.
1204
1204
void SILoadStoreOptimizer::copyToDestRegs (
1205
1205
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 {
1208
1208
MachineBasicBlock *MBB = CI.I ->getParent ();
1209
+ MachineFunction *MF = MBB->getParent ();
1209
1210
DebugLoc DL = CI.I ->getDebugLoc ();
1210
1211
1211
1212
auto [SubRegIdx0, SubRegIdx1] = getSubRegIdxs (CI, Paired);
@@ -1221,6 +1222,17 @@ void SILoadStoreOptimizer::copyToDestRegs(
1221
1222
BuildMI (*MBB, InsertBefore, DL, CopyDesc)
1222
1223
.add (*Dest1)
1223
1224
.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
+ }
1224
1236
}
1225
1237
1226
1238
// Return a register for the source of the merged store after copying the
@@ -1314,7 +1326,8 @@ SILoadStoreOptimizer::mergeRead2Pair(CombineInfo &CI, CombineInfo &Paired,
1314
1326
.addImm (0 ) // gds
1315
1327
.cloneMergedMemRefs ({&*CI.I , &*Paired.I });
1316
1328
1317
- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg);
1329
+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg,
1330
+ Read2);
1318
1331
1319
1332
CI.I ->eraseFromParent ();
1320
1333
Paired.I ->eraseFromParent ();
@@ -1434,7 +1447,7 @@ SILoadStoreOptimizer::mergeImagePair(CombineInfo &CI, CombineInfo &Paired,
1434
1447
1435
1448
MachineInstr *New = MIB.addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
1436
1449
1437
- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1450
+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
1438
1451
1439
1452
CI.I ->eraseFromParent ();
1440
1453
Paired.I ->eraseFromParent ();
@@ -1466,7 +1479,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeSMemLoadImmPair(
1466
1479
New.addImm (MergedOffset);
1467
1480
New.addImm (CI.CPol ).addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
1468
1481
1469
- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::sdst, DestReg);
1482
+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::sdst, DestReg, New );
1470
1483
1471
1484
CI.I ->eraseFromParent ();
1472
1485
Paired.I ->eraseFromParent ();
@@ -1507,7 +1520,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeBufferLoadPair(
1507
1520
.addImm (0 ) // swz
1508
1521
.addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
1509
1522
1510
- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1523
+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
1511
1524
1512
1525
CI.I ->eraseFromParent ();
1513
1526
Paired.I ->eraseFromParent ();
@@ -1552,7 +1565,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeTBufferLoadPair(
1552
1565
.addImm (0 ) // swz
1553
1566
.addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
1554
1567
1555
- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg);
1568
+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdata, DestReg, New );
1556
1569
1557
1570
CI.I ->eraseFromParent ();
1558
1571
Paired.I ->eraseFromParent ();
@@ -1622,7 +1635,7 @@ MachineBasicBlock::iterator SILoadStoreOptimizer::mergeFlatLoadPair(
1622
1635
.addImm (CI.CPol )
1623
1636
.addMemOperand (combineKnownAdjacentMMOs (CI, Paired));
1624
1637
1625
- copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg);
1638
+ copyToDestRegs (CI, Paired, InsertBefore, AMDGPU::OpName::vdst, DestReg, New );
1626
1639
1627
1640
CI.I ->eraseFromParent ();
1628
1641
Paired.I ->eraseFromParent ();
0 commit comments