diff options
author | Hsiangkai Wang <hsiangkai@gmail.com> | 2018-08-23 03:28:24 +0000 |
---|---|---|
committer | Hsiangkai Wang <hsiangkai@gmail.com> | 2018-08-23 03:28:24 +0000 |
commit | 97edcbc4e0ff1f1d689b9b70e43ff4cd28379d20 (patch) | |
tree | b9e544c708082b381158b2291cb99fbb7eb3f420 /llvm/lib/CodeGen/LiveDebugVariables.cpp | |
parent | a755f4d1a076b3fefd46be8cd398aeaa7d60beb9 (diff) | |
download | llvm-97edcbc4e0ff1f1d689b9b70e43ff4cd28379d20.zip llvm-97edcbc4e0ff1f1d689b9b70e43ff4cd28379d20.tar.gz llvm-97edcbc4e0ff1f1d689b9b70e43ff4cd28379d20.tar.bz2 |
[DebugInfo] Fix bug in LiveDebugVariables.
In lib/CodeGen/LiveDebugVariables.cpp, it uses std::prev(MBBI) to
get DebugValue's SlotIndex. However, the previous instruction may be
also a debug instruction. It could not use a debug instruction to query
SlotIndex in mi2iMap.
Scan all debug instructions and use the first debug instruction to query
SlotIndex for following debug instructions. Only handle DBG_VALUE in
handleDebugValue().
Differential Revision: https://reviews.llvm.org/D50621
llvm-svn: 340508
Diffstat (limited to 'llvm/lib/CodeGen/LiveDebugVariables.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveDebugVariables.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/LiveDebugVariables.cpp b/llvm/lib/CodeGen/LiveDebugVariables.cpp index 3ff03ec..3d934bf 100644 --- a/llvm/lib/CodeGen/LiveDebugVariables.cpp +++ b/llvm/lib/CodeGen/LiveDebugVariables.cpp @@ -578,23 +578,28 @@ bool LDVImpl::collectDebugValues(MachineFunction &mf) { MachineBasicBlock *MBB = &*MFI; for (MachineBasicBlock::iterator MBBI = MBB->begin(), MBBE = MBB->end(); MBBI != MBBE;) { - if (!MBBI->isDebugValue()) { + // Use the first debug instruction in the sequence to get a SlotIndex + // for following consecutive debug instructions. + if (!MBBI->isDebugInstr()) { ++MBBI; continue; } - // DBG_VALUE has no slot index, use the previous instruction instead. + // Debug instructions has no slot index. Use the previous + // non-debug instruction's SlotIndex as its SlotIndex. SlotIndex Idx = MBBI == MBB->begin() ? LIS->getMBBStartIdx(MBB) : LIS->getInstructionIndex(*std::prev(MBBI)).getRegSlot(); - // Handle consecutive DBG_VALUE instructions with the same slot index. + // Handle consecutive debug instructions with the same slot index. do { - if (handleDebugValue(*MBBI, Idx)) { + // Only handle DBG_VALUE in handleDebugValue(). Skip all other + // kinds of debug instructions. + if (MBBI->isDebugValue() && handleDebugValue(*MBBI, Idx)) { MBBI = MBB->erase(MBBI); Changed = true; } else ++MBBI; - } while (MBBI != MBBE && MBBI->isDebugValue()); + } while (MBBI != MBBE && MBBI->isDebugInstr()); } } return Changed; |