# 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(i32* %ptr) #1 {
  entry:
    %val = load i32, i32* %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(i8*, i8**) #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 4 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

...
