Home | History | Annotate | Download | only in Generic
      1 ; RUN: opt < %s -inline -S | FileCheck %s
      2 
      3 ; This was generated from the following source:
      4 ; int a, b;
      5 ; __attribute__((__always_inline__)) static void callee2() { b = 2; }
      6 ; __attribute__((__nodebug__)) void callee() { a = 1; callee2(); }
      7 ; void caller() { callee(); }
      8 ; by running
      9 ;   clang -S test.c -emit-llvm -O1 -gline-tables-only -fno-strict-aliasing
     10 
     11 ; CHECK-LABEL: @caller(
     12 
     13 ; This instruction did not have a !dbg metadata in the callee.
     14 ; CHECK: store i32 1, {{.*}}, !dbg [[A:!.*]]
     15 
     16 ; This instruction came from callee with a !dbg metadata.
     17 ; CHECK: store i32 2, {{.*}}, !dbg [[B:!.*]]
     18 
     19 ; The remaining instruction from the caller.
     20 ; CHECK: ret void, !dbg [[A]]
     21 
     22 ; Debug location of the code in caller() and of the inlined code that did not
     23 ; have any debug location before.
     24 ; CHECK-DAG: [[A]] = !DILocation(line: 4, scope: !{{[0-9]+}})
     25 
     26 ; Debug location of the inlined code.
     27 ; CHECK-DAG: [[B]] = !DILocation(line: 2, scope: !{{[0-9]+}}, inlinedAt: [[A_INL:![0-9]*]])
     28 ; CHECK-DAG: [[A_INL]] = distinct !DILocation(line: 4, scope: !{{[0-9]+}})
     29 
     30 
     31 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
     32 target triple = "x86_64-unknown-linux-gnu"
     33 
     34 @a = common global i32 0, align 4
     35 @b = common global i32 0, align 4
     36 
     37 ; Function Attrs: nounwind uwtable
     38 define void @callee() #0 {
     39 entry:
     40   store i32 1, i32* @a, align 4
     41   store i32 2, i32* @b, align 4, !dbg !11
     42   ret void
     43 }
     44 
     45 ; Function Attrs: nounwind uwtable
     46 define void @caller() #0 !dbg !4 {
     47 entry:
     48   tail call void @callee(), !dbg !12
     49   ret void, !dbg !12
     50 }
     51 
     52 attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
     53 
     54 !llvm.dbg.cu = !{!0}
     55 !llvm.module.flags = !{!8, !9}
     56 !llvm.ident = !{!10}
     57 
     58 !0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5.0 (210174)", isOptimized: true, emissionKind: 2, file: !1, enums: !2, retainedTypes: !2, subprograms: !3, globals: !2, imports: !2)
     59 !1 = !DIFile(filename: "test.c", directory: "/code/llvm/build0")
     60 !2 = !{}
     61 !3 = !{!4, !7}
     62 !4 = distinct !DISubprogram(name: "caller", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 4, file: !1, scope: !5, type: !6, variables: !2)
     63 !5 = !DIFile(filename: "test.c", directory: "/code/llvm/build0")
     64 !6 = !DISubroutineType(types: !2)
     65 !7 = distinct !DISubprogram(name: "callee2", line: 2, isLocal: true, isDefinition: true, virtualIndex: 6, isOptimized: true, scopeLine: 2, file: !1, scope: !5, type: !6, variables: !2)
     66 !8 = !{i32 2, !"Dwarf Version", i32 4}
     67 !9 = !{i32 2, !"Debug Info Version", i32 3}
     68 !10 = !{!"clang version 3.5.0 (210174)"}
     69 !11 = !DILocation(line: 2, scope: !7)
     70 !12 = !DILocation(line: 4, scope: !4)
     71