mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-27 14:19:01 +00:00
[DebugInfo] Debug locations for constant SD nodes
Several updates for [DebugInfo] Add debug locations to constant SD nodes (r235989).
Includes:
* re-enabling the change (disabled recently);
* missing change for FP constants;
* resetting debug location of constant node if it's used more than at one place
to prevent emission of wrong locations in case of coalesced constants;
* a couple of additional tests.
Now all look ups in CSEMap are wrapped by additional method.
Comment in D9084 suggests that debug locations aren't useful for "target constants",
so there might be one more change related to this API (namely, dropping debug
locations for getTarget*Constant methods).
Differential Revision: http://reviews.llvm.org/D9604
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237237 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
; RUN: llc -filetype=asm %s -o - | FileCheck %s
|
||||
; XFAIL: *
|
||||
; disabled until constant coalescing is resolved
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7--linux-gnueabihf"
|
||||
|
||||
54
test/DebugInfo/ARM/multiple-constant-uses-drops-dbgloc.ll
Normal file
54
test/DebugInfo/ARM/multiple-constant-uses-drops-dbgloc.ll
Normal file
@@ -0,0 +1,54 @@
|
||||
; RUN: llc -filetype=asm -asm-verbose=0 < %s | FileCheck %s
|
||||
|
||||
; char ch;
|
||||
; int b;
|
||||
;
|
||||
; void proc (void)
|
||||
; {
|
||||
; ch = 'A';
|
||||
; b = 0; // <== this should have correct location
|
||||
; }
|
||||
|
||||
; CHECK: .loc 1 7 7
|
||||
; CHECK: mov r{{[0-9]}}, #0
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7--linux-gnueabihf"
|
||||
|
||||
@ch = common global i8 0, align 1
|
||||
@b = common global i32 0, align 4
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define void @proc() #0 {
|
||||
entry:
|
||||
store i8 65, i8* @ch, align 1, !dbg !17
|
||||
store i32 0, i32* @b, align 4, !dbg !18
|
||||
ret void, !dbg !19
|
||||
}
|
||||
|
||||
attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="cortex-a8" "target-features"="+neon,+vfp3" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!12, !13, !14, !15}
|
||||
!llvm.ident = !{!16}
|
||||
|
||||
!0 = !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "", isOptimized: false, subprograms: !3)
|
||||
!1 = !DIFile(filename: "test.c", directory: "/home/user/clang/build")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DISubprogram(name: "proc", scope: !1, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: false, function: void ()* @proc, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null}
|
||||
!7 = !{!8, !10}
|
||||
!8 = !DIGlobalVariable(name: "ch", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, variable: i8* @ch)
|
||||
!9 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
|
||||
!10 = !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 2, type: !11, isLocal: false, isDefinition: true, variable: i32* @b)
|
||||
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!12 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!13 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!14 = !{i32 1, !"wchar_size", i32 4}
|
||||
!15 = !{i32 1, !"min_enum_size", i32 4}
|
||||
!16 = !{!"clang version 3.7.0 (http://llvm.org/git/clang.git 9b0abb9df531ef7928c8182120e1869affca17d5) (http://llvm.org/git/llvm.git b1e759524dd94f7ce1e24935daed8383927e96c1)"}
|
||||
!17 = !DILocation(line: 6, column: 8, scope: !4)
|
||||
!18 = !DILocation(line: 7, column: 7, scope: !4)
|
||||
!19 = !DILocation(line: 8, column: 1, scope: !4)
|
||||
72
test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll
Normal file
72
test/DebugInfo/ARM/single-constant-use-preserves-dbgloc.ll
Normal file
@@ -0,0 +1,72 @@
|
||||
; RUN: llc -filetype=asm -asm-verbose=0 < %s | FileCheck %s
|
||||
|
||||
; int main()
|
||||
; {
|
||||
; int x = 0;
|
||||
; if (x > 0)
|
||||
; return x;
|
||||
; x = -1; // <== this line should have correct debug location
|
||||
; return -1;
|
||||
; }
|
||||
|
||||
; CHECK: .loc 1 6 7
|
||||
; CHECK: mvn
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7--linux-gnueabihf"
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%retval = alloca i32, align 4
|
||||
%x = alloca i32, align 4
|
||||
store i32 0, i32* %retval
|
||||
call void @llvm.dbg.declare(metadata i32* %x, metadata !10, metadata !11), !dbg !12
|
||||
store i32 0, i32* %x, align 4, !dbg !12
|
||||
%0 = load i32, i32* %x, align 4, !dbg !13
|
||||
%cmp = icmp sgt i32 %0, 0, !dbg !15
|
||||
br i1 %cmp, label %if.then, label %if.end, !dbg !16
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%1 = load i32, i32* %x, align 4, !dbg !17
|
||||
store i32 %1, i32* %retval, !dbg !18
|
||||
br label %return, !dbg !18
|
||||
|
||||
if.end: ; preds = %entry
|
||||
store i32 -1, i32* %x, align 4, !dbg !19
|
||||
store i32 -1, i32* %retval, !dbg !20
|
||||
br label %return, !dbg !20
|
||||
|
||||
return: ; preds = %if.end, %if.then
|
||||
%2 = load i32, i32* %retval, !dbg !21
|
||||
ret i32 %2, !dbg !21
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind readnone
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!8, !9}
|
||||
|
||||
!0 = !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "", isOptimized: false, subprograms: !3)
|
||||
!1 = !DIFile(filename: "test.c", directory: "/home/user/clang/build")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DISubprogram(name: "main", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, function: i32 ()* @main, variables: !2)
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{!7}
|
||||
!7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!8 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!9 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!10 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "x", scope: !4, file: !1, line: 3, type: !7)
|
||||
!11 = !DIExpression()
|
||||
!12 = !DILocation(line: 3, column: 9, scope: !4)
|
||||
!13 = !DILocation(line: 4, column: 9, scope: !14)
|
||||
!14 = distinct !DILexicalBlock(scope: !4, file: !1, line: 4, column: 9)
|
||||
!15 = !DILocation(line: 4, column: 11, scope: !14)
|
||||
!16 = !DILocation(line: 4, column: 9, scope: !4)
|
||||
!17 = !DILocation(line: 5, column: 13, scope: !14)
|
||||
!18 = !DILocation(line: 5, column: 9, scope: !14)
|
||||
!19 = !DILocation(line: 6, column: 7, scope: !4)
|
||||
!20 = !DILocation(line: 7, column: 5, scope: !4)
|
||||
!21 = !DILocation(line: 8, column: 1, scope: !4)
|
||||
Reference in New Issue
Block a user