mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 07:17:36 +00:00
DebugInfo: Remove 'inlinedAt:' field from MDLocalVariable
Remove 'inlinedAt:' from MDLocalVariable. Besides saving some memory (variables with it seem to be single largest `Metadata` contributer to memory usage right now in -g -flto builds), this stops optimization and backend passes from having to change local variables. The 'inlinedAt:' field was used by the backend in two ways: 1. To tell the backend whether and into what a variable was inlined. 2. To create a unique id for each inlined variable. Instead, rely on the 'inlinedAt:' field of the intrinsic's `!dbg` attachment, and change the DWARF backend to use a typedef called `InlinedVariable` which is `std::pair<MDLocalVariable*, MDLocation*>`. This `DebugLoc` is already passed reliably through the backend (as verified by r234021). This commit removes the check from r234021, but I added a new check (that will survive) in r235048, and changed the `DIBuilder` API in r235041 to require a `!dbg` attachment whose 'scope:` is in the same `MDSubprogram` as the variable's. If this breaks your out-of-tree testcases, perhaps the script I used (mdlocalvariable-drop-inlinedat.sh) will help; I'll attach it to PR22778 in a moment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235050 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -128,7 +128,7 @@ attributes #3 = { noreturn nounwind }
|
||||
!43 = !{!37, !37, i64 0}
|
||||
!44 = !{!38, !38, i64 0}
|
||||
!45 = !MDLocation(line: 9, scope: !15)
|
||||
!46 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 6, arg: 1, scope: !15, file: !16, type: !"_ZTS1A", inlinedAt: !47)
|
||||
!46 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 6, arg: 1, scope: !15, file: !16, type: !"_ZTS1A")
|
||||
!47 = distinct !MDLocation(line: 11, scope: !21)
|
||||
!48 = !MDExpression(DW_OP_bit_piece, 32, 160)
|
||||
!49 = !MDLocation(line: 6, scope: !15, inlinedAt: !47)
|
||||
|
||||
@@ -94,6 +94,6 @@ attributes #1 = { nounwind readnone }
|
||||
|
||||
; CHECK: [[FOO:![0-9]+]] = !MDSubprogram(name: "foo",
|
||||
; CHECK: [[BAR:![0-9]+]] = !MDSubprogram(name: "bar",
|
||||
; CHECK: [[m23]] = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", arg: 1, scope: [[FOO]]
|
||||
; CHECK: [[CALL_SITE:![0-9]+]] = distinct !MDLocation(line: 8, column: 14, scope: [[BAR]])
|
||||
; CHECK: [[m23]] = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", arg: 1, scope: [[FOO]],{{.*}} inlinedAt: [[CALL_SITE]])
|
||||
; CHECK: [[m24]] = !MDLocation(line: 1, column: 17, scope: [[FOO]], inlinedAt: [[CALL_SITE]])
|
||||
|
||||
@@ -41,15 +41,15 @@ return: ; preds = %entry
|
||||
!6 = !MDBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !MDLocation(line: 8, scope: !1)
|
||||
!8 = !MDLocation(line: 9, scope: !1)
|
||||
!9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 4, arg: 0, scope: !10, file: !2, type: !6, inlinedAt: !8)
|
||||
!9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 4, arg: 0, scope: !10, file: !2, type: !6)
|
||||
!10 = !MDSubprogram(name: "bar", linkageName: "bar", line: 4, isLocal: true, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 4, file: !20, scope: !2, type: !11)
|
||||
!11 = !MDSubroutineType(types: !12)
|
||||
!12 = !{null, !6, !13, !14}
|
||||
!13 = !MDBasicType(tag: DW_TAG_base_type, name: "long int", size: 64, align: 64, encoding: DW_ATE_signed)
|
||||
!14 = !MDDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, file: !20, scope: !2, baseType: null)
|
||||
!15 = !MDLocation(line: 4, scope: !10, inlinedAt: !8)
|
||||
!16 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 4, arg: 0, scope: !10, file: !2, type: !13, inlinedAt: !8)
|
||||
!17 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "z", line: 4, arg: 0, scope: !10, file: !2, type: !14, inlinedAt: !8)
|
||||
!16 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 4, arg: 0, scope: !10, file: !2, type: !13)
|
||||
!17 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "z", line: 4, arg: 0, scope: !10, file: !2, type: !14)
|
||||
!18 = !MDLocation(line: 5, scope: !10, inlinedAt: !8)
|
||||
!19 = !MDLocation(line: 10, scope: !1)
|
||||
!20 = !MDFile(filename: "bar.c", directory: "/tmp/")
|
||||
|
||||
Reference in New Issue
Block a user