Have basic_istream seekg, putback and unget first clear eofbit. Fixes http://llvm...
[lldb.git] / debuginfo-tests / dbg-declare2.ll
1 ; This test case checks handling of llvm.dbg.declare intrinsic during isel.
2 ; RUN: %clang -arch x86_64 -mllvm -fast-isel=false -mllvm -regalloc=default -g %s -c -o %t.o
3 ; RUN: %clang -arch x86_64 %t.o -o %t.out
4 ; RUN: %test_debuginfo %s %t.out
5 ; XFAIL: *
6 ; XTARGET: darwin
7
8 target triple = "x86_64-apple-darwin"
9 %struct.XYZ = type { i32, i32, i32, i32, i32 }
10
11 ; Check handling of llvm.dbg.declare for an argument referred through alloca, where
12 ; alloca dominates llvm.dbg.declare
13 define i32 @f1(i32 %i) nounwind ssp {
14 ; DEBUGGER: break f1
15 ; DEBUGGER: r
16 ; DEBUGGER: p i
17 ; CHECK: $1 = 42
18 entry:
19   %i.addr = alloca i32, align 4
20   store i32 %i, i32* %i.addr, align 4
21   call void @llvm.dbg.declare(metadata !{i32* %i.addr}, metadata !16), !dbg !17
22   %tmp = load i32* %i.addr, align 4, !dbg !18
23   ret i32 %tmp, !dbg !18
24 }
25
26 declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
27
28 ; Check handling of llvm.dbg.declare for an argument referred through alloca, where
29 ; llvm.dbg.declare dominates alloca.
30 define i32 @f2(i32 %i) nounwind ssp {
31 ; DEBUGGER: break f2
32 ; DEBUGGER: c
33 ; DEBUGGER: p i
34 ; CHECK: $2 = 43
35 entry:
36   call void @llvm.dbg.declare(metadata !{i32* %i.addr}, metadata !20), !dbg !21
37   %i.addr = alloca i32, align 4
38   store i32 %i, i32* %i.addr, align 4
39   %tmp = load i32* %i.addr, align 4, !dbg !22
40   ret i32 %tmp, !dbg !22
41 }
42
43 ; Check handling of an argument referred directly by llvm.dbg.declare where at least
44 ; one argument use dominates llvm.dbg.declare.
45 ; This is expected to not work because registor allocator has freedom to kill 'i'
46 ; after its last use.
47 define i32 @f3(i32 %i) nounwind ssp {
48 entry:
49   %i.addr = alloca i32, align 4
50   store i32 %i, i32* %i.addr, align 4
51   call void @llvm.dbg.declare(metadata !{i32 %i}, metadata !24), !dbg !25
52   %tmp = load i32* %i.addr, align 4, !dbg !26
53   ret i32 %tmp, !dbg !26
54 }
55
56 ; Check handling of an argument referred directly by llvm.dbg.declare where 
57 ; llvm.dbg.declare dominates all uses of argument.
58 define i32 @f4(i32 %i) nounwind ssp {
59 entry:
60   call void @llvm.dbg.declare(metadata !{i32 %i}, metadata !28), !dbg !29
61   ret i32 %i, !dbg !30
62 }
63
64 ; Check handling of an argument referred directly by llvm.dbg.declare where 
65 ; llvm.dbg.declare dominates all uses of argument in separate basic block.
66 define i32 @f5(i32 %i) nounwind ssp {
67 entry:
68   call void @llvm.dbg.declare(metadata !{i32 %i}, metadata !32), !dbg !33
69   br label %bbr
70 bbr:
71   ret i32 %i, !dbg !34
72 }
73
74 ; Check handling of an argument referred directly by llvm.dbg.declare where 
75 ; argument is not used.
76 define i32 @f6(i32 %i) nounwind ssp {
77 entry:
78   call void @llvm.dbg.declare(metadata !{i32 %i}, metadata !36), !dbg !37
79   ret i32 1, !dbg !38
80 }
81
82 ; Check handling of an byval argument referred directly by llvm.dbg.declare where 
83 ; argument is not used.
84 define i32 @f7(%struct.XYZ* byval %i) nounwind ssp {
85 ; DEBUGGER: break f7
86 ; DEBUGGER: c
87 ; DEBUGGER: p i.x
88 ; CHECK: $3 = 51
89 entry:
90   call void @llvm.dbg.declare(metadata !{%struct.XYZ* %i}, metadata !40), !dbg !48
91   ret i32 1, !dbg !49
92 }
93
94 ; Check handling of an byval argument referred directly by llvm.dbg.declare where 
95 ; argument use dominates llvm.dbg.declare.
96 define i32 @f8(%struct.XYZ* byval %i) nounwind ssp {
97 ; DEBUGGER: break f8
98 ; DEBUGGER: c
99 ; DEBUGGER: p i.x
100 ; CHECK: $4 = 51
101 entry:
102   %tmp = getelementptr inbounds %struct.XYZ* %i, i32 0, i32 1, !dbg !53
103   %tmp1 = load i32* %tmp, align 4, !dbg !53
104   call void @llvm.dbg.declare(metadata !{%struct.XYZ* %i}, metadata !51), !dbg !52
105   ret i32 %tmp1, !dbg !53
106 }
107
108 ; Check handling of an byval argument referred directly by llvm.dbg.declare where 
109 ; llvm.dbg.declare dominates all uses of argument.
110 define i32 @f9(%struct.XYZ* byval %i) nounwind ssp {
111 ; DEBUGGER: break f9
112 ; DEBUGGER: c
113 ; DEBUGGER: p i.x
114 ; CHECK: $5 = 51
115 entry:
116   call void @llvm.dbg.declare(metadata !{%struct.XYZ* %i}, metadata !55), !dbg !56
117   %tmp = getelementptr inbounds %struct.XYZ* %i, i32 0, i32 2, !dbg !57
118   %tmp1 = load i32* %tmp, align 4, !dbg !57
119   ret i32 %tmp1, !dbg !57
120 }
121
122 ; Check handling of an byval argument referred directly by llvm.dbg.declare where 
123 ; llvm.dbg.declare dominates all uses of argument in separate basic block.
124 define i32 @f10(%struct.XYZ* byval %i) nounwind ssp {
125 ; DEBUGGER: break f10
126 ; DEBUGGER: c
127 ; DEBUGGER: p i.x
128 ; CHECK: $6 = 51
129 entry:
130   call void @llvm.dbg.declare(metadata !{%struct.XYZ* %i}, metadata !59), !dbg !60
131   br label %bbr
132 bbr:
133   %tmp = getelementptr inbounds %struct.XYZ* %i, i32 0, i32 3, !dbg !61
134   %tmp1 = load i32* %tmp, align 4, !dbg !61
135   ret i32 %tmp1, !dbg !61
136 }
137
138 define i32 @main() nounwind ssp {
139 entry:
140   %retval = alloca i32, align 4
141   %abc = alloca %struct.XYZ, align 4
142   %agg.tmp = alloca %struct.XYZ, align 4
143   %agg.tmp13 = alloca %struct.XYZ, align 4
144   %agg.tmp17 = alloca %struct.XYZ, align 4
145   %agg.tmp21 = alloca %struct.XYZ, align 4
146   store i32 0, i32* %retval
147   %call = call i32 @f1(i32 42), !dbg !63
148   %call1 = call i32 @f2(i32 43), !dbg !65
149   %call2 = call i32 @f3(i32 44), !dbg !66
150   %call3 = call i32 @f4(i32 45), !dbg !67
151   %call4 = call i32 @f5(i32 46), !dbg !68
152   %call5 = call i32 @f6(i32 47), !dbg !69
153   call void @llvm.dbg.declare(metadata !{%struct.XYZ* %abc}, metadata !70), !dbg !71
154   %tmp = getelementptr inbounds %struct.XYZ* %abc, i32 0, i32 0, !dbg !72
155   store i32 51, i32* %tmp, align 4, !dbg !72
156   %tmp6 = getelementptr inbounds %struct.XYZ* %abc, i32 0, i32 1, !dbg !72
157   store i32 52, i32* %tmp6, align 4, !dbg !72
158   %tmp7 = getelementptr inbounds %struct.XYZ* %abc, i32 0, i32 2, !dbg !72
159   store i32 53, i32* %tmp7, align 4, !dbg !72
160   %tmp8 = getelementptr inbounds %struct.XYZ* %abc, i32 0, i32 3, !dbg !72
161   store i32 54, i32* %tmp8, align 4, !dbg !72
162   %tmp9 = getelementptr inbounds %struct.XYZ* %abc, i32 0, i32 4, !dbg !72
163   store i32 55, i32* %tmp9, align 4, !dbg !72
164   %tmp10 = bitcast %struct.XYZ* %agg.tmp to i8*, !dbg !73
165   %tmp11 = bitcast %struct.XYZ* %abc to i8*, !dbg !73
166   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp10, i8* %tmp11, i64 20, i32 4, i1 false), !dbg !73
167   %call12 = call i32 @f7(%struct.XYZ* byval %agg.tmp), !dbg !73
168   %tmp14 = bitcast %struct.XYZ* %agg.tmp13 to i8*, !dbg !74
169   %tmp15 = bitcast %struct.XYZ* %abc to i8*, !dbg !74
170   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp14, i8* %tmp15, i64 20, i32 4, i1 false), !dbg !74
171   %call16 = call i32 @f8(%struct.XYZ* byval %agg.tmp13), !dbg !74
172   %tmp18 = bitcast %struct.XYZ* %agg.tmp17 to i8*, !dbg !75
173   %tmp19 = bitcast %struct.XYZ* %abc to i8*, !dbg !75
174   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp18, i8* %tmp19, i64 20, i32 4, i1 false), !dbg !75
175   %call20 = call i32 @f9(%struct.XYZ* byval %agg.tmp17), !dbg !75
176   %tmp22 = bitcast %struct.XYZ* %agg.tmp21 to i8*, !dbg !76
177   %tmp23 = bitcast %struct.XYZ* %abc to i8*, !dbg !76
178   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp22, i8* %tmp23, i64 20, i32 4, i1 false), !dbg !76
179   %call24 = call i32 @f10(%struct.XYZ* byval %agg.tmp21), !dbg !76
180   ret i32 0, !dbg !77
181 }
182
183 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
184
185 !llvm.dbg.sp = !{!0, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15}
186
187 !0 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f1", metadata !"f1", metadata !"f1", metadata !1, i32 11, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (i32)* @f1} ; [ DW_TAG_subprogram ]
188 !1 = metadata !{i32 524329, metadata !"fastisel_arg.c", metadata !"/private/tmp", metadata !2} ; [ DW_TAG_file_type ]
189 !2 = metadata !{i32 524305, i32 0, i32 12, metadata !"fastisel_arg.c", metadata !"/private/tmp", metadata !"clang version 2.8 (trunk 112967)", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ]
190 !3 = metadata !{i32 524309, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !4, i32 0, null} ; [ DW_TAG_subroutine_type ]
191 !4 = metadata !{metadata !5}
192 !5 = metadata !{i32 524324, metadata !1, metadata !"int", metadata !1, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
193 !6 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f2", metadata !"f2", metadata !"f2", metadata !1, i32 12, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (i32)* @f2} ; [ DW_TAG_subprogram ]
194 !7 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f3", metadata !"f3", metadata !"f3", metadata !1, i32 13, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (i32)* @f3} ; [ DW_TAG_subprogram ]
195 !8 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f4", metadata !"f4", metadata !"f4", metadata !1, i32 14, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (i32)* @f4} ; [ DW_TAG_subprogram ]
196 !9 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f5", metadata !"f5", metadata !"f5", metadata !1, i32 15, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (i32)* @f5} ; [ DW_TAG_subprogram ]
197 !10 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f6", metadata !"f6", metadata !"f6", metadata !1, i32 16, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (i32)* @f6} ; [ DW_TAG_subprogram ]
198 !11 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f7", metadata !"f7", metadata !"f7", metadata !1, i32 17, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (%struct.XYZ*)* @f7} ; [ DW_TAG_subprogram ]
199 !12 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f8", metadata !"f8", metadata !"f8", metadata !1, i32 18, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (%struct.XYZ*)* @f8} ; [ DW_TAG_subprogram ]
200 !13 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f9", metadata !"f9", metadata !"f9", metadata !1, i32 19, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (%struct.XYZ*)* @f9} ; [ DW_TAG_subprogram ]
201 !14 = metadata !{i32 524334, i32 0, metadata !1, metadata !"f10", metadata !"f10", metadata !"f10", metadata !1, i32 20, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 (%struct.XYZ*)* @f10} ; [ DW_TAG_subprogram ]
202 !15 = metadata !{i32 524334, i32 0, metadata !1, metadata !"main", metadata !"main", metadata !"main", metadata !1, i32 23, metadata !3, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 false, i32 ()* @main} ; [ DW_TAG_subprogram ]
203 !16 = metadata !{i32 524545, metadata !0, metadata !"i", metadata !1, i32 11, metadata !5} ; [ DW_TAG_arg_variable ]
204 !17 = metadata !{i32 11, i32 12, metadata !0, null}
205 !18 = metadata !{i32 11, i32 17, metadata !19, null}
206 !19 = metadata !{i32 524299, metadata !0, i32 11, i32 15, metadata !1, i32 0} ; [ DW_TAG_lexical_block ]
207 !20 = metadata !{i32 524545, metadata !6, metadata !"i", metadata !1, i32 12, metadata !5} ; [ DW_TAG_arg_variable ]
208 !21 = metadata !{i32 12, i32 12, metadata !6, null}
209 !22 = metadata !{i32 12, i32 17, metadata !23, null}
210 !23 = metadata !{i32 524299, metadata !6, i32 12, i32 15, metadata !1, i32 1} ; [ DW_TAG_lexical_block ]
211 !24 = metadata !{i32 524545, metadata !7, metadata !"i", metadata !1, i32 13, metadata !5} ; [ DW_TAG_arg_variable ]
212 !25 = metadata !{i32 13, i32 12, metadata !7, null}
213 !26 = metadata !{i32 13, i32 17, metadata !27, null}
214 !27 = metadata !{i32 524299, metadata !7, i32 13, i32 15, metadata !1, i32 2} ; [ DW_TAG_lexical_block ]
215 !28 = metadata !{i32 524545, metadata !8, metadata !"i", metadata !1, i32 14, metadata !5} ; [ DW_TAG_arg_variable ]
216 !29 = metadata !{i32 14, i32 12, metadata !8, null}
217 !30 = metadata !{i32 14, i32 17, metadata !31, null}
218 !31 = metadata !{i32 524299, metadata !8, i32 14, i32 15, metadata !1, i32 3} ; [ DW_TAG_lexical_block ]
219 !32 = metadata !{i32 524545, metadata !9, metadata !"i", metadata !1, i32 15, metadata !5} ; [ DW_TAG_arg_variable ]
220 !33 = metadata !{i32 15, i32 12, metadata !9, null}
221 !34 = metadata !{i32 15, i32 17, metadata !35, null}
222 !35 = metadata !{i32 524299, metadata !9, i32 15, i32 15, metadata !1, i32 4} ; [ DW_TAG_lexical_block ]
223 !36 = metadata !{i32 524545, metadata !10, metadata !"i", metadata !1, i32 16, metadata !5} ; [ DW_TAG_arg_variable ]
224 !37 = metadata !{i32 16, i32 12, metadata !10, null}
225 !38 = metadata !{i32 16, i32 17, metadata !39, null}
226 !39 = metadata !{i32 524299, metadata !10, i32 16, i32 15, metadata !1, i32 5} ; [ DW_TAG_lexical_block ]
227 !40 = metadata !{i32 524545, metadata !11, metadata !"i", metadata !1, i32 17, metadata !41} ; [ DW_TAG_arg_variable ]
228 !41 = metadata !{i32 524307, metadata !1, metadata !"XYZ", metadata !1, i32 2, i64 160, i64 32, i64 0, i32 0, null, metadata !42, i32 0, null} ; [ DW_TAG_structure_type ]
229 !42 = metadata !{metadata !43, metadata !44, metadata !45, metadata !46, metadata !47}
230 !43 = metadata !{i32 524301, metadata !1, metadata !"x", metadata !1, i32 3, i64 32, i64 32, i64 0, i32 0, metadata !5} ; [ DW_TAG_member ]
231 !44 = metadata !{i32 524301, metadata !1, metadata !"y", metadata !1, i32 4, i64 32, i64 32, i64 32, i32 0, metadata !5} ; [ DW_TAG_member ]
232 !45 = metadata !{i32 524301, metadata !1, metadata !"z", metadata !1, i32 5, i64 32, i64 32, i64 64, i32 0, metadata !5} ; [ DW_TAG_member ]
233 !46 = metadata !{i32 524301, metadata !1, metadata !"a", metadata !1, i32 6, i64 32, i64 32, i64 96, i32 0, metadata !5} ; [ DW_TAG_member ]
234 !47 = metadata !{i32 524301, metadata !1, metadata !"b", metadata !1, i32 7, i64 32, i64 32, i64 128, i32 0, metadata !5} ; [ DW_TAG_member ]
235 !48 = metadata !{i32 17, i32 19, metadata !11, null}
236 !49 = metadata !{i32 17, i32 24, metadata !50, null}
237 !50 = metadata !{i32 524299, metadata !11, i32 17, i32 22, metadata !1, i32 6} ; [ DW_TAG_lexical_block ]
238 !51 = metadata !{i32 524545, metadata !12, metadata !"i", metadata !1, i32 18, metadata !41} ; [ DW_TAG_arg_variable ]
239 !52 = metadata !{i32 18, i32 19, metadata !12, null}
240 !53 = metadata !{i32 18, i32 24, metadata !54, null}
241 !54 = metadata !{i32 524299, metadata !12, i32 18, i32 22, metadata !1, i32 7} ; [ DW_TAG_lexical_block ]
242 !55 = metadata !{i32 524545, metadata !13, metadata !"i", metadata !1, i32 19, metadata !41} ; [ DW_TAG_arg_variable ]
243 !56 = metadata !{i32 19, i32 19, metadata !13, null}
244 !57 = metadata !{i32 19, i32 24, metadata !58, null}
245 !58 = metadata !{i32 524299, metadata !13, i32 19, i32 22, metadata !1, i32 8} ; [ DW_TAG_lexical_block ]
246 !59 = metadata !{i32 524545, metadata !14, metadata !"i", metadata !1, i32 20, metadata !41} ; [ DW_TAG_arg_variable ]
247 !60 = metadata !{i32 20, i32 20, metadata !14, null}
248 !61 = metadata !{i32 20, i32 25, metadata !62, null}
249 !62 = metadata !{i32 524299, metadata !14, i32 20, i32 23, metadata !1, i32 9} ; [ DW_TAG_lexical_block ]
250 !63 = metadata !{i32 24, i32 3, metadata !64, null}
251 !64 = metadata !{i32 524299, metadata !15, i32 23, i32 12, metadata !1, i32 10} ; [ DW_TAG_lexical_block ]
252 !65 = metadata !{i32 25, i32 3, metadata !64, null}
253 !66 = metadata !{i32 26, i32 3, metadata !64, null}
254 !67 = metadata !{i32 27, i32 3, metadata !64, null}
255 !68 = metadata !{i32 28, i32 3, metadata !64, null}
256 !69 = metadata !{i32 29, i32 3, metadata !64, null}
257 !70 = metadata !{i32 524544, metadata !64, metadata !"abc", metadata !1, i32 30, metadata !41} ; [ DW_TAG_auto_variable ]
258 !71 = metadata !{i32 30, i32 14, metadata !64, null}
259 !72 = metadata !{i32 30, i32 17, metadata !64, null}
260 !73 = metadata !{i32 31, i32 3, metadata !64, null}
261 !74 = metadata !{i32 32, i32 3, metadata !64, null}
262 !75 = metadata !{i32 33, i32 3, metadata !64, null}
263 !76 = metadata !{i32 34, i32 3, metadata !64, null}
264 !77 = metadata !{i32 36, i32 3, metadata !64, null}