[llvm] [DebugInfo][RemoveDIs] Support cloning and remapping DPValues (PR #72546)
Jeremy Morse via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 23 09:12:50 PST 2023
================
@@ -535,6 +537,37 @@ Value *Mapper::mapValue(const Value *V) {
return getVM()[V] = ConstantPointerNull::get(cast<PointerType>(NewTy));
}
+void Mapper::remapDPValue(DPValue &V) {
+ // Remap variables and DILocations.
+ auto *MappedVar = mapMetadata(V.getVariable());
+ auto *MappedDILoc = mapMetadata(V.getDebugLoc());
+ V.setVariable(cast<DILocalVariable>(MappedVar));
+ V.setDebugLoc(DebugLoc(cast<DILocation>(MappedDILoc)));
+
+ // Find Value operands and remap those.
+ SmallVector<Value *, 4> Vals, NewVals;
+ for (Value *Val: V.location_ops())
+ Vals.push_back(Val);
+ for (Value *Val : Vals)
+ NewVals.push_back(mapValue(Val));
+
+ // If there are no changes to the Value operands, finished.
+ if (Vals == NewVals)
+ return;
+
+ bool IgnoreMissingLocals = Flags & RF_IgnoreMissingLocals;
+
+ // Otherwise, do some replacement.
+ if (!IgnoreMissingLocals &&
+ llvm::any_of(NewVals, [&](Value *V) { return V == nullptr;})) {
+ V.setKillLocation();
+ } else {
+ for (unsigned int I = 0; I < Vals.size(); ++I)
+ if (NewVals[I] || !IgnoreMissingLocals)
----------------
jmorse wrote:
Good catch; I've just removed the check and added a comment, asserting something that's guaranteed three lines above seems like overkill.
https://github.com/llvm/llvm-project/pull/72546
More information about the llvm-commits
mailing list