Files
clang-p2996/llvm/test/Transforms/InstCombine/pr43893.ll
Jeremy Morse 4424903156 [DebugInfo][RemoveDIs] Handle DPValues at remaining dbg.value using sites (#73788)
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.
2023-11-30 16:30:32 +00:00

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)