# Check that the codegenprepare succeeds in dupRetToEnableTailCallOpts() also
# in the presence of a call to @llvm.dbg.value()
#
# RUN: llc %s -mtriple=s390x-linux-gnu -mcpu=z13 -start-before=codegenprepare \
# RUN:   -stop-after codegenprepare -o - | FileCheck %s
#
# CHECK-LABEL: bb1:
# CHECK:       ret
# CHECK-LABEL: bb2:
# CHECK:       ret


# Generated with:
#
# bin/llc -mtriple=s390x-linux-gnu -mcpu=z13 -stop-before codegenprepare -simplify-mir
#
# %0 = type { i32 (...)**, i16, %1* }
# %1 = type { i32 (...)** }
# %2 = type { i32 (...)**, %1*, i8, i32, i32, i32, i16, i32, i16, i32, i16*, %3*, %6*, %9 }
# %3 = type { %4 }
# %4 = type { i32 (...)**, i8, i32, i32, %5**, %1* }
# %5 = type { i32, i32 }
# %6 = type { %7*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %0*, %1* }
# %7 = type { %8 }
# %8 = type { i32 (...)**, i8, i32, i32, %0**, %1* }
# %9 = type { i8* }
# %10 = type { %0, i32, i32, %0* }
#
# define %0* @Fun(%2* %arg) !dbg !7 {
# bb:
#   switch i32 undef, label %bb3 [
#     i32 58, label %bb1
#     i32 41, label %bb2
#   ], !dbg !14
#
# bb1:                                              ; preds = %bb
#   br label %bb4, !dbg !15
#
# bb2:                                              ; preds = %bb
#   %tmp = tail call %10* @hoge(%6* undef, %0* undef, i32 signext 0, i32 signext 0), !dbg !16
#   call void @llvm.dbg.value(metadata %10* %tmp, metadata !10, metadata !DIExpression()), !dbg !16
#   br label %bb4, !dbg !17
#
# bb3:                                              ; preds = %bb
#   unreachable, !dbg !18
#
# bb4:                                              ; preds = %bb2, %bb1
#   %tmp5 = phi %10* [ undef, %bb1 ], [ %tmp, %bb2 ], !dbg !19
#   call void @llvm.dbg.value(metadata %10* %tmp5, metadata !12, metadata !DIExpression()), !dbg !19
#   %tmp6 = bitcast %10* %tmp5 to %0*, !dbg !20
#   call void @llvm.dbg.value(metadata %0* %tmp6, metadata !13, metadata !DIExpression()), !dbg !20
#   ret %0* %tmp6, !dbg !21
# }
#
# declare %10* @hoge(%6*, %0*, i32, i32)
#
# ; Function Attrs: nounwind readnone speculatable
# declare void @llvm.dbg.value(metadata, metadata, metadata) #1
#
# attributes #0 = { "use-soft-float"="false" }
# attributes #1 = { nounwind readnone speculatable }
#
# !llvm.module.flags = !{!0, !1}
# !llvm.dbg.cu = !{!2}
# !llvm.debugify = !{!5, !6}
#
# !0 = !{i32 2, !"Debug Info Version", i32 3}
# !1 = !{i32 1, !"wchar_size", i32 4}
# !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4)
# !3 = !DIFile(filename: "tc.ll", directory: "/")
# !4 = !{}
# !5 = !{i32 8}
# !6 = !{i32 3}
# !7 = distinct !DISubprogram(name: "eggs", linkageName: "eggs", scope: null, file: !3, line: 1, type: !8, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !9)
# !8 = !DISubroutineType(types: !4)
# !9 = !{!10, !12, !13}
# !10 = !DILocalVariable(name: "1", scope: !7, file: !3, line: 3, type: !11)
# !11 = !DIBasicType(name: "ty64", size: 64, encoding: DW_ATE_unsigned)
# !12 = !DILocalVariable(name: "2", scope: !7, file: !3, line: 6, type: !11)
# !13 = !DILocalVariable(name: "3", scope: !7, file: !3, line: 7, type: !11)
# !14 = !DILocation(line: 1, column: 1, scope: !7)
# !15 = !DILocation(line: 2, column: 1, scope: !7)
# !16 = !DILocation(line: 3, column: 1, scope: !7)
# !17 = !DILocation(line: 4, column: 1, scope: !7)
# !18 = !DILocation(line: 5, column: 1, scope: !7)
# !19 = !DILocation(line: 6, column: 1, scope: !7)
# !20 = !DILocation(line: 7, column: 1, scope: !7)
# !21 = !DILocation(line: 8, column: 1, scope: !7)


--- |
  
  %0 = type { ptr, i16, ptr }
  %1 = type { ptr }
  %2 = type { ptr, ptr, i8, i32, i32, i32, i16, i32, i16, i32, ptr, ptr, ptr, %9 }
  %3 = type { %4 }
  %4 = type { ptr, i8, i32, i32, ptr, ptr }
  %5 = type { i32, i32 }
  %6 = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
  %7 = type { %8 }
  %8 = type { ptr, i8, i32, i32, ptr, ptr }
  %9 = type { ptr }
  %10 = type { %0, i32, i32, ptr }
  
  define ptr @Fun(ptr %arg) #0 !dbg !7 {
  bb:
    switch i32 undef, label %bb3 [
      i32 58, label %bb1
      i32 41, label %bb2
    ], !dbg !14
  
  bb1:                                              ; preds = %bb
    br label %bb4, !dbg !15
  
  bb2:                                              ; preds = %bb
    %tmp = tail call ptr @hoge(ptr undef, ptr undef, i32 signext 0, i32 signext 0), !dbg !16
    call void @llvm.dbg.value(metadata ptr %tmp, metadata !10, metadata !DIExpression()), !dbg !16
    br label %bb4, !dbg !17
  
  bb3:                                              ; preds = %bb
    unreachable, !dbg !18
  
  bb4:                                              ; preds = %bb2, %bb1
    %tmp5 = phi ptr [ undef, %bb1 ], [ %tmp, %bb2 ], !dbg !19
    call void @llvm.dbg.value(metadata ptr %tmp5, metadata !12, metadata !DIExpression()), !dbg !19
    %tmp6 = bitcast ptr %tmp5 to ptr, !dbg !20
    call void @llvm.dbg.value(metadata ptr %tmp6, metadata !13, metadata !DIExpression()), !dbg !20
    ret ptr %tmp6, !dbg !21
  }
  
  declare ptr @hoge(ptr, ptr, i32, i32) #0
  
  ; Function Attrs: nounwind readnone speculatable
  declare void @llvm.dbg.value(metadata, metadata, metadata) #1
  
  attributes #0 = { "target-cpu"="z13" }
  attributes #1 = { nounwind readnone speculatable "target-cpu"="z13" }
  
  !llvm.module.flags = !{!0, !1}
  !llvm.dbg.cu = !{!2}
  !llvm.debugify = !{!5, !6}
  
  !0 = !{i32 2, !"Debug Info Version", i32 3}
  !1 = !{i32 1, !"wchar_size", i32 4}
  !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4)
  !3 = !DIFile(filename: "tc.ll", directory: "/")
  !4 = !{}
  !5 = !{i32 8}
  !6 = !{i32 3}
  !7 = distinct !DISubprogram(name: "eggs", linkageName: "eggs", scope: null, file: !3, line: 1, type: !8, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !9)
  !8 = !DISubroutineType(types: !4)
  !9 = !{!10, !12, !13}
  !10 = !DILocalVariable(name: "1", scope: !7, file: !3, line: 3, type: !11)
  !11 = !DIBasicType(name: "ty64", size: 64, encoding: DW_ATE_unsigned)
  !12 = !DILocalVariable(name: "2", scope: !7, file: !3, line: 6, type: !11)
  !13 = !DILocalVariable(name: "3", scope: !7, file: !3, line: 7, type: !11)
  !14 = !DILocation(line: 1, column: 1, scope: !7)
  !15 = !DILocation(line: 2, column: 1, scope: !7)
  !16 = !DILocation(line: 3, column: 1, scope: !7)
  !17 = !DILocation(line: 4, column: 1, scope: !7)
  !18 = !DILocation(line: 5, column: 1, scope: !7)
  !19 = !DILocation(line: 6, column: 1, scope: !7)
  !20 = !DILocation(line: 7, column: 1, scope: !7)
  !21 = !DILocation(line: 8, column: 1, scope: !7)

...
---
name:            Fun
alignment:       16
tracksRegLiveness: true
...
