Home | History | Annotate | Download | only in X86
      1 ; RUN: llc -filetype=obj -o - %s | llvm-dwarfdump -debug-loc - | FileCheck %s
      2 
      3 ; Note that it would be even better to avoid emitting the empty piece.
      4 ; CHECK:  {{.*}}: DW_OP_piece 0x8{{$}}
      5 
      6 source_filename = "bugpoint-reduced-simplified.ll"
      7 target triple = "i386-apple-ios7.0.0"
      8 
      9 %class.K = type { %class.N, %struct.F, i32 }
     10 %class.N = type { %struct.B }
     11 %struct.B = type { i8 }
     12 %struct.F = type { i8 }
     13 %struct.ConditionPlatformHelper = type { i8 }
     14 %"struct.J<K::L, false, int>::Node" = type { %"class.K::L" }
     15 %"class.K::L" = type { %class.__thread_id }
     16 %class.__thread_id = type { i32 }
     17 %"struct.K::M" = type { %class.I, %class.H }
     18 %class.I = type { i32 }
     19 %class.H = type { i32 }
     20 
     21 ; Function Attrs: nounwind
     22 define void @_Z34swift_getGenericMetadata_argumentsv() #0 !dbg !5 {
     23 entry:
     24   %ref.tmp = alloca %class.K, align 8
     25   %0 = getelementptr inbounds %class.K, %class.K* %ref.tmp, i32 0, i32 0, i32 0, i32 0
     26   %call = tail call i64 @_Z8getCacheP23ConditionPlatformHelper(%struct.ConditionPlatformHelper* undef)
     27   %1 = bitcast %class.K* %ref.tmp to i64*
     28   %LastSearch.i.i = getelementptr inbounds %class.K, %class.K* %ref.tmp, i32 0, i32 0, i32 0
     29   %call.i.i = call %"struct.J<K::L, false, int>::Node"* @_ZN1BIPN1JIN1K1LELb0EiE4NodeEE4loadEv(%struct.B* nonnull %LastSearch.i.i)
     30   %tobool.i.i = icmp eq %"struct.J<K::L, false, int>::Node"* %call.i.i, null
     31   br i1 %tobool.i.i, label %_ZN1NIN1K1LELi0EE11getOrInsertIiEE1AIPS1_ET_.exit.i, label %if.then.i.i
     32 
     33 if.then.i.i:
     34   %2 = lshr i64 %call, 32
     35   %3 = trunc i64 %2 to i32
     36   %Payload.i.i = getelementptr inbounds %"struct.J<K::L, false, int>::Node", %"struct.J<K::L, false, int>::Node"* %call.i.i, i32 0, i32 0
     37   br label %_ZN1NIN1K1LELi0EE11getOrInsertIiEE1AIPS1_ET_.exit.i
     38 
     39 _ZN1NIN1K1LELi0EE11getOrInsertIiEE1AIPS1_ET_.exit.i: ; preds = %if.then.i.i, %entry
     40   %retval.sroa.0.0.i.i = phi %"class.K::L"* [ %Payload.i.i, %if.then.i.i ], [ undef, %entry ]
     41   %call4.i = call %"struct.K::M"* @_ZN1FIN1K1MEE3getEv(%struct.F* undef)
     42   call void @llvm.dbg.value(metadata %"struct.K::M"* %call4.i, metadata !7, metadata !11), !dbg !12
     43   call void @llvm.dbg.value(metadata %"struct.K::M"* %call4.i, metadata !7, metadata !18), !dbg !12
     44   %Handle2.i.i.i.i.i = getelementptr inbounds %"struct.K::M", %"struct.K::M"* %call4.i, i32 0, i32 0, i32 0
     45   %Handle.i.i.i.i.i = getelementptr inbounds %"struct.K::M", %"struct.K::M"* %call4.i, i32 0, i32 1, i32 0
     46   %4 = getelementptr inbounds %"class.K::L", %"class.K::L"* %retval.sroa.0.0.i.i, i32 0, i32 0, i32 0
     47   br label %while.body.i.i.i.i
     48 
     49 while.body.i.i.i.i:
     50   %5 = load i32, i32* %4, align 4
     51   %call.i.i.i.i.i.i = call i32 @_Z6get_idv(), !dbg !12
     52   %call.i.i.i.i.i.i.i = call zeroext i1 @_Z24__libcpp_thread_id_equalii(i32 %5, i32 %call.i.i.i.i.i.i)
     53   %6 = load i32, i32* %Handle2.i.i.i.i.i, align 4
     54   call void @_ZN23ConditionPlatformHelper4waitERii(i32* nonnull dereferenceable(4) %Handle.i.i.i.i.i, i32 %6)
     55   br label %while.body.i.i.i.i
     56 }
     57 
     58 declare i64 @_Z8getCacheP23ConditionPlatformHelper(%struct.ConditionPlatformHelper*) local_unnamed_addr
     59 
     60 declare %"struct.K::M"* @_ZN1FIN1K1MEE3getEv(%struct.F*) local_unnamed_addr
     61 
     62 declare %"struct.J<K::L, false, int>::Node"* @_ZN1BIPN1JIN1K1LELb0EiE4NodeEE4loadEv(%struct.B*) local_unnamed_addr
     63 
     64 declare i32 @_Z6get_idv() local_unnamed_addr
     65 
     66 declare zeroext i1 @_Z24__libcpp_thread_id_equalii(i32, i32) local_unnamed_addr
     67 
     68 declare void @_ZN23ConditionPlatformHelper4waitERii(i32* dereferenceable(4), i32) local_unnamed_addr
     69 
     70 ; Function Attrs: nounwind readnone
     71 declare void @llvm.dbg.value(metadata, metadata, metadata) #1
     72 
     73 attributes #0 = { nounwind "no-frame-pointer-elim-non-leaf" }
     74 attributes #1 = { nounwind readnone }
     75 
     76 !llvm.dbg.cu = !{!0}
     77 !llvm.module.flags = !{!3, !4}
     78 
     79 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
     80 !1 = !DIFile(filename: "test.ii", directory: "/")
     81 !2 = !{}
     82 !3 = !{i32 2, !"Dwarf Version", i32 2}
     83 !4 = !{i32 2, !"Debug Info Version", i32 3}
     84 !5 = distinct !DISubprogram(name: "swift_getGenericMetadata_arguments", linkageName: "_Z34swift_getGenericMetadata_argumentsv", scope: !0, file: !1, line: 95, type: !6, isLocal: false, isDefinition: true, scopeLine: 95, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !2)
     85 !6 = !DISubroutineType(types: !2)
     86 !7 = !DILocalVariable(name: "criticalSection", arg: 2, scope: !8, file: !1, line: 23, type: !10)
     87 !8 = distinct !DISubprogram(name: "<(lambda at test.ii:28:14)>", scope: !0, file: !1, line: 23, type: !6, isLocal: false, isDefinition: true, scopeLine: 23, flags: DIFlagPrototyped, isOptimized: true, unit: !0, templateParams: !2, declaration: !9, retainedNodes: !2)
     88 !9 = !DISubprogram(name: "<(lambda at test.ii:28:14)>", scope: !0, file: !1, line: 23, type: !6, isLocal: false, isDefinition: false, scopeLine: 23, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: true, templateParams: !2)
     89 !10 = distinct !DICompositeType(tag: DW_TAG_class_type, scope: !0, file: !1, line: 28, size: 96, elements: !2)
     90 !11 = !DIExpression(DW_OP_stack_value, DW_OP_LLVM_fragment, 0, 32)
     91 !12 = !DILocation(line: 23, column: 33, scope: !8, inlinedAt: !13)
     92 !13 = distinct !DILocation(line: 28, column: 5, scope: !14, inlinedAt: !16)
     93 !14 = distinct !DISubprogram(name: "<(lambda at test.ii:87:58)>", scope: !0, file: !1, line: 27, type: !6, isLocal: false, isDefinition: true, scopeLine: 27, flags: DIFlagPrototyped, isOptimized: true, unit: !0, templateParams: !2, declaration: !15, retainedNodes: !2)
     94 !15 = !DISubprogram(name: "<(lambda at test.ii:87:58)>", scope: !0, file: !1, line: 27, type: !6, isLocal: false, isDefinition: false, scopeLine: 27, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: true, templateParams: !2)
     95 !16 = distinct !DILocation(line: 99, column: 21, scope: !17)
     96 !17 = !DILexicalBlockFile(scope: !5, file: !1, discriminator: 2)
     97 !18 = !DIExpression(DW_OP_plus_uconst, 4, DW_OP_stack_value, DW_OP_LLVM_fragment, 64, 32)
     98