brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.7 KiB · f256389 Raw
387 lines · plain
1; RUN: llc %s -pass-remarks-analysis=gisel-irtranslator-memsize -pass-remarks-output=%t.opt.yaml -pass-remarks-filter=gisel-irtranslator-memsize -global-isel -o /dev/null 2>&1 | FileCheck %s --check-prefix=GISEL --implicit-check-not=GISEL2; RUN: cat %t.opt.yaml | FileCheck -check-prefix=YAML %s3 4source_filename = "memsize.c"5target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"6target triple = "arm64-apple-ios7.0.0"7 8declare ptr @__memmove_chk(ptr, ptr, i64, i64) #19declare ptr @__memcpy_chk(ptr, ptr, i64, i64) #110declare ptr @__memset_chk(ptr, i32, i64, i64) #111declare i64 @llvm.objectsize.i64.p0(ptr, i1 immarg, i1 immarg, i1 immarg) #212declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) argmemonly nounwind willreturn writeonly13declare void @llvm.memmove.p0.p0.i64(ptr nocapture, ptr nocapture readonly, i64, i1 immarg) argmemonly nounwind willreturn14declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) argmemonly nounwind willreturn15declare void @bzero(ptr nocapture, i64) nofree nounwind16declare void @bcopy(ptr nocapture, ptr nocapture, i64) nofree nounwind17declare ptr @memset(ptr, i32, i64)18 19define void @memcpy_dynamic(ptr %d, ptr %s, i64 %l) #0 !dbg !14 {20entry:21  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !1622; GISEL: remark: memsize.c:4:3: Call to memcpy.{{$}}23  %call = call ptr @__memcpy_chk(ptr %d, ptr %s, i64 %l, i64 %0) #4, !dbg !1724  ret void, !dbg !1825}26 27define void @memcpy_single(ptr %d, ptr %s, i64 %l) #0 !dbg !23 {28entry:29  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !2430; GISEL: remark: memsize.c:10:3: Call to memcpy. Memory operation size: 1 bytes.31  %call = call ptr @__memcpy_chk(ptr %d, ptr %s, i64 1, i64 %0) #4, !dbg !2532  ret void, !dbg !2633}34 35define void @memcpy_intrinsic(ptr %d, ptr %s, i64 %l) #0 {36entry:37  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false)38; GISEL: remark: <unknown>:0:0: Call to memcpy. Memory operation size: 1 bytes.39  call void @llvm.memcpy.p0.p0.i64(ptr %d, ptr %s, i64 1, i1 false)40  ret void41}42 43define void @memcpy_static(ptr %d, ptr %s, i64 %l) #0 !dbg !27 {44entry:45  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !2846; GISEL: remark: memsize.c:13:3: Call to memcpy. Memory operation size: 100 bytes.47  %call = call ptr @__memcpy_chk(ptr %d, ptr %s, i64 100, i64 %0) #4, !dbg !2948  ret void, !dbg !3049}50 51define void @memcpy_huge(ptr %d, ptr %s, i64 %l) #0 !dbg !31 {52entry:53  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !3254; GISEL: remark: memsize.c:16:3: Call to memcpy. Memory operation size: 100000 bytes.55  %call = call ptr @__memcpy_chk(ptr %d, ptr %s, i64 100000, i64 %0) #4, !dbg !3356  ret void, !dbg !3457}58 59define void @memmove_dynamic(ptr %d, ptr %s, i64 %l) #0 {60entry:61  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false)62; GISEL: remark: <unknown>:0:0: Call to memmove.{{$}}63  %call = call ptr @__memmove_chk(ptr %d, ptr %s, i64 %l, i64 %0) #464  ret void65}66 67define void @memmove_single(ptr %d, ptr %s, i64 %l) #0 {68entry:69  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false)70; GISEL: remark: <unknown>:0:0: Call to memmove. Memory operation size: 1 bytes.71  %call = call ptr @__memmove_chk(ptr %d, ptr %s, i64 1, i64 %0) #472  ret void73}74 75define void @memmove_static(ptr %d, ptr %s, i64 %l) #0 {76entry:77  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false)78; GISEL: remark: <unknown>:0:0: Call to memmove. Memory operation size: 100 bytes.79  %call = call ptr @__memmove_chk(ptr %d, ptr %s, i64 100, i64 %0) #480  ret void81}82 83define void @memmove_huge(ptr %d, ptr %s, i64 %l) #0 {84entry:85  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false)86; GISEL: remark: <unknown>:0:0: Call to memmove. Memory operation size: 100000 bytes.87  %call = call ptr @__memmove_chk(ptr %d, ptr %s, i64 100000, i64 %0) #488  ret void89}90 91define void @memset_dynamic(ptr %d, i64 %l) #0 !dbg !38 {92entry:93  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !3994; GISEL: remark: memsize.c:22:3: Call to memset.{{$}}95  %call = call ptr @__memset_chk(ptr %d, i32 0, i64 %l, i64 %0) #4, !dbg !4096  ret void, !dbg !4197}98 99define void @memset_single(ptr %d, i64 %l) #0 !dbg !46 {100entry:101  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !47102; GISEL: remark: memsize.c:28:3: Call to memset. Memory operation size: 1 bytes.103  %call = call ptr @__memset_chk(ptr %d, i32 0, i64 1, i64 %0) #4, !dbg !48104  ret void, !dbg !49105}106 107define void @memset_static(ptr %d, i64 %l) #0 !dbg !50 {108entry:109  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !51110; GISEL: remark: memsize.c:31:3: Call to memset. Memory operation size: 100 bytes.111  %call = call ptr @__memset_chk(ptr %d, i32 0, i64 100, i64 %0) #4, !dbg !52112  ret void, !dbg !53113}114 115define void @memset_huge(ptr %d, i64 %l) #0 !dbg !54 {116entry:117  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !55118; GISEL: remark: memsize.c:34:3: Call to memset. Memory operation size: 100000 bytes.119  %call = call ptr @__memset_chk(ptr %d, i32 0, i64 100000, i64 %0) #4, !dbg !56120  ret void, !dbg !57121}122 123define void @memset_empty(ptr %d, i64 %l) #0 !dbg !42 {124entry:125  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !43126; GISEL: remark: memsize.c:25:3: Call to memset. Memory operation size: 0 bytes.127  %call = call ptr @__memset_chk(ptr %d, i32 0, i64 0, i64 %0) #4, !dbg !44128  ret void, !dbg !45129}130 131; YAML-LABEL: Function:        memcpy_empty132define void @memcpy_empty(ptr %d, ptr %s, i64 %l) #0 !dbg !19 {133entry:134  %0 = call i64 @llvm.objectsize.i64.p0(ptr %d, i1 false, i1 true, i1 false), !dbg !20135; GISEL: remark: memsize.c:7:3: Call to memcpy. Memory operation size: 0 bytes.136  %call = call ptr @__memcpy_chk(ptr %d, ptr %s, i64 0, i64 %0) #4, !dbg !21137  ret void, !dbg !22138}139 140; Emit remarks for memcpy, memmove, memset, bzero, bcopy with known constant141; sizes to an object of known size.142define void @known_call_with_dereferenceable_bytes(ptr dereferenceable(42) %dst, ptr dereferenceable(314) %src) {143; GISEL: Call to memset. Memory operation size: 1 bytes.144; GISEL-NOT:  Read Variables:145; GISEL-NEXT:  Written Variables: <unknown> (42 bytes).146; YAML:       --- !Analysis147; YAML:       gisel-irtranslator-memsize148; YAML:       Name:            MemoryOpIntrinsicCall149; YAML-LABEL: Function:        known_call_with_dereferenceable_bytes150; YAML-NEXT:  Args:151; YAML-NEXT:    - String:          'Call to '152; YAML-NEXT:    - Callee:          memset153; YAML-NEXT:    - String:          .154; YAML-NEXT:    - String:          ' Memory operation size: '155; YAML-NEXT:    - StoreSize:       '1'156; YAML-NEXT:    - String:          ' bytes.'157; YAML-NEXT:    - String:          "\n Written Variables: "158; YAML-NEXT:    - WVarName:        '<unknown>'159; YAML-NEXT:    - String:          ' ('160; YAML-NEXT:    - WVarSize:        '42'161; YAML-NEXT:    - String:          ' bytes)'162; YAML-NEXT:    - String:          .163; YAML-NEXT:    - String:          ' Inlined: '164; YAML-NEXT:    - StoreInlined:    'false'165; YAML-NEXT:    - String:          .166; YAML-NEXT:    - String:          ' Volatile: '167; YAML-NEXT:    - StoreVolatile:   'false'168; YAML-NEXT:    - String:          .169; YAML-NEXT:    - String:          ' Atomic: '170; YAML-NEXT:    - StoreAtomic:     'false'171; YAML-NEXT:    - String:          .172; YAML-NEXT:  ...173  call void @llvm.memset.p0.i64(ptr %dst, i8 0, i64 1, i1 false)174 175; GISEL: Call to memcpy. Memory operation size: 1 bytes.176; GISEL-NEXT:  Read Variables: <unknown> (314 bytes).177; GISEL-NEXT:  Written Variables: <unknown> (42 bytes).178; YAML:       --- !Analysis179; YAML:       gisel-irtranslator-memsize180; YAML:       Name:            MemoryOpIntrinsicCall181; YAML-LABEL: Function:        known_call_with_dereferenceable_bytes182; YAML-NEXT:  Args:183; YAML-NEXT:    - String:          'Call to '184; YAML-NEXT:    - Callee:          memcpy185; YAML-NEXT:    - String:          .186; YAML-NEXT:    - String:          ' Memory operation size: '187; YAML-NEXT:    - StoreSize:       '1'188; YAML-NEXT:    - String:          ' bytes.'189; YAML-NEXT:    - String:          "\n Read Variables: "190; YAML-NEXT:    - RVarName:        '<unknown>'191; YAML-NEXT:    - String:          ' ('192; YAML-NEXT:    - RVarSize:        '314'193; YAML-NEXT:    - String:          ' bytes)'194; YAML-NEXT:    - String:          .195; YAML-NEXT:    - String:          "\n Written Variables: "196; YAML-NEXT:    - WVarName:        '<unknown>'197; YAML-NEXT:    - String:          ' ('198; YAML-NEXT:    - WVarSize:        '42'199; YAML-NEXT:    - String:          ' bytes)'200; YAML-NEXT:    - String:          .201; YAML-NEXT:    - String:          ' Inlined: '202; YAML-NEXT:    - StoreInlined:    'false'203; YAML-NEXT:    - String:          .204; YAML-NEXT:    - String:          ' Volatile: '205; YAML-NEXT:    - StoreVolatile:   'false'206; YAML-NEXT:    - String:          .207; YAML-NEXT:    - String:          ' Atomic: '208; YAML-NEXT:    - StoreAtomic:     'false'209; YAML-NEXT:    - String:          .210; YAML-NEXT:  ...211  call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 1, i1 false)212 213; GISEL: Call to memmove. Memory operation size: 1 bytes.214; GISEL-NEXT:  Read Variables: <unknown> (314 bytes).215; GISEL-NEXT:  Written Variables: <unknown> (42 bytes).216; YAML:       --- !Analysis217; YAML:       gisel-irtranslator-memsize218; YAML:       Name:            MemoryOpIntrinsicCall219; YAML-LABEL: Function:        known_call_with_dereferenceable_bytes220; YAML-NEXT:  Args:221; YAML-NEXT:    - String:          'Call to '222; YAML-NEXT:    - Callee:          memmove223; YAML-NEXT:    - String:          .224; YAML-NEXT:    - String:          ' Memory operation size: '225; YAML-NEXT:    - StoreSize:       '1'226; YAML-NEXT:    - String:          ' bytes.'227; YAML-NEXT:    - String:          "\n Read Variables: "228; YAML-NEXT:    - RVarName:        '<unknown>'229; YAML-NEXT:    - String:          ' ('230; YAML-NEXT:    - RVarSize:        '314'231; YAML-NEXT:    - String:          ' bytes)'232; YAML-NEXT:    - String:          .233; YAML-NEXT:    - String:          "\n Written Variables: "234; YAML-NEXT:    - WVarName:        '<unknown>'235; YAML-NEXT:    - String:          ' ('236; YAML-NEXT:    - WVarSize:        '42'237; YAML-NEXT:    - String:          ' bytes)'238; YAML-NEXT:    - String:          .239; YAML-NEXT:    - String:          ' Inlined: '240; YAML-NEXT:    - StoreInlined:    'false'241; YAML-NEXT:    - String:          .242; YAML-NEXT:    - String:          ' Volatile: '243; YAML-NEXT:    - StoreVolatile:   'false'244; YAML-NEXT:    - String:          .245; YAML-NEXT:    - String:          ' Atomic: '246; YAML-NEXT:    - StoreAtomic:     'false'247; YAML-NEXT:    - String:          .248; YAML-NEXT:  ...249  call void @llvm.memmove.p0.p0.i64(ptr %dst, ptr %src, i64 1, i1 false)250 251; GISEL: Call to bzero. Memory operation size: 1 bytes.252; GISEL-NOT:  Read Variables:253; GISEL-NEXT:  Written Variables: <unknown> (42 bytes).254; YAML:       --- !Analysis255; YAML:       gisel-irtranslator-memsize256; YAML:       Name:            MemoryOpCall257; YAML-LABEL: Function:        known_call_with_dereferenceable_bytes258; YAML-NEXT:  Args:259; YAML-NEXT:    - String:          'Call to '260; YAML-NEXT:    - Callee:          bzero261; YAML-NEXT:    - String:          .262; YAML-NEXT:    - String:          ' Memory operation size: '263; YAML-NEXT:    - StoreSize:       '1'264; YAML-NEXT:    - String:          ' bytes.'265; YAML-NEXT:    - String:          "\n Written Variables: "266; YAML-NEXT:    - WVarName:        '<unknown>'267; YAML-NEXT:    - String:          ' ('268; YAML-NEXT:    - WVarSize:        '42'269; YAML-NEXT:    - String:          ' bytes)'270; YAML-NEXT:    - String:          .271; YAML-NEXT:  ...272  call void @bzero(ptr %dst, i64 1)273 274; GISEL: Call to bcopy. Memory operation size: 1 bytes.275; GISEL-NEXT:  Read Variables: <unknown> (314 bytes).276; GISEL-NEXT:  Written Variables: <unknown> (42 bytes).277; YAML:       --- !Analysis278; YAML:       gisel-irtranslator-memsize279; YAML:       Name:            MemoryOpCall280; YAML-LABEL: Function:        known_call_with_dereferenceable_bytes281; YAML-NEXT:  Args:282; YAML-NEXT:    - String:          'Call to '283; YAML-NEXT:    - Callee:          bcopy284; YAML-NEXT:    - String:          .285; YAML-NEXT:    - String:          ' Memory operation size: '286; YAML-NEXT:    - StoreSize:       '1'287; YAML-NEXT:    - String:          ' bytes.'288; YAML-NEXT:    - String:          "\n Read Variables: "289; YAML-NEXT:    - RVarName:        '<unknown>'290; YAML-NEXT:    - String:          ' ('291; YAML-NEXT:    - RVarSize:        '314'292; YAML-NEXT:    - String:          ' bytes)'293; YAML-NEXT:    - String:          .294; YAML-NEXT:    - String:          "\n Written Variables: "295; YAML-NEXT:    - WVarName:        '<unknown>'296; YAML-NEXT:    - String:          ' ('297; YAML-NEXT:    - WVarSize:        '42'298; YAML-NEXT:    - String:          ' bytes)'299; YAML-NEXT:    - String:          .300; YAML-NEXT:  ...301  call void @bcopy(ptr %dst, ptr %src, i64 1)302  ret void303}304 305@dropbear = external unnamed_addr constant [3 x i8], align 1306@koala = external unnamed_addr constant [7 x i8], align 1307 308define void @slicePun() {309bb:310; GISEL: remark: <unknown>:0:0: Call to memcpy. Memory operation size: 24 bytes.{{$}}311; GISEL-NEXT: Read Variables: koala (56 bytes).312; GISEL-NEXT: Written Variables: dropbear (24 bytes).313  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 @dropbear,314                                            ptr @koala, i64 24, i1 false)315  ret void316}317 318attributes #0 = { noinline nounwind ssp uwtable "frame-pointer"="non-leaf" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-a7" "target-features"="+aes,+crypto,+fp-armv8,+neon,+sha2" }319attributes #1 = { nounwind "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-a7" "target-features"="+aes,+crypto,+fp-armv8,+neon,+sha2" }320attributes #2 = { nofree nosync nounwind readnone speculatable willreturn }321attributes #3 = { argmemonly nofree nosync nounwind willreturn }322attributes #4 = { nounwind }323 324!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}325!llvm.dbg.cu = !{!10}326!llvm.ident = !{!13}327 328!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 12, i32 0]}329!1 = !{i32 2, !"Debug Info Version", i32 3}330!2 = !{i32 1, !"wchar_size", i32 4}331!3 = !{i32 8, !"branch-target-enforcement", i32 0}332!4 = !{i32 8, !"sign-return-address", i32 0}333!5 = !{i32 8, !"sign-return-address-all", i32 0}334!6 = !{i32 8, !"sign-return-address-with-bkey", i32 0}335!7 = !{i32 7, !"PIC Level", i32 2}336!8 = !{i32 7, !"uwtable", i32 1}337!9 = !{i32 7, !"frame-pointer", i32 1}338!10 = distinct !DICompileUnit(language: DW_LANG_C99, file: !11, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug, enums: !12, splitDebugInlining: false, nameTableKind: None, sysroot: "/")339!11 = !DIFile(filename: "memsize.c", directory: "")340!12 = !{}341!13 = !{!"clang"}342!14 = distinct !DISubprogram(name: "memcpy_dynamic", scope: !11, file: !11, line: 3, type: !15, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)343!15 = !DISubroutineType(types: !12)344!16 = !DILocation(line: 4, column: 36, scope: !14)345!17 = !DILocation(line: 4, column: 3, scope: !14)346!18 = !DILocation(line: 5, column: 1, scope: !14)347!19 = distinct !DISubprogram(name: "memcpy_empty", scope: !11, file: !11, line: 6, type: !15, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)348!20 = !DILocation(line: 7, column: 36, scope: !19)349!21 = !DILocation(line: 7, column: 3, scope: !19)350!22 = !DILocation(line: 8, column: 1, scope: !19)351!23 = distinct !DISubprogram(name: "memcpy_single", scope: !11, file: !11, line: 9, type: !15, scopeLine: 9, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)352!24 = !DILocation(line: 10, column: 36, scope: !23)353!25 = !DILocation(line: 10, column: 3, scope: !23)354!26 = !DILocation(line: 11, column: 1, scope: !23)355!27 = distinct !DISubprogram(name: "memcpy_static", scope: !11, file: !11, line: 12, type: !15, scopeLine: 12, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)356!28 = !DILocation(line: 13, column: 38, scope: !27)357!29 = !DILocation(line: 13, column: 3, scope: !27)358!30 = !DILocation(line: 14, column: 1, scope: !27)359!31 = distinct !DISubprogram(name: "memcpy_huge", scope: !11, file: !11, line: 15, type: !15, scopeLine: 15, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)360!32 = !DILocation(line: 16, column: 41, scope: !31)361!33 = !DILocation(line: 16, column: 3, scope: !31)362!34 = !DILocation(line: 17, column: 1, scope: !31)363!35 = distinct !DISubprogram(name: "memcpy_inline", scope: !11, file: !11, line: 18, type: !15, scopeLine: 18, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)364!36 = !DILocation(line: 19, column: 3, scope: !35)365!37 = !DILocation(line: 20, column: 1, scope: !35)366!38 = distinct !DISubprogram(name: "memset_dynamic", scope: !11, file: !11, line: 21, type: !15, scopeLine: 21, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)367!39 = !DILocation(line: 22, column: 36, scope: !38)368!40 = !DILocation(line: 22, column: 3, scope: !38)369!41 = !DILocation(line: 23, column: 1, scope: !38)370!42 = distinct !DISubprogram(name: "memset_empty", scope: !11, file: !11, line: 24, type: !15, scopeLine: 24, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)371!43 = !DILocation(line: 25, column: 36, scope: !42)372!44 = !DILocation(line: 25, column: 3, scope: !42)373!45 = !DILocation(line: 26, column: 1, scope: !42)374!46 = distinct !DISubprogram(name: "memset_single", scope: !11, file: !11, line: 27, type: !15, scopeLine: 27, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)375!47 = !DILocation(line: 28, column: 36, scope: !46)376!48 = !DILocation(line: 28, column: 3, scope: !46)377!49 = !DILocation(line: 29, column: 1, scope: !46)378!50 = distinct !DISubprogram(name: "memset_static", scope: !11, file: !11, line: 30, type: !15, scopeLine: 30, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)379!51 = !DILocation(line: 31, column: 38, scope: !50)380!52 = !DILocation(line: 31, column: 3, scope: !50)381!53 = !DILocation(line: 32, column: 1, scope: !50)382!54 = distinct !DISubprogram(name: "memset_huge", scope: !11, file: !11, line: 33, type: !15, scopeLine: 33, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)383!55 = !DILocation(line: 34, column: 41, scope: !54)384!56 = !DILocation(line: 34, column: 3, scope: !54)385!57 = !DILocation(line: 35, column: 1, scope: !54)386!58 = distinct !DISubprogram(name: "auto_init", scope: !11, file: !11, line: 37, type: !15, scopeLine: 37, spFlags: DISPFlagDefinition, unit: !10, retainedNodes: !12)387