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