File: dbg-phis-in-ldv.mir

package info (click to toggle)
llvm-toolchain-14 1%3A14.0.6-12
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,496,180 kB
  • sloc: cpp: 5,593,972; ansic: 986,872; asm: 585,869; python: 184,223; objc: 72,530; lisp: 31,119; f90: 27,793; javascript: 9,780; pascal: 9,762; sh: 9,482; perl: 7,468; ml: 5,432; awk: 3,523; makefile: 2,538; xml: 953; cs: 573; fortran: 567
file content (162 lines) | stat: -rw-r--r-- 7,244 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# RUN: llc %s -o - -mtriple=x86_64-unknown-unknown \
# RUN:    -experimental-debug-variable-locations -run-pass=livedebugvalues\
# RUN:    | FileCheck %s
#
# Test that a DBG_INSTR_REF that refers to a DBG_PHI, will be translated into a
# DBG_VALUE of the value read at that DBG_PHI. Same original code as
# phi-coalescing.mir.
# 
--- |
  ; ModuleID = 'phi-coalescing.mir'
  source_filename = "test.c"
  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
  target triple = "x86_64-unknown-linux-gnu"
  
  define dso_local i32 @foo(i64 %bar, i64 %baz) !dbg !7 {
  entry:
    call void @llvm.dbg.value(metadata i64 %bar, metadata !12, metadata !DIExpression()), !dbg !13
    call void @llvm.dbg.value(metadata i64 %baz, metadata !14, metadata !DIExpression()), !dbg !13
    call void @ext(i64 %bar), !dbg !15
    %add = add nsw i64 %bar, 12, !dbg !16
    call void @llvm.dbg.value(metadata i64 %add, metadata !12, metadata !DIExpression()), !dbg !13
    call void @ext(i64 %add), !dbg !17
    %call = call i64 @getlong(), !dbg !18
    %tobool = icmp ne i64 %call, 0, !dbg !18
    br i1 %tobool, label %if.then, label %if.end, !dbg !20
  
  if.then:                                          ; preds = %entry
    %add1 = add nsw i64 %add, 1, !dbg !21
    call void @llvm.dbg.value(metadata i64 %add1, metadata !12, metadata !DIExpression()), !dbg !13
    br label %if.end, !dbg !22
  
  if.end:                                           ; preds = %if.then, %entry
    %bar.addr.0 = phi i64 [ %add1, %if.then ], [ %add, %entry ], !dbg !13
    call void @llvm.dbg.value(metadata i64 %bar.addr.0, metadata !12, metadata !DIExpression()), !dbg !13
    %add2 = add nsw i64 %bar.addr.0, %baz, !dbg !23
    call void @llvm.dbg.value(metadata i64 %add2, metadata !12, metadata !DIExpression()), !dbg !13
    call void @ext(i64 %add2), !dbg !24
    %conv = trunc i64 %add2 to i32, !dbg !25
    ret i32 %conv, !dbg !26
  }
  
  ; Function Attrs: nounwind readnone speculatable willreturn
  declare void @llvm.dbg.declare(metadata, metadata, metadata)
  
  declare dso_local void @ext(i64)
  
  declare dso_local i64 @getlong()
  
  ; Function Attrs: nounwind readnone speculatable willreturn
  declare void @llvm.dbg.value(metadata, metadata, metadata)
  
  !llvm.dbg.cu = !{!0}
  !llvm.module.flags = !{!3, !4, !5}
  !llvm.ident = !{!6}
  
  !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
  !1 = !DIFile(filename: "test.c", directory: "/tmp/out.c")
  !2 = !{}
  !3 = !{i32 7, !"Dwarf Version", i32 4}
  !4 = !{i32 2, !"Debug Info Version", i32 3}
  !5 = !{i32 1, !"wchar_size", i32 4}
  !6 = !{!""}
  !7 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, type: !8, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
  !8 = !DISubroutineType(types: !9)
  !9 = !{!10, !11, !11}
  !10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
  !11 = !DIBasicType(name: "long int", size: 64, encoding: DW_ATE_signed)
  !12 = !DILocalVariable(name: "bar", arg: 1, scope: !7, file: !1, line: 3, type: !11)
  !13 = !DILocation(line: 0, scope: !7)
  !14 = !DILocalVariable(name: "baz", arg: 2, scope: !7, file: !1, line: 3, type: !11)
  !15 = !DILocation(line: 4, column: 3, scope: !7)
  !16 = !DILocation(line: 5, column: 7, scope: !7)
  !17 = !DILocation(line: 6, column: 3, scope: !7)
  !18 = !DILocation(line: 8, column: 7, scope: !19)
  !19 = distinct !DILexicalBlock(scope: !7, file: !1, line: 8, column: 7)
  !20 = !DILocation(line: 8, column: 7, scope: !7)
  !21 = !DILocation(line: 9, column: 9, scope: !19)
  !22 = !DILocation(line: 9, column: 5, scope: !19)
  !23 = !DILocation(line: 11, column: 7, scope: !7)
  !24 = !DILocation(line: 12, column: 3, scope: !7)
  !25 = !DILocation(line: 13, column: 10, scope: !7)
  !26 = !DILocation(line: 13, column: 3, scope: !7)

...
---
name:            foo
alignment:       16
tracksRegLiveness: true
liveins:
  - { reg: '$rdi' }
  - { reg: '$rsi' }
frameInfo:
  stackSize:       24
  offsetAdjustment: -24
  maxAlignment:    1
  adjustsStack:    true
  hasCalls:        true
  maxCallFrameSize: 0
  cvBytesOfCalleeSavedRegisters: 16
fixedStack:
  - { id: 0, type: spill-slot, offset: -24, size: 8, alignment: 8, callee-saved-register: '$rbx' }
  - { id: 1, type: spill-slot, offset: -16, size: 8, alignment: 16, callee-saved-register: '$r14' }
machineFunctionInfo: {}
body:             |
  bb.0.entry:
    liveins: $rdi, $rsi, $r14, $rbx
  
    frame-setup PUSH64r killed $r14, implicit-def $rsp, implicit $rsp
    CFI_INSTRUCTION def_cfa_offset 16
    frame-setup PUSH64r killed $rbx, implicit-def $rsp, implicit $rsp
    CFI_INSTRUCTION def_cfa_offset 24
    frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp
    CFI_INSTRUCTION def_cfa_offset 32
    CFI_INSTRUCTION offset $rbx, -24
    CFI_INSTRUCTION offset $r14, -16
    $r14 = MOV64rr $rsi
    $rbx = MOV64rr $rdi
    CALL64pcrel32 @ext, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, debug-location !15
    renamable $rbx = ADD64ri32 killed renamable $rbx, 12, implicit-def $eflags, debug-location !16
    $rdi = MOV64rr $rbx, debug-location !17
    CALL64pcrel32 @ext, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, debug-location !17
    CALL64pcrel32 @getlong, csr_64, implicit $rsp, implicit $ssp, implicit-def $rax, debug-location !18
    CMP64ri8 killed renamable $rax, 0, implicit-def $eflags, debug-location !18
    JCC_1 %bb.2, 4, implicit $eflags, debug-location !20
  
  bb.1.if.then:
    liveins: $rbx, $r14
  
    renamable $rbx = ADD64ri32 killed renamable $rbx, 1, implicit-def $eflags, debug-location !21
  
  bb.2.if.end:
    liveins: $rbx, $r14
  
    DBG_PHI $rbx, 1
    $rax = COPY $rbx
    $rbx = MOV64ri 0
    DBG_INSTR_REF 1, 0, !12, !DIExpression(), debug-location !13

    ; This sequence should mark the contents of rbx on block entry as being the
    ; value for the variable at this DBG_INSTR_REF. We've force it to be in
    ; $rax now, so we should see a DBG_VALUE for rax:
    ; CHECK:      DBG_PHI $rbx, 1
    ; CHECK-NEXT: $rax = COPY $rbx
    ; CHECK-NEXT: $rbx = MOV64ri 0
    ; CHECK-NEXT: DBG_INSTR_REF 1, 0
    ; CHECK-NEXT: DBG_VALUE $rax, $noreg

    $rbx = COPY $rax
    renamable $rbx = ADD64rr killed renamable $rbx, killed renamable $r14, implicit-def $eflags, debug-location !23
    DBG_VALUE $rbx, $noreg, !12, !DIExpression(), debug-location !13
    $rdi = MOV64rr $rbx, debug-location !24
    CALL64pcrel32 @ext, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, debug-location !24
    $eax = MOV32rr $ebx, implicit killed $rbx, debug-location !26
    $rsp = frame-destroy ADD64ri8 $rsp, 8, implicit-def dead $eflags, debug-location !26
    CFI_INSTRUCTION def_cfa_offset 24, debug-location !26
    $rbx = frame-destroy POP64r implicit-def $rsp, implicit $rsp, debug-location !26
    CFI_INSTRUCTION def_cfa_offset 16, debug-location !26
    $r14 = frame-destroy POP64r implicit-def $rsp, implicit $rsp, debug-location !26
    CFI_INSTRUCTION def_cfa_offset 8, debug-location !26
    RET64 implicit $eax, debug-location !26

...