diff options
| author | Hsiangkai Wang <hsiangkai@gmail.com> | 2018-09-02 16:35:42 +0000 |
|---|---|---|
| committer | Hsiangkai Wang <hsiangkai@gmail.com> | 2018-09-02 16:35:42 +0000 |
| commit | e0dcc28a4d96427dcd28d4393298cbf217458ee7 (patch) | |
| tree | 78e3e00ce7a52cf3d3ef67a5a1a76728de37c15b | |
| parent | 1368434b4973918b04b406633ce28d4e41481e8d (diff) | |
| download | bcm5719-llvm-e0dcc28a4d96427dcd28d4393298cbf217458ee7.tar.gz bcm5719-llvm-e0dcc28a4d96427dcd28d4393298cbf217458ee7.zip | |
Revert "[DebugInfo] Fix bug in LiveDebugVariables."
This reverts commit 8f548ff2a1819e1bc051e8218584f1a3d2cf178a.
buildbot failure in LLVM on clang-ppc64be-linux
http://lab.llvm.org:8011/builders/clang-ppc64le-linux/builds/19765
llvm-svn: 341290
| -rw-r--r-- | llvm/include/llvm/CodeGen/SlotIndexes.h | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/LiveDebugVariables.cpp | 15 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/live-debug-vars-index.mir | 51 |
3 files changed, 5 insertions, 63 deletions
diff --git a/llvm/include/llvm/CodeGen/SlotIndexes.h b/llvm/include/llvm/CodeGen/SlotIndexes.h index bb9c5cb4cfb..334267d9828 100644 --- a/llvm/include/llvm/CodeGen/SlotIndexes.h +++ b/llvm/include/llvm/CodeGen/SlotIndexes.h @@ -414,8 +414,6 @@ class raw_ostream; SlotIndex getInstructionIndex(const MachineInstr &MI) const { // Instructions inside a bundle have the same number as the bundle itself. const MachineInstr &BundleStart = *getBundleStart(MI.getIterator()); - assert(!BundleStart.isDebugInstr() && - "Could not use a debug instruction to query mi2iMap."); Mi2IndexMap::const_iterator itr = mi2iMap.find(&BundleStart); assert(itr != mi2iMap.end() && "Instruction not found in maps."); return itr->second; diff --git a/llvm/lib/CodeGen/LiveDebugVariables.cpp b/llvm/lib/CodeGen/LiveDebugVariables.cpp index 4c002d44209..b258a0e8300 100644 --- a/llvm/lib/CodeGen/LiveDebugVariables.cpp +++ b/llvm/lib/CodeGen/LiveDebugVariables.cpp @@ -578,28 +578,23 @@ bool LDVImpl::collectDebugValues(MachineFunction &mf) { MachineBasicBlock *MBB = &*MFI; for (MachineBasicBlock::iterator MBBI = MBB->begin(), MBBE = MBB->end(); MBBI != MBBE;) { - // Use the first debug instruction in the sequence to get a SlotIndex - // for following consecutive debug instructions. - if (!MBBI->isDebugInstr()) { + if (!MBBI->isDebugValue()) { ++MBBI; continue; } - // Debug instructions has no slot index. Use the previous - // non-debug instruction's SlotIndex as its SlotIndex. + // DBG_VALUE has no slot index, use the previous instruction instead. SlotIndex Idx = MBBI == MBB->begin() ? LIS->getMBBStartIdx(MBB) : LIS->getInstructionIndex(*std::prev(MBBI)).getRegSlot(); - // Handle consecutive debug instructions with the same slot index. + // Handle consecutive DBG_VALUE instructions with the same slot index. do { - // Only handle DBG_VALUE in handleDebugValue(). Skip all other - // kinds of debug instructions. - if (MBBI->isDebugValue() && handleDebugValue(*MBBI, Idx)) { + if (handleDebugValue(*MBBI, Idx)) { MBBI = MBB->erase(MBBI); Changed = true; } else ++MBBI; - } while (MBBI != MBBE && MBBI->isDebugInstr()); + } while (MBBI != MBBE && MBBI->isDebugValue()); } } return Changed; diff --git a/llvm/test/DebugInfo/X86/live-debug-vars-index.mir b/llvm/test/DebugInfo/X86/live-debug-vars-index.mir deleted file mode 100644 index 8835e392fe9..00000000000 --- a/llvm/test/DebugInfo/X86/live-debug-vars-index.mir +++ /dev/null @@ -1,51 +0,0 @@ -# After adding new debug instruction for labels, it is possible to have -# debug instructions before DBG_VALUE. When querying DBG_VALUE's slot -# index using previous instruction and the previous instruction is debug -# instruction, it will trigger an assertion as using debug instruction -# to get slot index. This test is to emulate the case when DBG_VALUE's -# previous instruction is DBG_LABEL in LiveDebugVariables pass. -# -# RUN: llc -run-pass=livedebugvars -run-pass=virtregrewriter -o - %s | FileCheck %s - ---- | - define i32 @foo(i32 %a, i32 %b) !dbg !4 { - entry: - ret i32 0, !dbg !12 - } - - !llvm.dbg.cu = !{!0} - !llvm.module.flags = !{!3} - - !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) - !1 = !DIFile(filename: "debug-var-slot.c", directory: "./") - !2 = !{} - !3 = !{i32 2, !"Debug Info Version", i32 3} - !4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: true, unit: !0, retainedNodes: !2) - !5 = !DISubroutineType(types: !6) - !6 = !{!7, !7, !7} - !7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) - !8 = !DILabel(scope: !4, name: "top", file: !1, line: 4) - !9 = !DILocation(line: 4, column: 1, scope: !4) - !10 = !DILocalVariable(name: "local_var", scope: !4, file: !1, line: 7, type: !7) - !11 = !DILocation(line: 7, column: 1, scope: !4) - !12 = !DILocation(line: 8, column: 3, scope: !4) - !13 = !DILocalVariable(name: "local_var2", scope: !4, file: !1, line: 7, type: !7) - -... ---- -name: foo -tracksRegLiveness: true -body: | - bb.0: - - DBG_VALUE debug-use $esi, debug-use $noreg, !13, !DIExpression(), debug-location !11 - DBG_LABEL !8, debug-location !9 - DBG_VALUE debug-use $edi, debug-use $noreg, !10, !DIExpression(), debug-location !11 - RET 0, undef $eax, debug-location !12 -... - -# CHECK-LABEL: name: foo -# CHECK: bb.0: -# CHECK-DAG: DBG_LABEL -# CHECK-DAG: DBG_VALUE debug-use $esi -# CHECK-DAG: DBG_VALUE debug-use $edi |

