| ; RUN: llc < %s | grep cv_fpo_proc | FileCheck %s |
| |
| ; C++ source: |
| ; extern "C" { |
| ; extern int g; |
| ; |
| ; void cdecl1(int a) { g += a; } |
| ; void cdecl2(int a, int b) { g += a + b; } |
| ; void cdecl3(int a, int b, int c) { g += a + b + c; } |
| ; |
| ; void __fastcall fastcall1(int a) { g += a; } |
| ; void __fastcall fastcall2(int a, int b) { g += a + b; } |
| ; void __fastcall fastcall3(int a, int b, int c) { g += a + b + c; } |
| ; |
| ; void __stdcall stdcall1(int a) { g += a; } |
| ; void __stdcall stdcall2(int a, int b) { g += a + b; } |
| ; void __stdcall stdcall3(int a, int b, int c) { g += a + b + c; } |
| ; } |
| ; |
| ; struct Foo { |
| ; void thiscall1(int a); |
| ; void thiscall2(int a, int b); |
| ; void thiscall3(int a, int b, int c); |
| ; }; |
| ; |
| ; void Foo::thiscall1(int a) { g += a; } |
| ; void Foo::thiscall2(int a, int b) { g += a + b; } |
| ; void Foo::thiscall3(int a, int b, int c) { g += a + b + c; } |
| |
| ; CHECK: .cv_fpo_proc _cdecl1 4 |
| ; CHECK: .cv_fpo_proc _cdecl2 8 |
| ; CHECK: .cv_fpo_proc _cdecl3 12 |
| |
| ; First two args are in registers and don't count. |
| ; CHECK: .cv_fpo_proc @fastcall1@4 0 |
| ; CHECK: .cv_fpo_proc @fastcall2@8 0 |
| ; CHECK: .cv_fpo_proc @fastcall3@12 4 |
| |
| ; CHECK: .cv_fpo_proc _stdcall1@4 4 |
| ; CHECK: .cv_fpo_proc _stdcall2@8 8 |
| ; CHECK: .cv_fpo_proc _stdcall3@12 12 |
| |
| ; 'this' is in ecx and doesn't count. |
| ; CHECK: .cv_fpo_proc "?thiscall1@Foo@@QAEXH@Z" 4 |
| ; CHECK: .cv_fpo_proc "?thiscall2@Foo@@QAEXHH@Z" 8 |
| ; CHECK: .cv_fpo_proc "?thiscall3@Foo@@QAEXHHH@Z" 12 |
| |
| ; ModuleID = 't.c' |
| source_filename = "t.c" |
| target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" |
| target triple = "i386-pc-windows-msvc19.11.25508" |
| |
| %struct.Foo = type { i8 } |
| |
| @g = external global i32, align 4 |
| |
| ; Function Attrs: noinline nounwind optnone |
| define void @cdecl1(i32 %a) #0 !dbg !8 { |
| entry: |
| %a.addr = alloca i32, align 4 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !12, metadata !DIExpression()), !dbg !13 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !14 |
| %1 = load i32, i32* @g, align 4, !dbg !15 |
| %add = add nsw i32 %1, %0, !dbg !15 |
| store i32 %add, i32* @g, align 4, !dbg !15 |
| ret void, !dbg !16 |
| } |
| |
| ; Function Attrs: nounwind readnone speculatable |
| declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 |
| |
| ; Function Attrs: noinline nounwind optnone |
| define void @cdecl2(i32 %a, i32 %b) #0 !dbg !17 { |
| entry: |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !20, metadata !DIExpression()), !dbg !21 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !22, metadata !DIExpression()), !dbg !23 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !24 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !25 |
| %add = add nsw i32 %0, %1, !dbg !26 |
| %2 = load i32, i32* @g, align 4, !dbg !27 |
| %add1 = add nsw i32 %2, %add, !dbg !27 |
| store i32 %add1, i32* @g, align 4, !dbg !27 |
| ret void, !dbg !28 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define void @cdecl3(i32 %a, i32 %b, i32 %c) #0 !dbg !29 { |
| entry: |
| %c.addr = alloca i32, align 4 |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| store i32 %c, i32* %c.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !32, metadata !DIExpression()), !dbg !33 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !34, metadata !DIExpression()), !dbg !35 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !36, metadata !DIExpression()), !dbg !37 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !38 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !39 |
| %add = add nsw i32 %0, %1, !dbg !40 |
| %2 = load i32, i32* %c.addr, align 4, !dbg !41 |
| %add1 = add nsw i32 %add, %2, !dbg !42 |
| %3 = load i32, i32* @g, align 4, !dbg !43 |
| %add2 = add nsw i32 %3, %add1, !dbg !43 |
| store i32 %add2, i32* @g, align 4, !dbg !43 |
| ret void, !dbg !44 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_fastcallcc void @"\01@fastcall1@4"(i32 inreg %a) #0 !dbg !45 { |
| entry: |
| %a.addr = alloca i32, align 4 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !47, metadata !DIExpression()), !dbg !48 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !49 |
| %1 = load i32, i32* @g, align 4, !dbg !50 |
| %add = add nsw i32 %1, %0, !dbg !50 |
| store i32 %add, i32* @g, align 4, !dbg !50 |
| ret void, !dbg !51 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_fastcallcc void @"\01@fastcall2@8"(i32 inreg %a, i32 inreg %b) #0 !dbg !52 { |
| entry: |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !54, metadata !DIExpression()), !dbg !55 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !56, metadata !DIExpression()), !dbg !57 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !58 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !59 |
| %add = add nsw i32 %0, %1, !dbg !60 |
| %2 = load i32, i32* @g, align 4, !dbg !61 |
| %add1 = add nsw i32 %2, %add, !dbg !61 |
| store i32 %add1, i32* @g, align 4, !dbg !61 |
| ret void, !dbg !62 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_fastcallcc void @"\01@fastcall3@12"(i32 inreg %a, i32 inreg %b, i32 %c) #0 !dbg !63 { |
| entry: |
| %c.addr = alloca i32, align 4 |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| store i32 %c, i32* %c.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !65, metadata !DIExpression()), !dbg !66 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !67, metadata !DIExpression()), !dbg !68 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !69, metadata !DIExpression()), !dbg !70 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !71 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !72 |
| %add = add nsw i32 %0, %1, !dbg !73 |
| %2 = load i32, i32* %c.addr, align 4, !dbg !74 |
| %add1 = add nsw i32 %add, %2, !dbg !75 |
| %3 = load i32, i32* @g, align 4, !dbg !76 |
| %add2 = add nsw i32 %3, %add1, !dbg !76 |
| store i32 %add2, i32* @g, align 4, !dbg !76 |
| ret void, !dbg !77 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_stdcallcc void @"\01_stdcall1@4"(i32 %a) #0 !dbg !78 { |
| entry: |
| %a.addr = alloca i32, align 4 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !80, metadata !DIExpression()), !dbg !81 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !82 |
| %1 = load i32, i32* @g, align 4, !dbg !83 |
| %add = add nsw i32 %1, %0, !dbg !83 |
| store i32 %add, i32* @g, align 4, !dbg !83 |
| ret void, !dbg !84 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_stdcallcc void @"\01_stdcall2@8"(i32 %a, i32 %b) #0 !dbg !85 { |
| entry: |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !87, metadata !DIExpression()), !dbg !88 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !89, metadata !DIExpression()), !dbg !90 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !91 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !92 |
| %add = add nsw i32 %0, %1, !dbg !93 |
| %2 = load i32, i32* @g, align 4, !dbg !94 |
| %add1 = add nsw i32 %2, %add, !dbg !94 |
| store i32 %add1, i32* @g, align 4, !dbg !94 |
| ret void, !dbg !95 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_stdcallcc void @"\01_stdcall3@12"(i32 %a, i32 %b, i32 %c) #0 !dbg !96 { |
| entry: |
| %c.addr = alloca i32, align 4 |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| store i32 %c, i32* %c.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !98, metadata !DIExpression()), !dbg !99 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !100, metadata !DIExpression()), !dbg !101 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !102, metadata !DIExpression()), !dbg !103 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !104 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !105 |
| %add = add nsw i32 %0, %1, !dbg !106 |
| %2 = load i32, i32* %c.addr, align 4, !dbg !107 |
| %add1 = add nsw i32 %add, %2, !dbg !108 |
| %3 = load i32, i32* @g, align 4, !dbg !109 |
| %add2 = add nsw i32 %3, %add1, !dbg !109 |
| store i32 %add2, i32* @g, align 4, !dbg !109 |
| ret void, !dbg !110 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_thiscallcc void @"\01?thiscall1@Foo@@QAEXH@Z"(%struct.Foo* %this, i32 %a) #0 align 2 !dbg !111 { |
| entry: |
| %a.addr = alloca i32, align 4 |
| %this.addr = alloca %struct.Foo*, align 4 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !124, metadata !DIExpression()), !dbg !125 |
| store %struct.Foo* %this, %struct.Foo** %this.addr, align 4 |
| call void @llvm.dbg.declare(metadata %struct.Foo** %this.addr, metadata !126, metadata !DIExpression()), !dbg !128 |
| %this1 = load %struct.Foo*, %struct.Foo** %this.addr, align 4 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !129 |
| %1 = load i32, i32* @g, align 4, !dbg !130 |
| %add = add nsw i32 %1, %0, !dbg !130 |
| store i32 %add, i32* @g, align 4, !dbg !130 |
| ret void, !dbg !131 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_thiscallcc void @"\01?thiscall2@Foo@@QAEXHH@Z"(%struct.Foo* %this, i32 %a, i32 %b) #0 align 2 !dbg !132 { |
| entry: |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| %this.addr = alloca %struct.Foo*, align 4 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !133, metadata !DIExpression()), !dbg !134 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !135, metadata !DIExpression()), !dbg !136 |
| store %struct.Foo* %this, %struct.Foo** %this.addr, align 4 |
| call void @llvm.dbg.declare(metadata %struct.Foo** %this.addr, metadata !137, metadata !DIExpression()), !dbg !138 |
| %this1 = load %struct.Foo*, %struct.Foo** %this.addr, align 4 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !139 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !140 |
| %add = add nsw i32 %0, %1, !dbg !141 |
| %2 = load i32, i32* @g, align 4, !dbg !142 |
| %add2 = add nsw i32 %2, %add, !dbg !142 |
| store i32 %add2, i32* @g, align 4, !dbg !142 |
| ret void, !dbg !143 |
| } |
| |
| ; Function Attrs: noinline nounwind optnone |
| define x86_thiscallcc void @"\01?thiscall3@Foo@@QAEXHHH@Z"(%struct.Foo* %this, i32 %a, i32 %b, i32 %c) #0 align 2 !dbg !144 { |
| entry: |
| %c.addr = alloca i32, align 4 |
| %b.addr = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| %this.addr = alloca %struct.Foo*, align 4 |
| store i32 %c, i32* %c.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %c.addr, metadata !145, metadata !DIExpression()), !dbg !146 |
| store i32 %b, i32* %b.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !147, metadata !DIExpression()), !dbg !148 |
| store i32 %a, i32* %a.addr, align 4 |
| call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !149, metadata !DIExpression()), !dbg !150 |
| store %struct.Foo* %this, %struct.Foo** %this.addr, align 4 |
| call void @llvm.dbg.declare(metadata %struct.Foo** %this.addr, metadata !151, metadata !DIExpression()), !dbg !152 |
| %this1 = load %struct.Foo*, %struct.Foo** %this.addr, align 4 |
| %0 = load i32, i32* %a.addr, align 4, !dbg !153 |
| %1 = load i32, i32* %b.addr, align 4, !dbg !154 |
| %add = add nsw i32 %0, %1, !dbg !155 |
| %2 = load i32, i32* %c.addr, align 4, !dbg !156 |
| %add2 = add nsw i32 %add, %2, !dbg !157 |
| %3 = load i32, i32* @g, align 4, !dbg !158 |
| %add3 = add nsw i32 %3, %add2, !dbg !158 |
| store i32 %add3, i32* @g, align 4, !dbg !158 |
| ret void, !dbg !159 |
| } |
| |
| 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" } |
| attributes #1 = { nounwind readnone speculatable } |
| |
| !llvm.dbg.cu = !{!0} |
| !llvm.module.flags = !{!3, !4, !5, !6} |
| !llvm.ident = !{!7} |
| |
| !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) |
| !1 = !DIFile(filename: "t.c", directory: "C:\5Csrc\5Cllvm-project\5Cbuild", checksumkind: CSK_MD5, checksum: "0ce3e4edcf2f8511157da4edb99fcdf4") |
| !2 = !{} |
| !3 = !{i32 1, !"NumRegisterParameters", i32 0} |
| !4 = !{i32 2, !"CodeView", i32 1} |
| !5 = !{i32 2, !"Debug Info Version", i32 3} |
| !6 = !{i32 1, !"wchar_size", i32 2} |
| !7 = !{!"clang version 6.0.0 "} |
| !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) |
| !9 = !DISubroutineType(types: !10) |
| !10 = !{null, !11} |
| !11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) |
| !12 = !DILocalVariable(name: "a", arg: 1, scope: !8, file: !1, line: 4, type: !11) |
| !13 = !DILocation(line: 4, column: 17, scope: !8) |
| !14 = !DILocation(line: 4, column: 27, scope: !8) |
| !15 = !DILocation(line: 4, column: 24, scope: !8) |
| !16 = !DILocation(line: 4, column: 30, scope: !8) |
| !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) |
| !18 = !DISubroutineType(types: !19) |
| !19 = !{null, !11, !11} |
| !20 = !DILocalVariable(name: "b", arg: 2, scope: !17, file: !1, line: 5, type: !11) |
| !21 = !DILocation(line: 5, column: 24, scope: !17) |
| !22 = !DILocalVariable(name: "a", arg: 1, scope: !17, file: !1, line: 5, type: !11) |
| !23 = !DILocation(line: 5, column: 17, scope: !17) |
| !24 = !DILocation(line: 5, column: 34, scope: !17) |
| !25 = !DILocation(line: 5, column: 38, scope: !17) |
| !26 = !DILocation(line: 5, column: 36, scope: !17) |
| !27 = !DILocation(line: 5, column: 31, scope: !17) |
| !28 = !DILocation(line: 5, column: 41, scope: !17) |
| !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) |
| !30 = !DISubroutineType(types: !31) |
| !31 = !{null, !11, !11, !11} |
| !32 = !DILocalVariable(name: "c", arg: 3, scope: !29, file: !1, line: 6, type: !11) |
| !33 = !DILocation(line: 6, column: 31, scope: !29) |
| !34 = !DILocalVariable(name: "b", arg: 2, scope: !29, file: !1, line: 6, type: !11) |
| !35 = !DILocation(line: 6, column: 24, scope: !29) |
| !36 = !DILocalVariable(name: "a", arg: 1, scope: !29, file: !1, line: 6, type: !11) |
| !37 = !DILocation(line: 6, column: 17, scope: !29) |
| !38 = !DILocation(line: 6, column: 41, scope: !29) |
| !39 = !DILocation(line: 6, column: 45, scope: !29) |
| !40 = !DILocation(line: 6, column: 43, scope: !29) |
| !41 = !DILocation(line: 6, column: 49, scope: !29) |
| !42 = !DILocation(line: 6, column: 47, scope: !29) |
| !43 = !DILocation(line: 6, column: 38, scope: !29) |
| !44 = !DILocation(line: 6, column: 52, scope: !29) |
| !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) |
| !46 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !10) |
| !47 = !DILocalVariable(name: "a", arg: 1, scope: !45, file: !1, line: 8, type: !11) |
| !48 = !DILocation(line: 8, column: 31, scope: !45) |
| !49 = !DILocation(line: 8, column: 41, scope: !45) |
| !50 = !DILocation(line: 8, column: 38, scope: !45) |
| !51 = !DILocation(line: 8, column: 44, scope: !45) |
| !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) |
| !53 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !19) |
| !54 = !DILocalVariable(name: "b", arg: 2, scope: !52, file: !1, line: 9, type: !11) |
| !55 = !DILocation(line: 9, column: 38, scope: !52) |
| !56 = !DILocalVariable(name: "a", arg: 1, scope: !52, file: !1, line: 9, type: !11) |
| !57 = !DILocation(line: 9, column: 31, scope: !52) |
| !58 = !DILocation(line: 9, column: 48, scope: !52) |
| !59 = !DILocation(line: 9, column: 52, scope: !52) |
| !60 = !DILocation(line: 9, column: 50, scope: !52) |
| !61 = !DILocation(line: 9, column: 45, scope: !52) |
| !62 = !DILocation(line: 9, column: 55, scope: !52) |
| !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) |
| !64 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !31) |
| !65 = !DILocalVariable(name: "c", arg: 3, scope: !63, file: !1, line: 10, type: !11) |
| !66 = !DILocation(line: 10, column: 45, scope: !63) |
| !67 = !DILocalVariable(name: "b", arg: 2, scope: !63, file: !1, line: 10, type: !11) |
| !68 = !DILocation(line: 10, column: 38, scope: !63) |
| !69 = !DILocalVariable(name: "a", arg: 1, scope: !63, file: !1, line: 10, type: !11) |
| !70 = !DILocation(line: 10, column: 31, scope: !63) |
| !71 = !DILocation(line: 10, column: 55, scope: !63) |
| !72 = !DILocation(line: 10, column: 59, scope: !63) |
| !73 = !DILocation(line: 10, column: 57, scope: !63) |
| !74 = !DILocation(line: 10, column: 63, scope: !63) |
| !75 = !DILocation(line: 10, column: 61, scope: !63) |
| !76 = !DILocation(line: 10, column: 52, scope: !63) |
| !77 = !DILocation(line: 10, column: 66, scope: !63) |
| !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) |
| !79 = !DISubroutineType(cc: DW_CC_BORLAND_stdcall, types: !10) |
| !80 = !DILocalVariable(name: "a", arg: 1, scope: !78, file: !1, line: 12, type: !11) |
| !81 = !DILocation(line: 12, column: 29, scope: !78) |
| !82 = !DILocation(line: 12, column: 39, scope: !78) |
| !83 = !DILocation(line: 12, column: 36, scope: !78) |
| !84 = !DILocation(line: 12, column: 42, scope: !78) |
| !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) |
| !86 = !DISubroutineType(cc: DW_CC_BORLAND_stdcall, types: !19) |
| !87 = !DILocalVariable(name: "b", arg: 2, scope: !85, file: !1, line: 13, type: !11) |
| !88 = !DILocation(line: 13, column: 36, scope: !85) |
| !89 = !DILocalVariable(name: "a", arg: 1, scope: !85, file: !1, line: 13, type: !11) |
| !90 = !DILocation(line: 13, column: 29, scope: !85) |
| !91 = !DILocation(line: 13, column: 46, scope: !85) |
| !92 = !DILocation(line: 13, column: 50, scope: !85) |
| !93 = !DILocation(line: 13, column: 48, scope: !85) |
| !94 = !DILocation(line: 13, column: 43, scope: !85) |
| !95 = !DILocation(line: 13, column: 53, scope: !85) |
| !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) |
| !97 = !DISubroutineType(cc: DW_CC_BORLAND_stdcall, types: !31) |
| !98 = !DILocalVariable(name: "c", arg: 3, scope: !96, file: !1, line: 14, type: !11) |
| !99 = !DILocation(line: 14, column: 43, scope: !96) |
| !100 = !DILocalVariable(name: "b", arg: 2, scope: !96, file: !1, line: 14, type: !11) |
| !101 = !DILocation(line: 14, column: 36, scope: !96) |
| !102 = !DILocalVariable(name: "a", arg: 1, scope: !96, file: !1, line: 14, type: !11) |
| !103 = !DILocation(line: 14, column: 29, scope: !96) |
| !104 = !DILocation(line: 14, column: 53, scope: !96) |
| !105 = !DILocation(line: 14, column: 57, scope: !96) |
| !106 = !DILocation(line: 14, column: 55, scope: !96) |
| !107 = !DILocation(line: 14, column: 61, scope: !96) |
| !108 = !DILocation(line: 14, column: 59, scope: !96) |
| !109 = !DILocation(line: 14, column: 50, scope: !96) |
| !110 = !DILocation(line: 14, column: 64, scope: !96) |
| !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) |
| !112 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", file: !1, line: 17, size: 8, elements: !113, identifier: ".?AUFoo@@") |
| !113 = !{!114, !118, !121} |
| !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) |
| !115 = !DISubroutineType(cc: DW_CC_BORLAND_thiscall, types: !116) |
| !116 = !{null, !117, !11} |
| !117 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !112, size: 32, flags: DIFlagArtificial | DIFlagObjectPointer) |
| !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) |
| !119 = !DISubroutineType(cc: DW_CC_BORLAND_thiscall, types: !120) |
| !120 = !{null, !117, !11, !11} |
| !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) |
| !122 = !DISubroutineType(cc: DW_CC_BORLAND_thiscall, types: !123) |
| !123 = !{null, !117, !11, !11, !11} |
| !124 = !DILocalVariable(name: "a", arg: 2, scope: !111, file: !1, line: 23, type: !11) |
| !125 = !DILocation(line: 23, column: 25, scope: !111) |
| !126 = !DILocalVariable(name: "this", arg: 1, scope: !111, type: !127, flags: DIFlagArtificial | DIFlagObjectPointer) |
| !127 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !112, size: 32) |
| !128 = !DILocation(line: 0, scope: !111) |
| !129 = !DILocation(line: 23, column: 35, scope: !111) |
| !130 = !DILocation(line: 23, column: 32, scope: !111) |
| !131 = !DILocation(line: 23, column: 38, scope: !111) |
| !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) |
| !133 = !DILocalVariable(name: "b", arg: 3, scope: !132, file: !1, line: 24, type: !11) |
| !134 = !DILocation(line: 24, column: 32, scope: !132) |
| !135 = !DILocalVariable(name: "a", arg: 2, scope: !132, file: !1, line: 24, type: !11) |
| !136 = !DILocation(line: 24, column: 25, scope: !132) |
| !137 = !DILocalVariable(name: "this", arg: 1, scope: !132, type: !127, flags: DIFlagArtificial | DIFlagObjectPointer) |
| !138 = !DILocation(line: 0, scope: !132) |
| !139 = !DILocation(line: 24, column: 42, scope: !132) |
| !140 = !DILocation(line: 24, column: 46, scope: !132) |
| !141 = !DILocation(line: 24, column: 44, scope: !132) |
| !142 = !DILocation(line: 24, column: 39, scope: !132) |
| !143 = !DILocation(line: 24, column: 49, scope: !132) |
| !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) |
| !145 = !DILocalVariable(name: "c", arg: 4, scope: !144, file: !1, line: 25, type: !11) |
| !146 = !DILocation(line: 25, column: 39, scope: !144) |
| !147 = !DILocalVariable(name: "b", arg: 3, scope: !144, file: !1, line: 25, type: !11) |
| !148 = !DILocation(line: 25, column: 32, scope: !144) |
| !149 = !DILocalVariable(name: "a", arg: 2, scope: !144, file: !1, line: 25, type: !11) |
| !150 = !DILocation(line: 25, column: 25, scope: !144) |
| !151 = !DILocalVariable(name: "this", arg: 1, scope: !144, type: !127, flags: DIFlagArtificial | DIFlagObjectPointer) |
| !152 = !DILocation(line: 0, scope: !144) |
| !153 = !DILocation(line: 25, column: 49, scope: !144) |
| !154 = !DILocation(line: 25, column: 53, scope: !144) |
| !155 = !DILocation(line: 25, column: 51, scope: !144) |
| !156 = !DILocation(line: 25, column: 57, scope: !144) |
| !157 = !DILocation(line: 25, column: 55, scope: !144) |
| !158 = !DILocation(line: 25, column: 46, scope: !144) |
| !159 = !DILocation(line: 25, column: 60, scope: !144) |