# 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:       16
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

...
