@@ -5045,10 +5045,20 @@ static void insertNewDbgInst(DIBuilder &DIB, DbgVariableRecord *Orig,
5045
5045
BeforeInst->getIterator ());
5046
5046
return ;
5047
5047
}
5048
+
5049
+ if (Orig->isDbgValue ()) {
5050
+ DbgVariableRecord *DVR = DbgVariableRecord::createDbgVariableRecord (
5051
+ NewAddr, Orig->getVariable (), NewFragmentExpr, Orig->getDebugLoc ());
5052
+ BeforeInst->getParent ()->insertDbgRecordBefore (DVR,
5053
+ BeforeInst->getIterator ());
5054
+ return ;
5055
+ }
5056
+
5048
5057
if (!NewAddr->hasMetadata (LLVMContext::MD_DIAssignID)) {
5049
5058
NewAddr->setMetadata (LLVMContext::MD_DIAssignID,
5050
5059
DIAssignID::getDistinct (NewAddr->getContext ()));
5051
5060
}
5061
+
5052
5062
DbgVariableRecord *NewAssign = DbgVariableRecord::createLinkedDVRAssign (
5053
5063
NewAddr, Orig->getValue (), Orig->getVariable (), NewFragmentExpr, NewAddr,
5054
5064
Orig->getAddressExpression (), Orig->getDebugLoc ());
@@ -5221,6 +5231,7 @@ bool SROA::splitAlloca(AllocaInst &AI, AllocaSlices &AS) {
5221
5231
};
5222
5232
for_each (findDbgDeclares (Fragment.Alloca ), RemoveOne);
5223
5233
for_each (findDVRDeclares (Fragment.Alloca ), RemoveOne);
5234
+ for_each (findDVRValues (Fragment.Alloca ), RemoveOne);
5224
5235
5225
5236
insertNewDbgInst (DIB, DbgVariable, Fragment.Alloca , FragmentExpr, &AI);
5226
5237
}
@@ -5230,6 +5241,7 @@ bool SROA::splitAlloca(AllocaInst &AI, AllocaSlices &AS) {
5230
5241
// and the individual partitions.
5231
5242
for_each (findDbgDeclares (&AI), MigrateOne);
5232
5243
for_each (findDVRDeclares (&AI), MigrateOne);
5244
+ for_each (findDVRValues (&AI), MigrateOne);
5233
5245
for_each (at::getAssignmentMarkers (&AI), MigrateOne);
5234
5246
for_each (at::getDVRAssignmentMarkers (&AI), MigrateOne);
5235
5247
@@ -5357,6 +5369,8 @@ bool SROA::deleteDeadInstructions(
5357
5369
OldDII->eraseFromParent ();
5358
5370
for (DbgVariableRecord *OldDII : findDVRDeclares (AI))
5359
5371
OldDII->eraseFromParent ();
5372
+ for (DbgVariableRecord *OldDII : findDVRValues (AI))
5373
+ OldDII->eraseFromParent ();
5360
5374
}
5361
5375
5362
5376
at::deleteAssignmentMarkers (I);
0 commit comments