455 lines
24 KiB
LLVM
455 lines
24 KiB
LLVM
; 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" "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" "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)
|