[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / DebugInfo / COFF / fpo-argsize.ll
blob41d00c18be950b6bcd826283a02403526570e79d
1 ; RUN: llc < %s | grep cv_fpo_proc | FileCheck %s
3 ; C++ source:
4 ; extern "C" {
5 ; extern int g;
6
7 ; void cdecl1(int a) { g += a; }
8 ; void cdecl2(int a, int b) { g += a + b; }
9 ; void cdecl3(int a, int b, int c) { g += a + b + c; }
10
11 ; void __fastcall fastcall1(int a) { g += a; }
12 ; void __fastcall fastcall2(int a, int b) { g += a + b; }
13 ; void __fastcall fastcall3(int a, int b, int c) { g += a + b + c; }
14
15 ; void __stdcall stdcall1(int a) { g += a; }
16 ; void __stdcall stdcall2(int a, int b) { g += a + b; }
17 ; void __stdcall stdcall3(int a, int b, int c) { g += a + b + c; }
18 ; }
19
20 ; struct Foo {
21 ;   void thiscall1(int a);
22 ;   void thiscall2(int a, int b);
23 ;   void thiscall3(int a, int b, int c);
24 ; };
25
26 ; void Foo::thiscall1(int a) { g += a; }
27 ; void Foo::thiscall2(int a, int b) { g += a + b; }
28 ; void Foo::thiscall3(int a, int b, int c) { g += a + b + c; }
30 ; CHECK: .cv_fpo_proc    _cdecl1 4
31 ; CHECK: .cv_fpo_proc    _cdecl2 8
32 ; CHECK: .cv_fpo_proc    _cdecl3 12
34 ; First two args are in registers and don't count.
35 ; CHECK: .cv_fpo_proc    @fastcall1@4 0
36 ; CHECK: .cv_fpo_proc    @fastcall2@8 0
37 ; CHECK: .cv_fpo_proc    @fastcall3@12 4
39 ; CHECK: .cv_fpo_proc    _stdcall1@4 4
40 ; CHECK: .cv_fpo_proc    _stdcall2@8 8
41 ; CHECK: .cv_fpo_proc    _stdcall3@12 12
43 ; 'this' is in ecx and doesn't count.
44 ; CHECK: .cv_fpo_proc    "?thiscall1@Foo@@QAEXH@Z" 4
45 ; CHECK: .cv_fpo_proc    "?thiscall2@Foo@@QAEXHH@Z" 8
46 ; CHECK: .cv_fpo_proc    "?thiscall3@Foo@@QAEXHHH@Z" 12
48 ; ModuleID = 't.c'
49 source_filename = "t.c"
50 target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
51 target triple = "i386-pc-windows-msvc19.11.25508"
53 %struct.Foo = type { i8 }
55 @g = external global i32, align 4
57 ; Function Attrs: noinline nounwind optnone
58 define void @cdecl1(i32 %a) #0 !dbg !8 {
59 entry:
60   %a.addr = alloca i32, align 4
61   store i32 %a, i32* %a.addr, align 4
62   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !12, metadata !DIExpression()), !dbg !13
63   %0 = load i32, i32* %a.addr, align 4, !dbg !14
64   %1 = load i32, i32* @g, align 4, !dbg !15
65   %add = add nsw i32 %1, %0, !dbg !15
66   store i32 %add, i32* @g, align 4, !dbg !15
67   ret void, !dbg !16
70 ; Function Attrs: nounwind readnone speculatable
71 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
73 ; Function Attrs: noinline nounwind optnone
74 define void @cdecl2(i32 %a, i32 %b) #0 !dbg !17 {
75 entry:
76   %b.addr = alloca i32, align 4
77   %a.addr = alloca i32, align 4
78   store i32 %b, i32* %b.addr, align 4
79   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !20, metadata !DIExpression()), !dbg !21
80   store i32 %a, i32* %a.addr, align 4
81   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !22, metadata !DIExpression()), !dbg !23
82   %0 = load i32, i32* %a.addr, align 4, !dbg !24
83   %1 = load i32, i32* %b.addr, align 4, !dbg !25
84   %add = add nsw i32 %0, %1, !dbg !26
85   %2 = load i32, i32* @g, align 4, !dbg !27
86   %add1 = add nsw i32 %2, %add, !dbg !27
87   store i32 %add1, i32* @g, align 4, !dbg !27
88   ret void, !dbg !28
91 ; Function Attrs: noinline nounwind optnone
92 define void @cdecl3(i32 %a, i32 %b, i32 %c) #0 !dbg !29 {
93 entry:
94   %c.addr = alloca i32, align 4
95   %b.addr = alloca i32, align 4
96   %a.addr = alloca i32, align 4
97   store i32 %c, i32* %c.addr, align 4
98   call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !32, metadata !DIExpression()), !dbg !33
99   store i32 %b, i32* %b.addr, align 4
100   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !34, metadata !DIExpression()), !dbg !35
101   store i32 %a, i32* %a.addr, align 4
102   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !36, metadata !DIExpression()), !dbg !37
103   %0 = load i32, i32* %a.addr, align 4, !dbg !38
104   %1 = load i32, i32* %b.addr, align 4, !dbg !39
105   %add = add nsw i32 %0, %1, !dbg !40
106   %2 = load i32, i32* %c.addr, align 4, !dbg !41
107   %add1 = add nsw i32 %add, %2, !dbg !42
108   %3 = load i32, i32* @g, align 4, !dbg !43
109   %add2 = add nsw i32 %3, %add1, !dbg !43
110   store i32 %add2, i32* @g, align 4, !dbg !43
111   ret void, !dbg !44
114 ; Function Attrs: noinline nounwind optnone
115 define x86_fastcallcc void @"\01@fastcall1@4"(i32 inreg %a) #0 !dbg !45 {
116 entry:
117   %a.addr = alloca i32, align 4
118   store i32 %a, i32* %a.addr, align 4
119   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !47, metadata !DIExpression()), !dbg !48
120   %0 = load i32, i32* %a.addr, align 4, !dbg !49
121   %1 = load i32, i32* @g, align 4, !dbg !50
122   %add = add nsw i32 %1, %0, !dbg !50
123   store i32 %add, i32* @g, align 4, !dbg !50
124   ret void, !dbg !51
127 ; Function Attrs: noinline nounwind optnone
128 define x86_fastcallcc void @"\01@fastcall2@8"(i32 inreg %a, i32 inreg %b) #0 !dbg !52 {
129 entry:
130   %b.addr = alloca i32, align 4
131   %a.addr = alloca i32, align 4
132   store i32 %b, i32* %b.addr, align 4
133   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !54, metadata !DIExpression()), !dbg !55
134   store i32 %a, i32* %a.addr, align 4
135   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !56, metadata !DIExpression()), !dbg !57
136   %0 = load i32, i32* %a.addr, align 4, !dbg !58
137   %1 = load i32, i32* %b.addr, align 4, !dbg !59
138   %add = add nsw i32 %0, %1, !dbg !60
139   %2 = load i32, i32* @g, align 4, !dbg !61
140   %add1 = add nsw i32 %2, %add, !dbg !61
141   store i32 %add1, i32* @g, align 4, !dbg !61
142   ret void, !dbg !62
145 ; Function Attrs: noinline nounwind optnone
146 define x86_fastcallcc void @"\01@fastcall3@12"(i32 inreg %a, i32 inreg %b, i32 %c) #0 !dbg !63 {
147 entry:
148   %c.addr = alloca i32, align 4
149   %b.addr = alloca i32, align 4
150   %a.addr = alloca i32, align 4
151   store i32 %c, i32* %c.addr, align 4
152   call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !65, metadata !DIExpression()), !dbg !66
153   store i32 %b, i32* %b.addr, align 4
154   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !67, metadata !DIExpression()), !dbg !68
155   store i32 %a, i32* %a.addr, align 4
156   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !69, metadata !DIExpression()), !dbg !70
157   %0 = load i32, i32* %a.addr, align 4, !dbg !71
158   %1 = load i32, i32* %b.addr, align 4, !dbg !72
159   %add = add nsw i32 %0, %1, !dbg !73
160   %2 = load i32, i32* %c.addr, align 4, !dbg !74
161   %add1 = add nsw i32 %add, %2, !dbg !75
162   %3 = load i32, i32* @g, align 4, !dbg !76
163   %add2 = add nsw i32 %3, %add1, !dbg !76
164   store i32 %add2, i32* @g, align 4, !dbg !76
165   ret void, !dbg !77
168 ; Function Attrs: noinline nounwind optnone
169 define x86_stdcallcc void @"\01_stdcall1@4"(i32 %a) #0 !dbg !78 {
170 entry:
171   %a.addr = alloca i32, align 4
172   store i32 %a, i32* %a.addr, align 4
173   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !80, metadata !DIExpression()), !dbg !81
174   %0 = load i32, i32* %a.addr, align 4, !dbg !82
175   %1 = load i32, i32* @g, align 4, !dbg !83
176   %add = add nsw i32 %1, %0, !dbg !83
177   store i32 %add, i32* @g, align 4, !dbg !83
178   ret void, !dbg !84
181 ; Function Attrs: noinline nounwind optnone
182 define x86_stdcallcc void @"\01_stdcall2@8"(i32 %a, i32 %b) #0 !dbg !85 {
183 entry:
184   %b.addr = alloca i32, align 4
185   %a.addr = alloca i32, align 4
186   store i32 %b, i32* %b.addr, align 4
187   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !87, metadata !DIExpression()), !dbg !88
188   store i32 %a, i32* %a.addr, align 4
189   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !89, metadata !DIExpression()), !dbg !90
190   %0 = load i32, i32* %a.addr, align 4, !dbg !91
191   %1 = load i32, i32* %b.addr, align 4, !dbg !92
192   %add = add nsw i32 %0, %1, !dbg !93
193   %2 = load i32, i32* @g, align 4, !dbg !94
194   %add1 = add nsw i32 %2, %add, !dbg !94
195   store i32 %add1, i32* @g, align 4, !dbg !94
196   ret void, !dbg !95
199 ; Function Attrs: noinline nounwind optnone
200 define x86_stdcallcc void @"\01_stdcall3@12"(i32 %a, i32 %b, i32 %c) #0 !dbg !96 {
201 entry:
202   %c.addr = alloca i32, align 4
203   %b.addr = alloca i32, align 4
204   %a.addr = alloca i32, align 4
205   store i32 %c, i32* %c.addr, align 4
206   call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !98, metadata !DIExpression()), !dbg !99
207   store i32 %b, i32* %b.addr, align 4
208   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !100, metadata !DIExpression()), !dbg !101
209   store i32 %a, i32* %a.addr, align 4
210   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !102, metadata !DIExpression()), !dbg !103
211   %0 = load i32, i32* %a.addr, align 4, !dbg !104
212   %1 = load i32, i32* %b.addr, align 4, !dbg !105
213   %add = add nsw i32 %0, %1, !dbg !106
214   %2 = load i32, i32* %c.addr, align 4, !dbg !107
215   %add1 = add nsw i32 %add, %2, !dbg !108
216   %3 = load i32, i32* @g, align 4, !dbg !109
217   %add2 = add nsw i32 %3, %add1, !dbg !109
218   store i32 %add2, i32* @g, align 4, !dbg !109
219   ret void, !dbg !110
222 ; Function Attrs: noinline nounwind optnone
223 define x86_thiscallcc void @"\01?thiscall1@Foo@@QAEXH@Z"(%struct.Foo* %this, i32 %a) #0 align 2 !dbg !111 {
224 entry:
225   %a.addr = alloca i32, align 4
226   %this.addr = alloca %struct.Foo*, align 4
227   store i32 %a, i32* %a.addr, align 4
228   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !124, metadata !DIExpression()), !dbg !125
229   store %struct.Foo* %this, %struct.Foo** %this.addr, align 4
230   call void @llvm.dbg.declare(metadata %struct.Foo** %this.addr, metadata !126, metadata !DIExpression()), !dbg !128
231   %this1 = load %struct.Foo*, %struct.Foo** %this.addr, align 4
232   %0 = load i32, i32* %a.addr, align 4, !dbg !129
233   %1 = load i32, i32* @g, align 4, !dbg !130
234   %add = add nsw i32 %1, %0, !dbg !130
235   store i32 %add, i32* @g, align 4, !dbg !130
236   ret void, !dbg !131
239 ; Function Attrs: noinline nounwind optnone
240 define x86_thiscallcc void @"\01?thiscall2@Foo@@QAEXHH@Z"(%struct.Foo* %this, i32 %a, i32 %b) #0 align 2 !dbg !132 {
241 entry:
242   %b.addr = alloca i32, align 4
243   %a.addr = alloca i32, align 4
244   %this.addr = alloca %struct.Foo*, align 4
245   store i32 %b, i32* %b.addr, align 4
246   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !133, metadata !DIExpression()), !dbg !134
247   store i32 %a, i32* %a.addr, align 4
248   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !135, metadata !DIExpression()), !dbg !136
249   store %struct.Foo* %this, %struct.Foo** %this.addr, align 4
250   call void @llvm.dbg.declare(metadata %struct.Foo** %this.addr, metadata !137, metadata !DIExpression()), !dbg !138
251   %this1 = load %struct.Foo*, %struct.Foo** %this.addr, align 4
252   %0 = load i32, i32* %a.addr, align 4, !dbg !139
253   %1 = load i32, i32* %b.addr, align 4, !dbg !140
254   %add = add nsw i32 %0, %1, !dbg !141
255   %2 = load i32, i32* @g, align 4, !dbg !142
256   %add2 = add nsw i32 %2, %add, !dbg !142
257   store i32 %add2, i32* @g, align 4, !dbg !142
258   ret void, !dbg !143
261 ; Function Attrs: noinline nounwind optnone
262 define x86_thiscallcc void @"\01?thiscall3@Foo@@QAEXHHH@Z"(%struct.Foo* %this, i32 %a, i32 %b, i32 %c) #0 align 2 !dbg !144 {
263 entry:
264   %c.addr = alloca i32, align 4
265   %b.addr = alloca i32, align 4
266   %a.addr = alloca i32, align 4
267   %this.addr = alloca %struct.Foo*, align 4
268   store i32 %c, i32* %c.addr, align 4
269   call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !145, metadata !DIExpression()), !dbg !146
270   store i32 %b, i32* %b.addr, align 4
271   call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !147, metadata !DIExpression()), !dbg !148
272   store i32 %a, i32* %a.addr, align 4
273   call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !149, metadata !DIExpression()), !dbg !150
274   store %struct.Foo* %this, %struct.Foo** %this.addr, align 4
275   call void @llvm.dbg.declare(metadata %struct.Foo** %this.addr, metadata !151, metadata !DIExpression()), !dbg !152
276   %this1 = load %struct.Foo*, %struct.Foo** %this.addr, align 4
277   %0 = load i32, i32* %a.addr, align 4, !dbg !153
278   %1 = load i32, i32* %b.addr, align 4, !dbg !154
279   %add = add nsw i32 %0, %1, !dbg !155
280   %2 = load i32, i32* %c.addr, align 4, !dbg !156
281   %add2 = add nsw i32 %add, %2, !dbg !157
282   %3 = load i32, i32* @g, align 4, !dbg !158
283   %add3 = add nsw i32 %3, %add2, !dbg !158
284   store i32 %add3, i32* @g, align 4, !dbg !158
285   ret void, !dbg !159
288 attributes #0 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
289 attributes #1 = { nounwind readnone speculatable }
291 !llvm.dbg.cu = !{!0}
292 !llvm.module.flags = !{!3, !4, !5, !6}
293 !llvm.ident = !{!7}
295 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 6.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
296 !1 = !DIFile(filename: "t.c", directory: "C:\5Csrc\5Cllvm-project\5Cbuild", checksumkind: CSK_MD5, checksum: "0ce3e4edcf2f8511157da4edb99fcdf4")
297 !2 = !{}
298 !3 = !{i32 1, !"NumRegisterParameters", i32 0}
299 !4 = !{i32 2, !"CodeView", i32 1}
300 !5 = !{i32 2, !"Debug Info Version", i32 3}
301 !6 = !{i32 1, !"wchar_size", i32 2}
302 !7 = !{!"clang version 6.0.0 "}
303 !8 = distinct !DISubprogram(name: "cdecl1", scope: !1, file: !1, line: 4, type: !9, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
304 !9 = !DISubroutineType(types: !10)
305 !10 = !{null, !11}
306 !11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
307 !12 = !DILocalVariable(name: "a", arg: 1, scope: !8, file: !1, line: 4, type: !11)
308 !13 = !DILocation(line: 4, column: 17, scope: !8)
309 !14 = !DILocation(line: 4, column: 27, scope: !8)
310 !15 = !DILocation(line: 4, column: 24, scope: !8)
311 !16 = !DILocation(line: 4, column: 30, scope: !8)
312 !17 = distinct !DISubprogram(name: "cdecl2", scope: !1, file: !1, line: 5, type: !18, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
313 !18 = !DISubroutineType(types: !19)
314 !19 = !{null, !11, !11}
315 !20 = !DILocalVariable(name: "b", arg: 2, scope: !17, file: !1, line: 5, type: !11)
316 !21 = !DILocation(line: 5, column: 24, scope: !17)
317 !22 = !DILocalVariable(name: "a", arg: 1, scope: !17, file: !1, line: 5, type: !11)
318 !23 = !DILocation(line: 5, column: 17, scope: !17)
319 !24 = !DILocation(line: 5, column: 34, scope: !17)
320 !25 = !DILocation(line: 5, column: 38, scope: !17)
321 !26 = !DILocation(line: 5, column: 36, scope: !17)
322 !27 = !DILocation(line: 5, column: 31, scope: !17)
323 !28 = !DILocation(line: 5, column: 41, scope: !17)
324 !29 = distinct !DISubprogram(name: "cdecl3", scope: !1, file: !1, line: 6, type: !30, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
325 !30 = !DISubroutineType(types: !31)
326 !31 = !{null, !11, !11, !11}
327 !32 = !DILocalVariable(name: "c", arg: 3, scope: !29, file: !1, line: 6, type: !11)
328 !33 = !DILocation(line: 6, column: 31, scope: !29)
329 !34 = !DILocalVariable(name: "b", arg: 2, scope: !29, file: !1, line: 6, type: !11)
330 !35 = !DILocation(line: 6, column: 24, scope: !29)
331 !36 = !DILocalVariable(name: "a", arg: 1, scope: !29, file: !1, line: 6, type: !11)
332 !37 = !DILocation(line: 6, column: 17, scope: !29)
333 !38 = !DILocation(line: 6, column: 41, scope: !29)
334 !39 = !DILocation(line: 6, column: 45, scope: !29)
335 !40 = !DILocation(line: 6, column: 43, scope: !29)
336 !41 = !DILocation(line: 6, column: 49, scope: !29)
337 !42 = !DILocation(line: 6, column: 47, scope: !29)
338 !43 = !DILocation(line: 6, column: 38, scope: !29)
339 !44 = !DILocation(line: 6, column: 52, scope: !29)
340 !45 = distinct !DISubprogram(name: "fastcall1", linkageName: "\01@fastcall1@4", scope: !1, file: !1, line: 8, type: !46, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
341 !46 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !10)
342 !47 = !DILocalVariable(name: "a", arg: 1, scope: !45, file: !1, line: 8, type: !11)
343 !48 = !DILocation(line: 8, column: 31, scope: !45)
344 !49 = !DILocation(line: 8, column: 41, scope: !45)
345 !50 = !DILocation(line: 8, column: 38, scope: !45)
346 !51 = !DILocation(line: 8, column: 44, scope: !45)
347 !52 = distinct !DISubprogram(name: "fastcall2", linkageName: "\01@fastcall2@8", scope: !1, file: !1, line: 9, type: !53, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
348 !53 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !19)
349 !54 = !DILocalVariable(name: "b", arg: 2, scope: !52, file: !1, line: 9, type: !11)
350 !55 = !DILocation(line: 9, column: 38, scope: !52)
351 !56 = !DILocalVariable(name: "a", arg: 1, scope: !52, file: !1, line: 9, type: !11)
352 !57 = !DILocation(line: 9, column: 31, scope: !52)
353 !58 = !DILocation(line: 9, column: 48, scope: !52)
354 !59 = !DILocation(line: 9, column: 52, scope: !52)
355 !60 = !DILocation(line: 9, column: 50, scope: !52)
356 !61 = !DILocation(line: 9, column: 45, scope: !52)
357 !62 = !DILocation(line: 9, column: 55, scope: !52)
358 !63 = distinct !DISubprogram(name: "fastcall3", linkageName: "\01@fastcall3@12", scope: !1, file: !1, line: 10, type: !64, isLocal: false, isDefinition: true, scopeLine: 10, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
359 !64 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !31)
360 !65 = !DILocalVariable(name: "c", arg: 3, scope: !63, file: !1, line: 10, type: !11)
361 !66 = !DILocation(line: 10, column: 45, scope: !63)
362 !67 = !DILocalVariable(name: "b", arg: 2, scope: !63, file: !1, line: 10, type: !11)
363 !68 = !DILocation(line: 10, column: 38, scope: !63)
364 !69 = !DILocalVariable(name: "a", arg: 1, scope: !63, file: !1, line: 10, type: !11)
365 !70 = !DILocation(line: 10, column: 31, scope: !63)
366 !71 = !DILocation(line: 10, column: 55, scope: !63)
367 !72 = !DILocation(line: 10, column: 59, scope: !63)
368 !73 = !DILocation(line: 10, column: 57, scope: !63)
369 !74 = !DILocation(line: 10, column: 63, scope: !63)
370 !75 = !DILocation(line: 10, column: 61, scope: !63)
371 !76 = !DILocation(line: 10, column: 52, scope: !63)
372 !77 = !DILocation(line: 10, column: 66, scope: !63)
373 !78 = distinct !DISubprogram(name: "stdcall1", linkageName: "\01_stdcall1@4", scope: !1, file: !1, line: 12, type: !79, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
374 !79 = !DISubroutineType(cc: DW_CC_BORLAND_stdcall, types: !10)
375 !80 = !DILocalVariable(name: "a", arg: 1, scope: !78, file: !1, line: 12, type: !11)
376 !81 = !DILocation(line: 12, column: 29, scope: !78)
377 !82 = !DILocation(line: 12, column: 39, scope: !78)
378 !83 = !DILocation(line: 12, column: 36, scope: !78)
379 !84 = !DILocation(line: 12, column: 42, scope: !78)
380 !85 = distinct !DISubprogram(name: "stdcall2", linkageName: "\01_stdcall2@8", scope: !1, file: !1, line: 13, type: !86, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
381 !86 = !DISubroutineType(cc: DW_CC_BORLAND_stdcall, types: !19)
382 !87 = !DILocalVariable(name: "b", arg: 2, scope: !85, file: !1, line: 13, type: !11)
383 !88 = !DILocation(line: 13, column: 36, scope: !85)
384 !89 = !DILocalVariable(name: "a", arg: 1, scope: !85, file: !1, line: 13, type: !11)
385 !90 = !DILocation(line: 13, column: 29, scope: !85)
386 !91 = !DILocation(line: 13, column: 46, scope: !85)
387 !92 = !DILocation(line: 13, column: 50, scope: !85)
388 !93 = !DILocation(line: 13, column: 48, scope: !85)
389 !94 = !DILocation(line: 13, column: 43, scope: !85)
390 !95 = !DILocation(line: 13, column: 53, scope: !85)
391 !96 = distinct !DISubprogram(name: "stdcall3", linkageName: "\01_stdcall3@12", scope: !1, file: !1, line: 14, type: !97, isLocal: false, isDefinition: true, scopeLine: 14, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
392 !97 = !DISubroutineType(cc: DW_CC_BORLAND_stdcall, types: !31)
393 !98 = !DILocalVariable(name: "c", arg: 3, scope: !96, file: !1, line: 14, type: !11)
394 !99 = !DILocation(line: 14, column: 43, scope: !96)
395 !100 = !DILocalVariable(name: "b", arg: 2, scope: !96, file: !1, line: 14, type: !11)
396 !101 = !DILocation(line: 14, column: 36, scope: !96)
397 !102 = !DILocalVariable(name: "a", arg: 1, scope: !96, file: !1, line: 14, type: !11)
398 !103 = !DILocation(line: 14, column: 29, scope: !96)
399 !104 = !DILocation(line: 14, column: 53, scope: !96)
400 !105 = !DILocation(line: 14, column: 57, scope: !96)
401 !106 = !DILocation(line: 14, column: 55, scope: !96)
402 !107 = !DILocation(line: 14, column: 61, scope: !96)
403 !108 = !DILocation(line: 14, column: 59, scope: !96)
404 !109 = !DILocation(line: 14, column: 50, scope: !96)
405 !110 = !DILocation(line: 14, column: 64, scope: !96)
406 !111 = distinct !DISubprogram(name: "thiscall1", linkageName: "\01?thiscall1@Foo@@QAEXH@Z", scope: !112, file: !1, line: 23, type: !115, isLocal: false, isDefinition: true, scopeLine: 23, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !114, retainedNodes: !2)
407 !112 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", file: !1, line: 17, size: 8, elements: !113, identifier: ".?AUFoo@@")
408 !113 = !{!114, !118, !121}
409 !114 = !DISubprogram(name: "thiscall1", linkageName: "\01?thiscall1@Foo@@QAEXH@Z", scope: !112, file: !1, line: 18, type: !115, isLocal: false, isDefinition: false, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false)
410 !115 = !DISubroutineType(cc: DW_CC_BORLAND_thiscall, types: !116)
411 !116 = !{null, !117, !11}
412 !117 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !112, size: 32, flags: DIFlagArtificial | DIFlagObjectPointer)
413 !118 = !DISubprogram(name: "thiscall2", linkageName: "\01?thiscall2@Foo@@QAEXHH@Z", scope: !112, file: !1, line: 19, type: !119, isLocal: false, isDefinition: false, scopeLine: 19, flags: DIFlagPrototyped, isOptimized: false)
414 !119 = !DISubroutineType(cc: DW_CC_BORLAND_thiscall, types: !120)
415 !120 = !{null, !117, !11, !11}
416 !121 = !DISubprogram(name: "thiscall3", linkageName: "\01?thiscall3@Foo@@QAEXHHH@Z", scope: !112, file: !1, line: 20, type: !122, isLocal: false, isDefinition: false, scopeLine: 20, flags: DIFlagPrototyped, isOptimized: false)
417 !122 = !DISubroutineType(cc: DW_CC_BORLAND_thiscall, types: !123)
418 !123 = !{null, !117, !11, !11, !11}
419 !124 = !DILocalVariable(name: "a", arg: 2, scope: !111, file: !1, line: 23, type: !11)
420 !125 = !DILocation(line: 23, column: 25, scope: !111)
421 !126 = !DILocalVariable(name: "this", arg: 1, scope: !111, type: !127, flags: DIFlagArtificial | DIFlagObjectPointer)
422 !127 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !112, size: 32)
423 !128 = !DILocation(line: 0, scope: !111)
424 !129 = !DILocation(line: 23, column: 35, scope: !111)
425 !130 = !DILocation(line: 23, column: 32, scope: !111)
426 !131 = !DILocation(line: 23, column: 38, scope: !111)
427 !132 = distinct !DISubprogram(name: "thiscall2", linkageName: "\01?thiscall2@Foo@@QAEXHH@Z", scope: !112, file: !1, line: 24, type: !119, isLocal: false, isDefinition: true, scopeLine: 24, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !118, retainedNodes: !2)
428 !133 = !DILocalVariable(name: "b", arg: 3, scope: !132, file: !1, line: 24, type: !11)
429 !134 = !DILocation(line: 24, column: 32, scope: !132)
430 !135 = !DILocalVariable(name: "a", arg: 2, scope: !132, file: !1, line: 24, type: !11)
431 !136 = !DILocation(line: 24, column: 25, scope: !132)
432 !137 = !DILocalVariable(name: "this", arg: 1, scope: !132, type: !127, flags: DIFlagArtificial | DIFlagObjectPointer)
433 !138 = !DILocation(line: 0, scope: !132)
434 !139 = !DILocation(line: 24, column: 42, scope: !132)
435 !140 = !DILocation(line: 24, column: 46, scope: !132)
436 !141 = !DILocation(line: 24, column: 44, scope: !132)
437 !142 = !DILocation(line: 24, column: 39, scope: !132)
438 !143 = !DILocation(line: 24, column: 49, scope: !132)
439 !144 = distinct !DISubprogram(name: "thiscall3", linkageName: "\01?thiscall3@Foo@@QAEXHHH@Z", scope: !112, file: !1, line: 25, type: !122, isLocal: false, isDefinition: true, scopeLine: 25, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !121, retainedNodes: !2)
440 !145 = !DILocalVariable(name: "c", arg: 4, scope: !144, file: !1, line: 25, type: !11)
441 !146 = !DILocation(line: 25, column: 39, scope: !144)
442 !147 = !DILocalVariable(name: "b", arg: 3, scope: !144, file: !1, line: 25, type: !11)
443 !148 = !DILocation(line: 25, column: 32, scope: !144)
444 !149 = !DILocalVariable(name: "a", arg: 2, scope: !144, file: !1, line: 25, type: !11)
445 !150 = !DILocation(line: 25, column: 25, scope: !144)
446 !151 = !DILocalVariable(name: "this", arg: 1, scope: !144, type: !127, flags: DIFlagArtificial | DIFlagObjectPointer)
447 !152 = !DILocation(line: 0, scope: !144)
448 !153 = !DILocation(line: 25, column: 49, scope: !144)
449 !154 = !DILocation(line: 25, column: 53, scope: !144)
450 !155 = !DILocation(line: 25, column: 51, scope: !144)
451 !156 = !DILocation(line: 25, column: 57, scope: !144)
452 !157 = !DILocation(line: 25, column: 55, scope: !144)
453 !158 = !DILocation(line: 25, column: 46, scope: !144)
454 !159 = !DILocation(line: 25, column: 60, scope: !144)