[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / DebugInfo / MIR / X86 / live-debug-values-fragments.mir
blobd0c782f1a34f2718ea017af2439b87eb98320a5c
1 # RUN: llc %s -o - -run-pass=livedebugvalues | FileCheck %s
3 # The first func tests that, for two independent variable fragments defined in
4 # blocks 1 and 2, _both_ their locations are propagated into the exit block.
5 # LiveDebugValues previously ignored fragments and only propagated the last
6 # variable location seen.
8 # The second func tests that overlapping variable fragments are handled
9 # correctly -- that the redefinition of a particular fragment also clobbers
10 # any overlaps. The dbg value of $cx in block one should not be propagated to
11 # block two, because an overlapping dbg value inst has been encountered.
13 # The third function checks that DBG_VALUEs without fragments are seen as
14 # overlapping any DBG_VALUE with a fragment.
16 # CHECK-LABEL: foo
17 # CHECK-LABEL: bb.3.bb3:
18 # CHECK:      DBG_VALUE $ebx, $noreg, !{{[0-9]+}},
19 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 32, 32)
20 # CHECK-NEXT: DBG_VALUE $eax, $noreg, !{{[0-9]+}},
21 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 0, 32)
22 # CHECK-NEXT: XOR32rr
23 # CHECK-NEXT: RETQ
25 # CHECK-LABEL: bar
26 # CHECK-LABEL: bb.0.entry:
27 # CHECK:      DBG_VALUE $cx, $noreg, !{{[0-9]+}},
28 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 0, 16)
30 # CHECK-LABEL: bb.1.bb1:
31 # CHECK:      DBG_VALUE $cx, $noreg, !{{[0-9]+}},
32 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 0, 16)
33 # CHECK-NEXT: MOV32rr
34 # CHECK-NEXT: DBG_VALUE $ax, $noreg, !{{[0-9]+}},
35 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 8, 16)
36 # CHECK-NEXT: JMP_1
38 # CHECK-LABEL: bb.2.bb2:
39 # CHECK-NOT:  DBG_VALUE
40 # CHECK:      DBG_VALUE $ax, $noreg, !{{[0-9]+}},
41 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 8, 16)
42 # CHECK-NEXT: MOV32rr
43 # CHECK-NEXT: ADD32ri8
44 # CHECK-NEXT: DBG_VALUE $ebx, $noreg, !{{[0-9]+}},
45 # CHECK-SAME                  !DIExpression(DW_OP_LLVM_fragment, 32, 32)
46 # CHECK-NEXT: JMP_1
48 # CHECK-LABEL: bb.3.bb3:
49 # CHECK:      DBG_VALUE $ebx, $noreg, !{{[0-9]+}},
50 # CHECK-SAME                  !DIExpression(DW_OP_LLVM_fragment, 32, 32)
51 # CHECK-NEXT: DBG_VALUE $ax, $noreg, !{{[0-9]+}},
52 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 8, 16)
53 # CHECK-NEXT: XOR32rr
54 # CHECK-NEXT: RETQ
56 # CHECK-LABEL: baz
57 # CHECK-LABEL: bb.0.entry:
58 # CHECK:      DBG_VALUE $cx,  $noreg, !{{[0-9]+}},
59 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 0, 16)
60 # CHECK-NEXT: JMP_1 %bb.1
62 # CHECK-LABEL: bb.1.bb1:
63 # CHECK:      DBG_VALUE $cx,  $noreg, !{{[0-9]+}},
64 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 0, 16)
65 # CHECK-NEXT: MOV32rr
66 # CHECK-NEXT: DBG_VALUE $rdi, $noreg, !{{[0-9]+}}, !DIExpression()
67 # CHECK-NEXT: JMP_1 %bb.2
69 # CHECK-LABEL: bb.2.bb2:
70 # CHECK-NOT:  DBG_VALUE $cx
71 # CHECK:      DBG_VALUE $rdi, $noreg, !{{[0-9]+}}, !DIExpression()
72 # CHECK-NEXT: MOV32rr
73 # CHECK-NEXT: ADD32ri8
74 # CHECK-NEXT: DBG_VALUE $ebx, $noreg, !{{[0-9]+}},
75 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 32, 32)
76 # CHECK-NEXT: JMP_1 %bb.3
78 # CHECK-LABEL: bb.3.bb3:
79 # CHECK-NOT:  DBG_VALUE $rdi
80 # CHECK-NOT:  DBG_VALUE $cx
81 # CHECK:      DBG_VALUE $ebx, $noreg, !{{[0-9]+}},
82 # CHECK-SAME:                 !DIExpression(DW_OP_LLVM_fragment, 32, 32)
83 # CHECK-NEXT: XOR32rr
84 # CHECK-NEXT: RETQ
86 --- |
87   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
88   target triple = "x86_64-unknown-linux-gnu"
89   
90   define i32 @foo(i32* %bees, i32* %output) !dbg !4 {
91   entry:
92     br label %bb1
93   bb1:
94     br label %bb2
95   bb2:
96     br label %bb3
97   bb3:
98     ret i32 0
99   }
101   define i32 @bar(i32* %bees, i32* %output) !dbg !40 {
102   entry:
103     br label %bb1
104   bb1:
105     br label %bb2
106   bb2:
107     br label %bb3
108   bb3:
109     ret i32 0
110   }
112   define i32 @baz(i32* %bees, i32* %output) !dbg !80 {
113   entry:
114     br label %bb1
115   bb1:
116     br label %bb2
117   bb2:
118     br label %bb3
119   bb3:
120     ret i32 0
121   }
123   !llvm.module.flags = !{!0, !100}
124   !llvm.dbg.cu = !{!1}
125   
126   !100 = !{i32 2, !"Dwarf Version", i32 4}
127   !0 = !{i32 2, !"Debug Info Version", i32 3}
128   !1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "beards", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
129   !2 = !DIFile(filename: "bees.cpp", directory: ".")
130   !3 = !DILocalVariable(name: "flannel", scope: !4, file: !2, line: 1, type: !16)
131   !4 = distinct !DISubprogram(name: "nope", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !13, type: !14, isDefinition: true)
132   !8 = !DILocation(line: 4, scope: !4)
133   !13 = !{!3}
134   !14 = !DISubroutineType(types: !15)
135   !15 = !{!16}
136   !16 = !DIBasicType(name: "looong", size: 64, align: 64, encoding: DW_ATE_signed)
137   !40 = distinct !DISubprogram(name: "toast", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !53, type: !14, isDefinition: true)
138   !43 = !DILocalVariable(name: "charm", scope: !40, file: !2, line: 1, type: !16)
139   !48 = !DILocation(line: 4, scope: !40)
140   !53 = !{!43}
141   !80 = distinct !DISubprogram(name: "mort", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !93, type: !14, isDefinition: true)
142   !83 = !DILocalVariable(name: "bodkin", scope: !80, file: !2, line: 1, type: !16)
143   !88 = !DILocation(line: 4, scope: !80)
144   !93 = !{!83}
148 name:            foo
149 tracksRegLiveness: true
150 registers:       []
151 liveins:         
152   - { reg: '$rdi', virtual-reg: '' }
153 body:             |
154   bb.0.entry:
155     successors: %bb.1
156     liveins: $rdi
157   
158     $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def $eflags
159     JMP_1 %bb.1
160   
161   bb.1.bb1 (align 4):
162     successors: %bb.2
163     liveins: $ecx, $rdi
164   
165     $eax = MOV32rr killed $ecx, implicit-def $rax
166     DBG_VALUE $eax, $noreg, !3, !DIExpression(DW_OP_LLVM_fragment, 0, 32), debug-location !8
167     JMP_1 %bb.2
168   
169   bb.2.bb2:
170     successors: %bb.3
171     liveins: $eax
172   
173     $ebx = MOV32rr $eax
174     $ebx = ADD32ri8 $ebx, 3, implicit-def dead $eflags, implicit killed $rbx, implicit-def $rbx
175     DBG_VALUE $ebx, $noreg, !3, !DIExpression(DW_OP_LLVM_fragment, 32, 32), debug-location !8
176     JMP_1 %bb.3
178   bb.3.bb3:
179     liveins: $eax, $ebx
180     $eax = XOR32rr killed $eax, killed $ebx, implicit-def $eflags
181     RETQ $eax, debug-location !8
185 name:            bar
186 tracksRegLiveness: true
187 registers:       []
188 liveins:         
189   - { reg: '$rdi', virtual-reg: '' }
190 body:             |
191   bb.0.entry:
192     successors: %bb.1
193     liveins: $rdi
194   
195     $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def $eflags
196     DBG_VALUE $cx, $noreg, !43, !DIExpression(DW_OP_LLVM_fragment, 0, 16), debug-location !48
197     JMP_1 %bb.1
198   
199   bb.1.bb1:
200     successors: %bb.2
201     liveins: $ecx, $rdi
202   
203     $eax = MOV32rr killed $ecx, implicit-def $rax
204     DBG_VALUE $ax, $noreg, !43, !DIExpression(DW_OP_LLVM_fragment, 8, 16), debug-location !48
205     JMP_1 %bb.2
206   
207   bb.2.bb2:
208     successors: %bb.3
209     liveins: $eax
210   
211     $ebx = MOV32rr $eax
212     $ebx = ADD32ri8 $ebx, 3, implicit-def dead $eflags, implicit killed $rbx, implicit-def $rbx
213     DBG_VALUE $ebx, $noreg, !43, !DIExpression(DW_OP_LLVM_fragment, 32, 32), debug-location !48
214     JMP_1 %bb.3
216   bb.3.bb3:
217     liveins: $eax, $ebx
218     $eax = XOR32rr killed $eax, killed $ebx, implicit-def $eflags
219     RETQ $eax, debug-location !48
223 name:            baz
224 tracksRegLiveness: true
225 registers:       []
226 liveins:         
227   - { reg: '$rdi', virtual-reg: '' }
228 body:             |
229   bb.0.entry:
230     successors: %bb.1
231     liveins: $rdi
232   
233     $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def $eflags
234     DBG_VALUE $cx, $noreg, !83, !DIExpression(DW_OP_LLVM_fragment, 0, 16), debug-location !88
235     JMP_1 %bb.1
236   
237   bb.1.bb1:
238     successors: %bb.2
239     liveins: $ecx, $rdi
240   
241     $eax = MOV32rr killed $ecx, implicit-def $rax
242     DBG_VALUE $rdi, $noreg, !83, !DIExpression(), debug-location !88
243     JMP_1 %bb.2
244   
245   bb.2.bb2:
246     successors: %bb.3
247     liveins: $eax
248   
249     $ebx = MOV32rr $eax
250     $ebx = ADD32ri8 $ebx, 3, implicit-def dead $eflags, implicit killed $rbx, implicit-def $rbx
251     DBG_VALUE $ebx, $noreg, !83, !DIExpression(DW_OP_LLVM_fragment, 32, 32), debug-location !88
252     JMP_1 %bb.3
254   bb.3.bb3:
255     liveins: $eax, $ebx
256     $eax = XOR32rr killed $eax, killed $ebx, implicit-def $eflags
257     RETQ $eax, debug-location !88