[llvm] [InstrRef] Preserve debug instr num in aarch64-ldst-opt. (PR #136009)

Shubham Sandeep Rastogi via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 18 18:10:56 PDT 2025


================
@@ -965,6 +965,40 @@ static void updateDefinedRegisters(MachineInstr &MI, LiveRegUnits &Units,
       Units.addReg(MOP.getReg());
 }
 
+/// Find the DBG_INSTR_REF instruction that references the \p InstrNum
+static std::optional<MachineInstr *> findDebugInstrRef(MachineBasicBlock *MBB,
+                                                       unsigned InstrNum) {
+
+  for (auto &MI : *MBB) {
+    if (MI.isDebugRef())
+      if (MI.getOperand(2).getInstrRefInstrIndex() == InstrNum)
+        return &MI;
+  }
+  return std::nullopt;
+}
+
+/// Set the correct debug-instr-number and the operand index in case of a merge.
+static void setDebugInstrNum(MachineBasicBlock::iterator OriginalInstr,
+                             MachineInstrBuilder &MIB, unsigned InstrNumToFind,
+                             unsigned InstrNumToSet, MachineBasicBlock *MBB) {
+
+  auto InstrRefMI = findDebugInstrRef(MBB, InstrNumToFind);
+  if (InstrRefMI) {
+    auto *MI = *InstrRefMI;
+    MI->getOperand(2).setInstrRefInstrIndex(InstrNumToSet);
+    // Set the Instruction Reference Op Index to be the same as the operand of
+    // the new merged pair instruction.
+    auto Reg = OriginalInstr->getOperand(0).getReg();
+    unsigned OperandNo = 0;
+    for (auto Op : MIB->operands()) {
+      if (Op.getReg() == Reg)
+        break;
+      OperandNo++;
----------------
rastogishubham wrote:

Doesn't look like this does the thing you think it does:

```
p Op.getOperandNo()
(lldb) p Op.getOperandNo()
(unsigned int) 26406544
```

https://github.com/llvm/llvm-project/pull/136009


More information about the llvm-commits mailing list