File: out-of-scope-blocks.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 (151 lines) | stat: -rw-r--r-- 7,803 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
# RUN: llc %s -o - -run-pass=livedebugvalues -march=x86-64 \
# RUN:     -experimental-debug-variable-locations=true \
# RUN: | FileCheck %s
#
## This test used to crash InstrRefBasedLDV, due to fragment information going
## missing; test for that, and also check what happens when we have assignments
## outside of lexical scope. In the IR below, "_First" is only in scope in the
## entry block, but is assigned in every block. Under current behaviour, that
## means that InstrRefBasedLDV will propagate its location through all blocks.
#
# CHECK:       ![[FIRSTVAR:[0-9]+]] = !DILocalVariable(name: "_First",
#
# CHECK-LABEL: bb.0.entry:
# CHECK:       DBG_VALUE $rbx, $noreg, ![[FIRSTVAR]],
# CHECK-SAME:        !DIExpression(DW_OP_LLVM_fragment, 64, 64)
#
# CHECK-LABEL: bb.1.if.then.i.i.i.i.i:
# CHECK:       DBG_VALUE $rbx, $noreg, ![[FIRSTVAR]],
# CHECK-SAME:        !DIExpression(DW_OP_LLVM_fragment, 64, 64)
# CHECK:       DBG_INSTR_REF {{.*}} ![[FIRSTVAR]],
# CHECK:       DBG_VALUE $rbx, $noreg, ![[FIRSTVAR]],
# CHECK-SAME:        !DIExpression(DW_OP_LLVM_fragment, 64, 64)

# CHECK-LABEL: bb.2._Z17do_insert_cv_testI5_TreeEvv.exit:
# CHECK:       DBG_VALUE $rbx, $noreg, ![[FIRSTVAR]],
# CHECK-SAME:        !DIExpression(DW_OP_LLVM_fragment, 64, 64)
# CHECK:       DBG_INSTR_REF {{.*}} ![[FIRSTVAR]],
# CHECK:       DBG_VALUE $rbx, $noreg, ![[FIRSTVAR]],
# CHECK-SAME:        !DIExpression(DW_OP_LLVM_fragment, 64, 64)

--- |
  source_filename = "reduced.ll"
  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
  
  %class._Tree = type { i8 }
  %class._Tree_const_iterator = type { %class._Tree_unchecked_const_iterator }
  %class._Tree_unchecked_const_iterator = type { %struct._Iterator_base0, i32* }
  %struct._Iterator_base0 = type { i32 }
  
  define i32 @main({ i32, i32* } %call.i) !dbg !6 {
  entry:
    call void @llvm.dbg.value(metadata i32 2, metadata !10, metadata !DIExpression()), !dbg !12
    %call.i1 = call { i32, i32* } undef(%class._Tree* null)
    %0 = extractvalue { i32, i32* } %call.i, 1
    call void @llvm.dbg.value(metadata i32* %0, metadata !13, metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg !15
    %call.i.i.i.i.i = call i8 undef(i32* null), !dbg !15
    br i1 undef, label %_Z17do_insert_cv_testI5_TreeEvv.exit, label %if.then.i.i.i.i.i
  
  if.then.i.i.i.i.i:
    %call3.i.i.i.i.i = call i32* undef(i32* null)
    call void @llvm.dbg.value(metadata i32* %call3.i.i.i.i.i, metadata !13, metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg !15
    br label %_Z17do_insert_cv_testI5_TreeEvv.exit
  
  _Z17do_insert_cv_testI5_TreeEvv.exit:
    %_First.sroa.2.0.i.i = phi i32* [ %0, %entry ], [ %call3.i.i.i.i.i, %if.then.i.i.i.i.i ]
    call void @llvm.dbg.value(metadata i32* %_First.sroa.2.0.i.i, metadata !13, metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg !15
    call void undef(%class._Tree_const_iterator* null, i32 0, i32* %_First.sroa.2.0.i.i), !dbg !16
    ret i32 0
  }
  
  declare void @llvm.dbg.value(metadata, metadata, metadata)
  
  !llvm.dbg.cu = !{!0}
  !llvm.module.flags = !{!2, !3, !4, !5}
  
  !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 14.0.0 (git@github.com:llvm/llvm-project ffb249520766d4e2ca120c09dae7afa3d64ef81d)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
  !1 = !DIFile(filename: "toolchain10279.cpp", directory: "/home/jmorse")
  !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 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 52, type: !7, scopeLine: 52, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
  !7 = !DISubroutineType(types: !8)
  !8 = !{!9}
  !9 = !DIBasicType(name: "int", size: 128, encoding: DW_ATE_signed)
  !10 = !DILocalVariable(name: "v1", scope: !11, file: !1, line: 47, type: !9)
  !11 = distinct !DILexicalBlock(scope: !6)
  !12 = !DILocation(line: 0, scope: !11)
  !13 = !DILocalVariable(name: "_First", arg: 1, scope: !14, file: !1, line: 11, type: !9)
  !14 = distinct !DILexicalBlock(scope: !6)
  !15 = !DILocation(line: 0, scope: !14)
  !16 = !DILocation(line: 50, column: 11, scope: !11)

...
---
name:            main
alignment:       16
tracksRegLiveness: true
liveins:
  - { 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: $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
    DBG_PHI $rsi, 2
    $rbx = MOV64rr $rsi
    DBG_VALUE 2, $noreg, !10, !DIExpression(), debug-location !12
    renamable $r14d = XOR32rr undef $r14d, undef $r14d, implicit-def dead $eflags, implicit-def $r14
    dead $edi = XOR32rr undef $edi, undef $edi, implicit-def dead $eflags, implicit-def $rdi
    CALL64r undef renamable $rax, csr_64, implicit $rsp, implicit $ssp, implicit killed $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def dead $eax, implicit-def dead $rdx
    DBG_INSTR_REF 2, 0, !13, !DIExpression(DW_OP_LLVM_fragment, 64, 64), debug-location !15
    dead $edi = XOR32rr undef $edi, undef $edi, implicit-def dead $eflags, implicit-def $rdi, debug-location !15
    CALL64r undef renamable $rax, csr_64, implicit $rsp, implicit $ssp, implicit killed $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def dead $al, debug-location !15
    TEST8rr renamable $r14b, renamable $r14b, implicit-def $eflags, implicit killed $r14
    JCC_1 %bb.2, 5, implicit $eflags
  
  bb.1.if.then.i.i.i.i.i:
    dead $edi = XOR32rr undef $edi, undef $edi, implicit-def dead $eflags, implicit-def $rdi
    CALL64r undef renamable $rax, csr_64, implicit $rsp, implicit $ssp, implicit killed $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $rax, debug-instr-number 3
    $rbx = MOV64rr killed $rax
    DBG_INSTR_REF 3, 7, !13, !DIExpression(DW_OP_LLVM_fragment, 64, 64), debug-location !15
  
  bb.2._Z17do_insert_cv_testI5_TreeEvv.exit:
    liveins: $rbx
  
    DBG_PHI $rbx, 1
    DBG_INSTR_REF 1, 0, !13, !DIExpression(DW_OP_LLVM_fragment, 64, 64), debug-location !15
    dead $edi = XOR32rr undef $edi, undef $edi, implicit-def dead $eflags, implicit-def $rdi, debug-location !16
    $esi = XOR32rr undef $esi, undef $esi, implicit-def dead $eflags, debug-location !16
    $rdx = MOV64rr killed $rbx, debug-location !16
    CALL64r undef renamable $rax, csr_64, implicit $rsp, implicit $ssp, implicit killed $rdi, implicit $esi, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, debug-location !16
    $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags
    $rsp = frame-destroy ADD64ri8 $rsp, 8, implicit-def dead $eflags
    CFI_INSTRUCTION def_cfa_offset 24
    $rbx = frame-destroy POP64r implicit-def $rsp, implicit $rsp
    CFI_INSTRUCTION def_cfa_offset 16
    $r14 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
    CFI_INSTRUCTION def_cfa_offset 8
    RET64 killed $eax

...