brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.0 KiB · e4af66f Raw
455 lines · plain
1; RUN: llc < %s | grep cv_fpo_proc | FileCheck %s2 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; }29 30; CHECK: .cv_fpo_proc    _cdecl1 431; CHECK: .cv_fpo_proc    _cdecl2 832; CHECK: .cv_fpo_proc    _cdecl3 1233 34; First two args are in registers and don't count.35; CHECK: .cv_fpo_proc    @fastcall1@4 036; CHECK: .cv_fpo_proc    @fastcall2@8 037; CHECK: .cv_fpo_proc    @fastcall3@12 438 39; CHECK: .cv_fpo_proc    _stdcall1@4 440; CHECK: .cv_fpo_proc    _stdcall2@8 841; CHECK: .cv_fpo_proc    _stdcall3@12 1242 43; 'this' is in ecx and doesn't count.44; CHECK: .cv_fpo_proc    "?thiscall1@Foo@@QAEXH@Z" 445; CHECK: .cv_fpo_proc    "?thiscall2@Foo@@QAEXHH@Z" 846; CHECK: .cv_fpo_proc    "?thiscall3@Foo@@QAEXHHH@Z" 1247 48; ModuleID = 't.c'49source_filename = "t.c"50target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"51target triple = "i386-pc-windows-msvc19.11.25508"52 53%struct.Foo = type { i8 }54 55@g = external global i32, align 456 57; Function Attrs: noinline nounwind optnone58define void @cdecl1(i32 %a) #0 !dbg !8 {59entry:60  %a.addr = alloca i32, align 461  store i32 %a, ptr %a.addr, align 462  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !12, metadata !DIExpression()), !dbg !1363  %0 = load i32, ptr %a.addr, align 4, !dbg !1464  %1 = load i32, ptr @g, align 4, !dbg !1565  %add = add nsw i32 %1, %0, !dbg !1566  store i32 %add, ptr @g, align 4, !dbg !1567  ret void, !dbg !1668}69 70; Function Attrs: nounwind readnone speculatable71declare void @llvm.dbg.declare(metadata, metadata, metadata) #172 73; Function Attrs: noinline nounwind optnone74define void @cdecl2(i32 %a, i32 %b) #0 !dbg !17 {75entry:76  %b.addr = alloca i32, align 477  %a.addr = alloca i32, align 478  store i32 %b, ptr %b.addr, align 479  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !20, metadata !DIExpression()), !dbg !2180  store i32 %a, ptr %a.addr, align 481  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !22, metadata !DIExpression()), !dbg !2382  %0 = load i32, ptr %a.addr, align 4, !dbg !2483  %1 = load i32, ptr %b.addr, align 4, !dbg !2584  %add = add nsw i32 %0, %1, !dbg !2685  %2 = load i32, ptr @g, align 4, !dbg !2786  %add1 = add nsw i32 %2, %add, !dbg !2787  store i32 %add1, ptr @g, align 4, !dbg !2788  ret void, !dbg !2889}90 91; Function Attrs: noinline nounwind optnone92define void @cdecl3(i32 %a, i32 %b, i32 %c) #0 !dbg !29 {93entry:94  %c.addr = alloca i32, align 495  %b.addr = alloca i32, align 496  %a.addr = alloca i32, align 497  store i32 %c, ptr %c.addr, align 498  call void @llvm.dbg.declare(metadata ptr %c.addr, metadata !32, metadata !DIExpression()), !dbg !3399  store i32 %b, ptr %b.addr, align 4100  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !34, metadata !DIExpression()), !dbg !35101  store i32 %a, ptr %a.addr, align 4102  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !36, metadata !DIExpression()), !dbg !37103  %0 = load i32, ptr %a.addr, align 4, !dbg !38104  %1 = load i32, ptr %b.addr, align 4, !dbg !39105  %add = add nsw i32 %0, %1, !dbg !40106  %2 = load i32, ptr %c.addr, align 4, !dbg !41107  %add1 = add nsw i32 %add, %2, !dbg !42108  %3 = load i32, ptr @g, align 4, !dbg !43109  %add2 = add nsw i32 %3, %add1, !dbg !43110  store i32 %add2, ptr @g, align 4, !dbg !43111  ret void, !dbg !44112}113 114; Function Attrs: noinline nounwind optnone115define x86_fastcallcc void @"\01@fastcall1@4"(i32 inreg %a) #0 !dbg !45 {116entry:117  %a.addr = alloca i32, align 4118  store i32 %a, ptr %a.addr, align 4119  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !47, metadata !DIExpression()), !dbg !48120  %0 = load i32, ptr %a.addr, align 4, !dbg !49121  %1 = load i32, ptr @g, align 4, !dbg !50122  %add = add nsw i32 %1, %0, !dbg !50123  store i32 %add, ptr @g, align 4, !dbg !50124  ret void, !dbg !51125}126 127; Function Attrs: noinline nounwind optnone128define x86_fastcallcc void @"\01@fastcall2@8"(i32 inreg %a, i32 inreg %b) #0 !dbg !52 {129entry:130  %b.addr = alloca i32, align 4131  %a.addr = alloca i32, align 4132  store i32 %b, ptr %b.addr, align 4133  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !54, metadata !DIExpression()), !dbg !55134  store i32 %a, ptr %a.addr, align 4135  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !56, metadata !DIExpression()), !dbg !57136  %0 = load i32, ptr %a.addr, align 4, !dbg !58137  %1 = load i32, ptr %b.addr, align 4, !dbg !59138  %add = add nsw i32 %0, %1, !dbg !60139  %2 = load i32, ptr @g, align 4, !dbg !61140  %add1 = add nsw i32 %2, %add, !dbg !61141  store i32 %add1, ptr @g, align 4, !dbg !61142  ret void, !dbg !62143}144 145; Function Attrs: noinline nounwind optnone146define x86_fastcallcc void @"\01@fastcall3@12"(i32 inreg %a, i32 inreg %b, i32 %c) #0 !dbg !63 {147entry:148  %c.addr = alloca i32, align 4149  %b.addr = alloca i32, align 4150  %a.addr = alloca i32, align 4151  store i32 %c, ptr %c.addr, align 4152  call void @llvm.dbg.declare(metadata ptr %c.addr, metadata !65, metadata !DIExpression()), !dbg !66153  store i32 %b, ptr %b.addr, align 4154  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !67, metadata !DIExpression()), !dbg !68155  store i32 %a, ptr %a.addr, align 4156  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !69, metadata !DIExpression()), !dbg !70157  %0 = load i32, ptr %a.addr, align 4, !dbg !71158  %1 = load i32, ptr %b.addr, align 4, !dbg !72159  %add = add nsw i32 %0, %1, !dbg !73160  %2 = load i32, ptr %c.addr, align 4, !dbg !74161  %add1 = add nsw i32 %add, %2, !dbg !75162  %3 = load i32, ptr @g, align 4, !dbg !76163  %add2 = add nsw i32 %3, %add1, !dbg !76164  store i32 %add2, ptr @g, align 4, !dbg !76165  ret void, !dbg !77166}167 168; Function Attrs: noinline nounwind optnone169define x86_stdcallcc void @"\01_stdcall1@4"(i32 %a) #0 !dbg !78 {170entry:171  %a.addr = alloca i32, align 4172  store i32 %a, ptr %a.addr, align 4173  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !80, metadata !DIExpression()), !dbg !81174  %0 = load i32, ptr %a.addr, align 4, !dbg !82175  %1 = load i32, ptr @g, align 4, !dbg !83176  %add = add nsw i32 %1, %0, !dbg !83177  store i32 %add, ptr @g, align 4, !dbg !83178  ret void, !dbg !84179}180 181; Function Attrs: noinline nounwind optnone182define x86_stdcallcc void @"\01_stdcall2@8"(i32 %a, i32 %b) #0 !dbg !85 {183entry:184  %b.addr = alloca i32, align 4185  %a.addr = alloca i32, align 4186  store i32 %b, ptr %b.addr, align 4187  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !87, metadata !DIExpression()), !dbg !88188  store i32 %a, ptr %a.addr, align 4189  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !89, metadata !DIExpression()), !dbg !90190  %0 = load i32, ptr %a.addr, align 4, !dbg !91191  %1 = load i32, ptr %b.addr, align 4, !dbg !92192  %add = add nsw i32 %0, %1, !dbg !93193  %2 = load i32, ptr @g, align 4, !dbg !94194  %add1 = add nsw i32 %2, %add, !dbg !94195  store i32 %add1, ptr @g, align 4, !dbg !94196  ret void, !dbg !95197}198 199; Function Attrs: noinline nounwind optnone200define x86_stdcallcc void @"\01_stdcall3@12"(i32 %a, i32 %b, i32 %c) #0 !dbg !96 {201entry:202  %c.addr = alloca i32, align 4203  %b.addr = alloca i32, align 4204  %a.addr = alloca i32, align 4205  store i32 %c, ptr %c.addr, align 4206  call void @llvm.dbg.declare(metadata ptr %c.addr, metadata !98, metadata !DIExpression()), !dbg !99207  store i32 %b, ptr %b.addr, align 4208  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !100, metadata !DIExpression()), !dbg !101209  store i32 %a, ptr %a.addr, align 4210  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !102, metadata !DIExpression()), !dbg !103211  %0 = load i32, ptr %a.addr, align 4, !dbg !104212  %1 = load i32, ptr %b.addr, align 4, !dbg !105213  %add = add nsw i32 %0, %1, !dbg !106214  %2 = load i32, ptr %c.addr, align 4, !dbg !107215  %add1 = add nsw i32 %add, %2, !dbg !108216  %3 = load i32, ptr @g, align 4, !dbg !109217  %add2 = add nsw i32 %3, %add1, !dbg !109218  store i32 %add2, ptr @g, align 4, !dbg !109219  ret void, !dbg !110220}221 222; Function Attrs: noinline nounwind optnone223define x86_thiscallcc void @"\01?thiscall1@Foo@@QAEXH@Z"(ptr %this, i32 %a) #0 align 2 !dbg !111 {224entry:225  %a.addr = alloca i32, align 4226  %this.addr = alloca ptr, align 4227  store i32 %a, ptr %a.addr, align 4228  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !124, metadata !DIExpression()), !dbg !125229  store ptr %this, ptr %this.addr, align 4230  call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !126, metadata !DIExpression()), !dbg !128231  %this1 = load ptr, ptr %this.addr, align 4232  %0 = load i32, ptr %a.addr, align 4, !dbg !129233  %1 = load i32, ptr @g, align 4, !dbg !130234  %add = add nsw i32 %1, %0, !dbg !130235  store i32 %add, ptr @g, align 4, !dbg !130236  ret void, !dbg !131237}238 239; Function Attrs: noinline nounwind optnone240define x86_thiscallcc void @"\01?thiscall2@Foo@@QAEXHH@Z"(ptr %this, i32 %a, i32 %b) #0 align 2 !dbg !132 {241entry:242  %b.addr = alloca i32, align 4243  %a.addr = alloca i32, align 4244  %this.addr = alloca ptr, align 4245  store i32 %b, ptr %b.addr, align 4246  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !133, metadata !DIExpression()), !dbg !134247  store i32 %a, ptr %a.addr, align 4248  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !135, metadata !DIExpression()), !dbg !136249  store ptr %this, ptr %this.addr, align 4250  call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !137, metadata !DIExpression()), !dbg !138251  %this1 = load ptr, ptr %this.addr, align 4252  %0 = load i32, ptr %a.addr, align 4, !dbg !139253  %1 = load i32, ptr %b.addr, align 4, !dbg !140254  %add = add nsw i32 %0, %1, !dbg !141255  %2 = load i32, ptr @g, align 4, !dbg !142256  %add2 = add nsw i32 %2, %add, !dbg !142257  store i32 %add2, ptr @g, align 4, !dbg !142258  ret void, !dbg !143259}260 261; Function Attrs: noinline nounwind optnone262define x86_thiscallcc void @"\01?thiscall3@Foo@@QAEXHHH@Z"(ptr %this, i32 %a, i32 %b, i32 %c) #0 align 2 !dbg !144 {263entry:264  %c.addr = alloca i32, align 4265  %b.addr = alloca i32, align 4266  %a.addr = alloca i32, align 4267  %this.addr = alloca ptr, align 4268  store i32 %c, ptr %c.addr, align 4269  call void @llvm.dbg.declare(metadata ptr %c.addr, metadata !145, metadata !DIExpression()), !dbg !146270  store i32 %b, ptr %b.addr, align 4271  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !147, metadata !DIExpression()), !dbg !148272  store i32 %a, ptr %a.addr, align 4273  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !149, metadata !DIExpression()), !dbg !150274  store ptr %this, ptr %this.addr, align 4275  call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !151, metadata !DIExpression()), !dbg !152276  %this1 = load ptr, ptr %this.addr, align 4277  %0 = load i32, ptr %a.addr, align 4, !dbg !153278  %1 = load i32, ptr %b.addr, align 4, !dbg !154279  %add = add nsw i32 %0, %1, !dbg !155280  %2 = load i32, ptr %c.addr, align 4, !dbg !156281  %add2 = add nsw i32 %add, %2, !dbg !157282  %3 = load i32, ptr @g, align 4, !dbg !158283  %add3 = add nsw i32 %3, %add2, !dbg !158284  store i32 %add3, ptr @g, align 4, !dbg !158285  ret void, !dbg !159286}287 288attributes #0 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "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" "use-soft-float"="false" }289attributes #1 = { nounwind readnone speculatable }290 291!llvm.dbg.cu = !{!0}292!llvm.module.flags = !{!3, !4, !5, !6}293!llvm.ident = !{!7}294 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)455