# RUN: llc -O1 -emit-call-site-info -filetype=obj -mtriple thumbv7em-apple-unknown-macho -start-after=machineverifier %s -o %t.o
# RUN: llvm-dwarfdump %t.o | FileCheck %s

# Crash test, reduced from:
#
# a(float);
# b(double c) {
#   d();
#   a(c);
# }
#
# Some minor surgery was performed on the MIR to remove a call to a truncating
# cast builtin between the calls to "d" and "a", and to force d0 as the copy dst
# and s0 as the forwarding reg.
#
# This was done to test the case where the copy dst (d0) is a super-reg of the
# forwarding reg (s0).

# CHECK: DW_TAG_GNU_call_site
# CHECK-NEXT: DW_AT_abstract_origin {{.*}} "a"
# CHECK-NOT: call_site_parameter

--- |
  target datalayout = "e-m:o-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
  target triple = "thumbv7em-apple-unknown-macho"
  ; Function Attrs: nounwind optsize uwtable
  define arm_aapcs_vfpcc i32 @b(double %c) local_unnamed_addr #0 !dbg !16 {
  entry:
    call void @llvm.dbg.value(metadata double %c, metadata !21, metadata !DIExpression()), !dbg !22
    %call = tail call arm_aapcs_vfpcc i32 bitcast (i32 (...)* @d to i32 ()*)(), !dbg !23
    %conv = fptrunc double %c to float, !dbg !24
    %call1 = tail call arm_aapcs_vfpcc i32 @a(float %conv), !dbg !25
    ret i32 undef, !dbg !26
  }
  declare arm_aapcs_vfpcc i32 @d(...) local_unnamed_addr #0
  declare !dbg !4 arm_aapcs_vfpcc i32 @a(float) local_unnamed_addr #0
  declare void @llvm.dbg.value(metadata, metadata, metadata)
  declare void @llvm.stackprotector(i8*, i8**)

  attributes #0 = { "disable-tail-calls"="false" "frame-pointer"="all" }

  !llvm.dbg.cu = !{!0}
  !llvm.module.flags = !{!10, !11, !12, !13, !14}
  !llvm.ident = !{!15}

  !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 10.0.0 (git@github.com:apple/llvm-project.git 6203ec90d0bb0fd705fc0ad00ee263e5579aa709)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !3, nameTableKind: None)
  !1 = !DIFile(filename: "jnyn_freeBSD.c", directory: "/Users/vsk/tmp/jnyn")
  !2 = !{}
  !3 = !{!4}
  !4 = !DISubprogram(name: "a", scope: !5, file: !5, line: 1, type: !6, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
  !5 = !DIFile(filename: "unreduced2.c", directory: "/Users/vsk/tmp/jnyn")
  !6 = !DISubroutineType(types: !7)
  !7 = !{!8, !9}
  !8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
  !9 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
  !10 = !{i32 7, !"Dwarf Version", i32 4}
  !11 = !{i32 2, !"Debug Info Version", i32 3}
  !12 = !{i32 1, !"wchar_size", i32 4}
  !13 = !{i32 1, !"min_enum_size", i32 4}
  !14 = !{i32 7, !"PIC Level", i32 2}
  !15 = !{!"clang version 10.0.0 (git@github.com:apple/llvm-project.git 6203ec90d0bb0fd705fc0ad00ee263e5579aa709)"}
  !16 = distinct !DISubprogram(name: "b", scope: !5, file: !5, line: 2, type: !17, scopeLine: 2, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !20)
  !17 = !DISubroutineType(types: !18)
  !18 = !{!8, !19}
  !19 = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float)
  !20 = !{!21}
  !21 = !DILocalVariable(name: "c", arg: 1, scope: !16, file: !5, line: 2, type: !19)
  !22 = !DILocation(line: 0, scope: !16)
  !23 = !DILocation(line: 3, column: 3, scope: !16)
  !24 = !DILocation(line: 4, column: 5, scope: !16)
  !25 = !DILocation(line: 4, column: 3, scope: !16)
  !26 = !DILocation(line: 5, column: 1, scope: !16)

...
---
name:            b
callSites:
  - { bb: 0, offset: 12, fwdArgRegs: [] }
  - { bb: 0, offset: 15, fwdArgRegs:
      - { arg: 0, reg: '$s0' } }
body:             |
  bb.0.entry:
    liveins: $d0, $lr, $d8

    DBG_VALUE $d0, $noreg, !21, !DIExpression(), debug-location !22
    frame-setup tPUSH 14, $noreg, $r7, killed $lr, implicit-def $sp, implicit $sp
    frame-setup CFI_INSTRUCTION def_cfa_offset 8
    frame-setup CFI_INSTRUCTION offset $lr, -4
    frame-setup CFI_INSTRUCTION offset $r7, -8
    $r7 = frame-setup tMOVr $sp, 14, $noreg
    frame-setup CFI_INSTRUCTION def_cfa_register $r7
    $sp = frame-setup VSTMDDB_UPD $sp, 14, $noreg, killed $d8
    frame-setup CFI_INSTRUCTION offset $d8, -16
    $s16 = VMOVS killed $s0, 14, $noreg
    $s17 = VMOVS killed $s1, 14, $noreg, implicit-def $d8
    DBG_VALUE $d8, $noreg, !21, !DIExpression(), debug-location !22
    tBL 14, $noreg, @d, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $r0, debug-location !23
    $d0 = VMOVD killed $d8, 14, $noreg, debug-location !24
    DBG_VALUE $d0, $noreg, !21, !DIExpression(), debug-location !22
    tTAILJMPd @a, 14, $noreg, implicit $sp, implicit $sp, implicit killed $s0, debug-location !25

...
