mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 21:46:05 +00:00

As the goal of LLVM reduce is to simplify the input file, it should not modify the debug info format - doing so by default would make it impossible to reduce an error that only occurs in the old format, for example (as briefly discussed at https://github.com/llvm/llvm-project/pull/86275). This patch uses the new "preserve debug info format" flag in llvm-reduce to prevent the input from being subtly transformed by llvm-reduce itself; this has no effect on any tools used for the interestingness check (i.e. if `opt` is invoked, it will still convert the reduced input to the new format by default), but simply ensures that the reduced file is strictly reduced rather than modified.
56 lines
2.6 KiB
LLVM
56 lines
2.6 KiB
LLVM
; RUN: llvm-reduce --abort-on-invalid-reduction --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
|
|
; RUN: FileCheck --check-prefixes=CHECK-FINAL --input-file=%t %s --implicit-check-not=#dbg_value
|
|
|
|
; RUN: opt < %s -S --write-experimental-debuginfo=false > %t.intrinsics.ll
|
|
; RUN: llvm-reduce --abort-on-invalid-reduction --test FileCheck --test-arg --check-prefixes=INTRINSIC-INTERESTINGNESS --test-arg %s --test-arg --input-file %t.intrinsics.ll -o %t
|
|
; RUN: FileCheck --check-prefixes=INTRINSIC-FINAL --input-file=%t %s --implicit-check-not=#dbg_value
|
|
|
|
; Test that we can, in RemoveDIs mode / DbgVariableRecords mode (where variable location
|
|
; information isn't an instruction), remove one variable location assignment
|
|
; but not another.
|
|
|
|
; CHECK-INTERESTINGNESS: #dbg_value(i32 %added,
|
|
; INTRINSIC-INTERESTINGNESS: llvm.dbg.value(metadata i32 %added,
|
|
|
|
; CHECK-FINAL: %added = add
|
|
; CHECK-FINAL-NEXT: #dbg_value(i32 %added,
|
|
; INTRINSIC-FINAL: %added = add
|
|
; INTRINSIC-FINAL-NEXT: llvm.dbg.value(metadata i32 %added,
|
|
|
|
define i32 @main() !dbg !7 {
|
|
entry:
|
|
%uninteresting1 = alloca i32, align 4
|
|
%interesting = alloca i32, align 4
|
|
%uninteresting2 = alloca i32, align 4
|
|
store i32 0, ptr %uninteresting1, align 4
|
|
store i32 0, ptr %interesting, align 4
|
|
%0 = load i32, ptr %interesting, align 4
|
|
%added = add nsw i32 %0, 1
|
|
#dbg_value(i32 %added, !13, !DIExpression(), !14)
|
|
store i32 %added, ptr %interesting, align 4
|
|
%alsoloaded = load i32, ptr %interesting, align 4
|
|
#dbg_value(i32 %alsoloaded, !13, !DIExpression(), !14)
|
|
store i32 %alsoloaded, ptr %uninteresting2, align 4
|
|
ret i32 0
|
|
}
|
|
|
|
!llvm.dbg.cu = !{!0}
|
|
!llvm.module.flags = !{!2, !3, !4, !5, !6}
|
|
|
|
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 14.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
|
|
!1 = !DIFile(filename: "/tmp/a.c", directory: "/")
|
|
!2 = !{i32 7, !"Dwarf Version", i32 4}
|
|
!3 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!4 = !{i32 1, !"wchar_size", i32 4}
|
|
!5 = !{i32 7, !"uwtable", i32 1}
|
|
!6 = !{i32 7, !"frame-pointer", i32 2}
|
|
!7 = distinct !DISubprogram(name: "main", scope: !8, file: !8, line: 1, type: !9, scopeLine: 1, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !12)
|
|
!8 = !DIFile(filename: "/tmp/a.c", directory: "")
|
|
!9 = !DISubroutineType(types: !10)
|
|
!10 = !{!11}
|
|
!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
|
!12 = !{}
|
|
!13 = !DILocalVariable(name: "a", scope: !7, file: !8, line: 2, type: !11)
|
|
!14 = !DILocation(line: 2, column: 7, scope: !7)
|
|
|