This patch updates the last few places in LLVM using findDbgValues that don't also collect and handle DPValue objects. This largely involves instcombine and mem2reg changes, and are largely mechanical, calling existing utilities on collections of DPValues instead of just DbgValuesInsts. A variety of tests have had RemoveDIs RUN lines added to them to cover these behaviours. We have some technical debt of the instcombine sinking code for DPValues not being implemented yet, so I've left FIXME stubs indicating that we intend to cover tests with RemoveDIs but haven't yet.
57 lines
2.8 KiB
LLVM
57 lines
2.8 KiB
LLVM
; Check for setting dbg.value as undef which depends on trivially dead instructions.
|
|
; RUN: opt -passes=instcombine -S -o - %s | FileCheck %s
|
|
; RUN: opt -passes=instcombine -S -o - %s --try-experimental-debuginfo-iterators | FileCheck %s
|
|
|
|
@a = common dso_local global i8 0, align 1, !dbg !0
|
|
@b = common dso_local global i8 0, align 1, !dbg !6
|
|
|
|
define dso_local i32 @main() !dbg !13 {
|
|
entry:
|
|
%0 = load i8, ptr @a, align 1, !dbg !17
|
|
%dec = add i8 %0, -1, !dbg !17
|
|
store i8 %dec, ptr @a, align 1, !dbg !17
|
|
;CHECK: call void @llvm.dbg.value(metadata i32 poison
|
|
;CHECK: call void @llvm.dbg.value(metadata i32 -8
|
|
;CHECK: call void @llvm.dbg.value(metadata i32 poison
|
|
%conv = sext i8 %dec to i32, !dbg !17
|
|
%udiv = udiv i32 %conv, 4, !dbg !17
|
|
call void @llvm.dbg.value(metadata i32 %udiv, metadata !18, metadata !DIExpression()), !dbg !19
|
|
call void @llvm.dbg.value(metadata i32 -8, metadata !20, metadata !DIExpression()), !dbg !19
|
|
call void @llvm.dbg.value(metadata i32 %udiv, metadata !20, metadata !DIExpression()), !dbg !19
|
|
store i8 0, ptr @b, align 1, !dbg !21
|
|
%cmp = icmp sgt i32 %conv, 0, !dbg !22
|
|
%conv1 = zext i1 %cmp to i32, !dbg !22
|
|
ret i32 0, !dbg !23
|
|
}
|
|
|
|
declare void @llvm.dbg.value(metadata, metadata, metadata)
|
|
|
|
!llvm.dbg.cu = !{!2}
|
|
!llvm.module.flags = !{!9, !10, !11}
|
|
!llvm.ident = !{!12}
|
|
|
|
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
|
|
!1 = distinct !DIGlobalVariable(name: "a", scope: !2, file: !3, line: 1, type: !8, isLocal: false, isDefinition: true)
|
|
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 10.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: None)
|
|
!3 = !DIFile(filename: "test", directory: "n")
|
|
!4 = !{}
|
|
!5 = !{!0, !6}
|
|
!6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
|
|
!7 = distinct !DIGlobalVariable(name: "b", scope: !2, file: !3, line: 1, type: !8, isLocal: false, isDefinition: true)
|
|
!8 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
|
|
!9 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!10 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!11 = !{i32 1, !"wchar_size", i32 4}
|
|
!12 = !{!"clang version 10.0.0"}
|
|
!13 = distinct !DISubprogram(name: "main", scope: !3, file: !3, line: 2, type: !14, scopeLine: 2, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !4)
|
|
!14 = !DISubroutineType(types: !15)
|
|
!15 = !{!16}
|
|
!16 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
|
!17 = !DILocation(line: 4, column: 11, scope: !13)
|
|
!18 = !DILocalVariable(name: "c", scope: !13, file: !3, line: 4, type: !16)
|
|
!19 = !DILocation(line: 0, scope: !13)
|
|
!20 = !DILocalVariable(name: "l_1240", scope: !13, file: !3, line: 6, type: !16)
|
|
!21 = !DILocation(line: 10, column: 10, scope: !13)
|
|
!22 = !DILocation(line: 10, column: 5, scope: !13)
|
|
!23 = !DILocation(line: 12, column: 1, scope: !13)
|