[PATCH] D101523: [DebugInfo] Fix updateDbgUsersToReg to support DBG_VALUE_LIST

Stephen Tozer via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 29 05:12:09 PDT 2021


StephenTozer created this revision.
StephenTozer added reviewers: dblaikie, probinson, vsk, aprantl, jmorse.
StephenTozer added a project: debug-info.
Herald added a subscriber: hiraditya.
StephenTozer requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

This patch resolves an issue reported in review https://reviews.llvm.org/D91722 (post-commit). The issue is relatively simple; the function `updateDbgUsersToReg` was not updated to support `DBG_VALUE_LIST` instructions in the patch that introduced that instruction. The fix is also simple, simply replacing hardcoded operand indices (`getOperand(0)`) with the new debug operand getter. The patch has also modified the assertion `MI->isDebugInstr()` with `MI->isDebugValue()`, as the former is overly general for this function. A test will be added to the review shortly, but the functional changes of the patch should be easy to review regardless.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D101523

Files:
  llvm/include/llvm/CodeGen/MachineRegisterInfo.h
  llvm/lib/CodeGen/MachineCopyPropagation.cpp


Index: llvm/lib/CodeGen/MachineCopyPropagation.cpp
===================================================================
--- llvm/lib/CodeGen/MachineCopyPropagation.cpp
+++ llvm/lib/CodeGen/MachineCopyPropagation.cpp
@@ -734,7 +734,8 @@
       // Update matching debug values, if any.
       assert(MaybeDead->isCopy());
       Register SrcReg = MaybeDead->getOperand(1).getReg();
-      MRI->updateDbgUsersToReg(SrcReg, CopyDbgUsers[MaybeDead]);
+      Register DestReg = MaybeDead->getOperand(0).getReg();
+      MRI->updateDbgUsersToReg(DestReg, SrcReg, CopyDbgUsers[MaybeDead]);
 
       MaybeDead->eraseFromParent();
       Changed = true;
Index: llvm/include/llvm/CodeGen/MachineRegisterInfo.h
===================================================================
--- llvm/include/llvm/CodeGen/MachineRegisterInfo.h
+++ llvm/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -823,12 +823,13 @@
 
   /// updateDbgUsersToReg - Update a collection of DBG_VALUE instructions
   /// to refer to the designated register.
-  void updateDbgUsersToReg(Register Reg,
-                           ArrayRef<MachineInstr*> Users) const {
+  void updateDbgUsersToReg(Register OldReg, Register NewReg,
+                           ArrayRef<MachineInstr *> Users) const {
     for (MachineInstr *MI : Users) {
-      assert(MI->isDebugInstr());
-      assert(MI->getOperand(0).isReg());
-      MI->getOperand(0).setReg(Reg);
+      assert(MI->isDebugValue());
+      assert(MI->hasDebugOperandForReg(OldReg));
+      for (auto &Op : MI->getDebugOperandsForReg(OldReg))
+        Op.setReg(NewReg);
     }
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101523.341476.patch
Type: text/x-patch
Size: 1591 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210429/2e67b83c/attachment.bin>


More information about the llvm-commits mailing list