; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s

%struct.obj = type { i64 }

define dso_local void @_Z7releaseP3obj(ptr nocapture %o) nounwind uwtable ssp {
; CHECK-LABEL: _Z7releaseP3obj:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    decq (%rdi)
; CHECK-NEXT:    je free # TAILCALL
; CHECK-NEXT:  # %bb.1: # %return
; CHECK-NEXT:    retq
entry:
  %0 = load i64, ptr %o, align 8
  %dec = add i64 %0, -1
  store i64 %dec, ptr %o, align 8
  %tobool = icmp eq i64 %dec, 0
  br i1 %tobool, label %if.end, label %return

if.end:                                           ; preds = %entry
  tail call void @free(ptr %o)
  br label %return

return:                                           ; preds = %entry, %if.end
  ret void
}

@c = common dso_local global i64 0, align 8
@a = common dso_local global i32 0, align 4
@.str = private unnamed_addr constant [5 x i8] c"%ld\0A\00", align 1
@b = common dso_local global i32 0, align 4

define dso_local i32 @test() nounwind uwtable ssp {
; CHECK-LABEL: test:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    pushq %rax
; CHECK-NEXT:    .cfi_def_cfa_offset 16
; CHECK-NEXT:    movq c(%rip), %rsi
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    decq %rsi
; CHECK-NEXT:    movq %rsi, c(%rip)
; CHECK-NEXT:    setne %al
; CHECK-NEXT:    movl %eax, a(%rip)
; CHECK-NEXT:    movl $.L.str, %edi
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    callq printf@PLT
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    popq %rcx
; CHECK-NEXT:    .cfi_def_cfa_offset 8
; CHECK-NEXT:    retq
entry:
%0 = load i64, ptr @c, align 8
%dec.i = add nsw i64 %0, -1
store i64 %dec.i, ptr @c, align 8
%tobool.i = icmp ne i64 %dec.i, 0
%lor.ext.i = zext i1 %tobool.i to i32
store i32 %lor.ext.i, ptr @a, align 4
%call = tail call i32 (ptr, ...) @printf(ptr @.str, i64 %dec.i) nounwind
ret i32 0
}

define dso_local i32 @test2() nounwind uwtable ssp {
; CHECK-LABEL: test2:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    pushq %rax
; CHECK-NEXT:    .cfi_def_cfa_offset 16
; CHECK-NEXT:    movq c(%rip), %rsi
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    addq $-1, %rsi
; CHECK-NEXT:    setb %al
; CHECK-NEXT:    movq %rsi, c(%rip)
; CHECK-NEXT:    movl %eax, a(%rip)
; CHECK-NEXT:    movl $.L.str, %edi
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    callq printf@PLT
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    popq %rcx
; CHECK-NEXT:    .cfi_def_cfa_offset 8
; CHECK-NEXT:    retq
entry:
%0 = load i64, ptr @c, align 8
%dec.i = add nsw i64 %0, -1
store i64 %dec.i, ptr @c, align 8
%tobool.i = icmp ne i64 %0, 0
%lor.ext.i = zext i1 %tobool.i to i32
store i32 %lor.ext.i, ptr @a, align 4
%call = tail call i32 (ptr, ...) @printf(ptr @.str, i64 %dec.i) nounwind
ret i32 0
}

declare i32 @printf(ptr nocapture, ...) nounwind

declare dso_local void @free(ptr nocapture) nounwind

%struct.obj2 = type { i64, i32, i16, i8 }

declare dso_local void @other(ptr ) nounwind;

define dso_local void @example_dec(ptr %o) nounwind uwtable ssp {
; 64 bit dec
; CHECK-LABEL: example_dec:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    decq (%rdi)
; CHECK-NEXT:    jne .LBB3_4
; CHECK-NEXT:  # %bb.1: # %if.end
; CHECK-NEXT:    decl 8(%rdi)
; CHECK-NEXT:    jne .LBB3_4
; CHECK-NEXT:  # %bb.2: # %if.end1
; CHECK-NEXT:    decw 12(%rdi)
; CHECK-NEXT:    jne .LBB3_4
; CHECK-NEXT:  # %bb.3: # %if.end2
; CHECK-NEXT:    decb 14(%rdi)
; CHECK-NEXT:    je other # TAILCALL
; CHECK-NEXT:  .LBB3_4: # %return
; CHECK-NEXT:    retq
entry:
  %0 = load i64, ptr %o, align 8
  %dec = add i64 %0, -1
  store i64 %dec, ptr %o, align 8
  %tobool = icmp eq i64 %dec, 0
  br i1 %tobool, label %if.end, label %return

; 32 bit dec
if.end:
  %s32 = getelementptr inbounds %struct.obj2, ptr %o, i64 0, i32 1
  %1 = load i32, ptr %s32, align 4
  %dec1 = add i32 %1, -1
  store i32 %dec1, ptr %s32, align 4
  %tobool2 = icmp eq i32 %dec1, 0
  br i1 %tobool2, label %if.end1, label %return

; 16 bit dec
if.end1:
  %s16 = getelementptr inbounds %struct.obj2, ptr %o, i64 0, i32 2
  %2 = load i16, ptr %s16, align 2
  %dec2 = add i16 %2, -1
  store i16 %dec2, ptr %s16, align 2
  %tobool3 = icmp eq i16 %dec2, 0
  br i1 %tobool3, label %if.end2, label %return

; 8 bit dec
if.end2:
  %s8 = getelementptr inbounds %struct.obj2, ptr %o, i64 0, i32 3
  %3 = load i8, ptr %s8
  %dec3 = add i8 %3, -1
  store i8 %dec3, ptr %s8
  %tobool4 = icmp eq i8 %dec3, 0
  br i1 %tobool4, label %if.end4, label %return

if.end4:
  tail call void @other(ptr %o) nounwind
  br label %return

return:                                           ; preds = %if.end4, %if.end, %entry
  ret void
}

define dso_local void @example_inc(ptr %o) nounwind uwtable ssp {
; 64 bit inc
; CHECK-LABEL: example_inc:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    incq (%rdi)
; CHECK-NEXT:    jne .LBB4_4
; CHECK-NEXT:  # %bb.1: # %if.end
; CHECK-NEXT:    incl 8(%rdi)
; CHECK-NEXT:    jne .LBB4_4
; CHECK-NEXT:  # %bb.2: # %if.end1
; CHECK-NEXT:    incw 12(%rdi)
; CHECK-NEXT:    jne .LBB4_4
; CHECK-NEXT:  # %bb.3: # %if.end2
; CHECK-NEXT:    incb 14(%rdi)
; CHECK-NEXT:    je other # TAILCALL
; CHECK-NEXT:  .LBB4_4: # %return
; CHECK-NEXT:    retq
entry:
  %0 = load i64, ptr %o, align 8
  %inc = add i64 %0, 1
  store i64 %inc, ptr %o, align 8
  %tobool = icmp eq i64 %inc, 0
  br i1 %tobool, label %if.end, label %return

; 32 bit inc
if.end:
  %s32 = getelementptr inbounds %struct.obj2, ptr %o, i64 0, i32 1
  %1 = load i32, ptr %s32, align 4
  %inc1 = add i32 %1, 1
  store i32 %inc1, ptr %s32, align 4
  %tobool2 = icmp eq i32 %inc1, 0
  br i1 %tobool2, label %if.end1, label %return

; 16 bit inc
if.end1:
  %s16 = getelementptr inbounds %struct.obj2, ptr %o, i64 0, i32 2
  %2 = load i16, ptr %s16, align 2
  %inc2 = add i16 %2, 1
  store i16 %inc2, ptr %s16, align 2
  %tobool3 = icmp eq i16 %inc2, 0
  br i1 %tobool3, label %if.end2, label %return

; 8 bit inc
if.end2:
  %s8 = getelementptr inbounds %struct.obj2, ptr %o, i64 0, i32 3
  %3 = load i8, ptr %s8
  %inc3 = add i8 %3, 1
  store i8 %inc3, ptr %s8
  %tobool4 = icmp eq i8 %inc3, 0
  br i1 %tobool4, label %if.end4, label %return

if.end4:
  tail call void @other(ptr %o) nounwind
  br label %return

return:
  ret void
}

; Deal with TokenFactor chain
; rdar://11236106
@foo = external dso_local global ptr, align 8

define dso_local void @test3() nounwind ssp {
; CHECK-LABEL: test3:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    movq foo(%rip), %rax
; CHECK-NEXT:    decq 16(%rax)
; CHECK-NEXT:    je baz # TAILCALL
; CHECK-NEXT:  # %bb.1: # %if.end
; CHECK-NEXT:    retq
entry:
  %0 = load ptr, ptr @foo, align 8
  %arrayidx = getelementptr inbounds i64, ptr %0, i64 2
  %1 = load i64, ptr %arrayidx, align 8
  %dec = add i64 %1, -1
  store i64 %dec, ptr %arrayidx, align 8
  %cmp = icmp eq i64 %dec, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:
  tail call void @baz() nounwind
  br label %if.end

if.end:
  ret void
}

declare dso_local void @baz()

; Avoid creating a cycle in the DAG which would trigger an assert in the
; scheduler.
; PR12565
; rdar://11451474
@x = external dso_local global i32, align 4
@y = external dso_local global i32, align 4
@z = external dso_local global i32, align 4

define dso_local void @test4() nounwind uwtable ssp {
; CHECK-LABEL: test4:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    xorl %eax, %eax
; CHECK-NEXT:    decl y(%rip)
; CHECK-NEXT:    je .LBB6_2
; CHECK-NEXT:  # %bb.1: # %entry
; CHECK-NEXT:    movl x(%rip), %eax
; CHECK-NEXT:  .LBB6_2: # %entry
; CHECK-NEXT:    movl %eax, z(%rip)
; CHECK-NEXT:    retq
entry:
  %0 = load i32, ptr @x, align 4
  %1 = load i32, ptr @y, align 4
  %dec = add nsw i32 %1, -1
  store i32 %dec, ptr @y, align 4
  %tobool.i = icmp ne i32 %dec, 0
  %cond.i = select i1 %tobool.i, i32 %0, i32 0
  store i32 %cond.i, ptr @z, align 4
  ret void
}
