# Check that the backend can produce a load-and-trap instruction also in
# the presence of a DEBUG_VALUE machine instruction.
#
# RUN: llc %s -mtriple=s390x-linux-gnu -mcpu=zEC12 -start-before=postrapseudos \
# RUN:   -o - 2>&1 | FileCheck %s
#
# CHECK: lat

--- |
  
  define i32 @f1(ptr %ptr) #1 {
  entry:
    %val = load i32, ptr %ptr
    ; Keep the dbg metadata live by referencing it in the IR.
    call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !7, metadata !DIExpression()), !dbg !9
    %cmp = icmp eq i32 %val, 0
    br i1 %cmp, label %if.then, label %if.end
  
  if.then:                                          ; preds = %entry
    tail call void @llvm.trap()
    unreachable
  
  if.end:                                           ; preds = %entry
    ret i32 %val
  }
  
  declare void @llvm.trap() #0
  declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
  
  declare void @llvm.stackprotector(ptr, ptr) #2

  attributes #0 = { cold noreturn nounwind "target-cpu"="zEC12" }
  attributes #1 = { "target-cpu"="zEC12" }
  attributes #2 = { nounwind }

  !llvm.dbg.cu = !{!0}
  !llvm.module.flags = !{!3, !4}

  !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "llvm", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
  !1 = !DIFile(filename: "test.ll", directory: "/tmp")
  !2 = !{}
  !3 = !{i32 2, !"Dwarf Version", i32 4}
  !4 = !{i32 2, !"Debug Info Version", i32 3}
  !5 = distinct !DISubprogram(name: "test_dbg_value", scope: !1, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
  !6 = !DISubroutineType(types: !2)
  !7 = !DILocalVariable(name: "in", arg: 1, scope: !5, file: !1, line: 1, type: !8)
  !8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
  !9 = !DILocation(line: 1, column: 1, scope: !5)

...
---
name:            f1
alignment:       16
tracksRegLiveness: true
liveins:         
  - { reg: '$r2d' }
frameInfo:       
  maxCallFrameSize: 0
body:             |
  bb.0.entry:
    successors: %bb.1(0x00000001), %bb.2(0x7fffffff)
    liveins: $r2d
  
    renamable $r2l = LMux killed renamable $r2d, 0, $noreg :: (load (s32) from %ir.ptr)
    DBG_VALUE $noreg, $r2l, !7, !DIExpression(), debug-location !9
    CHIMux renamable $r2l, 0, implicit-def $cc
    DBG_VALUE $noreg, $r2l, !7, !DIExpression(), debug-location !9
    BRC 14, 6, %bb.2, implicit killed $cc
  
  bb.1.if.then:
    successors: 
  
    Trap
  
  bb.2.if.end:
    liveins: $r2l
  
    Return implicit $r2l

...
