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

--- |
  
  define dso_local void @put_charge_groups_in_box() local_unnamed_addr #0 !dbg !5 {
  bb:
    br label %bb2
  
  bb2:                                              ; preds = %bb2, %bb3, %bb
    br i1 undef, label %bb2, label %bb3.preheader
  
  bb3.preheader:                                    ; preds = %bb2
    br label %bb3
  
  bb3:                                              ; preds = %bb3.preheader, %bb3
    %tmp4 = phi i64 [ %tmp6, %bb3 ], [ 2, %bb3.preheader ]
    %tmp6 = add nsw i64 %tmp4, -1
    ; 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())
    %tmp8 = icmp eq i64 %tmp6, 0
    br i1 %tmp8, label %bb2, label %bb3
  }
  
  declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1
  
  declare void @llvm.stackprotector(i8*, i8**) #2
  
  attributes #0 = { "target-cpu"="z13" "use-soft-float"="false" }
  attributes #1 = { nounwind readnone speculatable "target-cpu"="z13" }
  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:            put_charge_groups_in_box
alignment:       4
tracksRegLiveness: true
frameInfo:       
  maxCallFrameSize: 0
body:             |
  bb.0.bb:
    renamable $r0l = LHIMux 0
  
  bb.1.bb2:
    liveins: $r0l
  
    CHIMux renamable $r0l, 0, implicit-def $cc
    BRC 14, 6, %bb.1, implicit killed $cc
  
  bb.2.bb3.preheader:
    liveins: $r0l
  
    renamable $r1d = LGHI 2
  
  bb.3.bb3:
    successors: %bb.1(0x04000000), %bb.3(0x7c000000)
    liveins: $r1d, $r0l
  
    renamable $r1d = nsw AGHI killed renamable $r1d, -1, implicit-def dead $cc
    DBG_VALUE $r1d, $noreg, !7, !DIExpression(), debug-location !9
    CGHI renamable $r1d, 0, implicit-def $cc
    DBG_VALUE $r1d, $noreg, !7, !DIExpression(), debug-location !9
    BRC 14, 6, %bb.3, implicit $cc
    J %bb.1

...
