; RUN: opt -basic-aa -objc-arc -S < %s | FileCheck %s
; RUN: opt -aa-pipeline=basic-aa -passes=objc-arc -S < %s | FileCheck %s

target datalayout = "e-p:64:64:64"

declare i8* @llvm.objc.retain(i8*)
declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*)
declare i8* @llvm.objc.unsafeClaimAutoreleasedReturnValue(i8*)
declare void @llvm.objc.release(i8*)
declare i8* @llvm.objc.autorelease(i8*)
declare i8* @llvm.objc.autoreleaseReturnValue(i8*)
declare void @llvm.objc.autoreleasePoolPop(i8*)
declare i8* @llvm.objc.autoreleasePoolPush()
declare i8* @llvm.objc.retainBlock(i8*)

declare i8* @llvm.objc.retainedObject(i8*)
declare i8* @llvm.objc.unretainedObject(i8*)
declare i8* @llvm.objc.unretainedPointer(i8*)

declare void @use_pointer(i8*)
declare void @callee()
declare void @callee2(i8*, i8*)
declare void @callee_fnptr(void ()*)
declare void @invokee()
declare i8* @returner()
declare void @bar(i32 ()*)

declare void @llvm.dbg.value(metadata, metadata, metadata)

declare i8* @objc_msgSend(i8*, i8*, ...)

; Simple retain+release pair deletion, with some intervening control
; flow and harmless instructions.

; CHECK: define void @test0_precise(i32* %x, i1 %p) [[NUW:#[0-9]+]] {
; CHECK: @llvm.objc.retain
; CHECK: @llvm.objc.release
; CHECK: }
define void @test0_precise(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  store i32 7, i32* %x
  br label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  ret void
}

; CHECK: define void @test0_imprecise(i32* %x, i1 %p) [[NUW]] {
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test0_imprecise(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  store i32 7, i32* %x
  br label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0
  ret void
}

; Like test0 but the release isn't always executed when the retain is,
; so the optimization is not safe.

; TODO: Make the llvm.objc.release's argument be %0.

; CHECK: define void @test1_precise(i32* %x, i1 %p, i1 %q) [[NUW]] {
; CHECK: @llvm.objc.retain(i8* %a)
; CHECK: @llvm.objc.release
; CHECK: }
define void @test1_precise(i32* %x, i1 %p, i1 %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  store i32 7, i32* %x
  call void @callee()
  br i1 %q, label %return, label %alt_return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  ret void

alt_return:
  ret void
}

; CHECK: define void @test1_imprecise(i32* %x, i1 %p, i1 %q) [[NUW]] {
; CHECK: @llvm.objc.retain(i8* %a)
; CHECK: @llvm.objc.release
; CHECK: }
define void @test1_imprecise(i32* %x, i1 %p, i1 %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  store i32 7, i32* %x
  call void @callee()
  br i1 %q, label %return, label %alt_return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0
  ret void

alt_return:
  ret void
}


; Don't do partial elimination into two different CFG diamonds.

; CHECK: define void @test1b_precise(i8* %x, i1 %p, i1 %q) {
; CHECK: entry:
; CHECK:   tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK-NOT: @llvm.objc.
; CHECK: if.end5:
; CHECK:   tail call void @llvm.objc.release(i8* %x) [[NUW]]
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test1b_precise(i8* %x, i1 %p, i1 %q) {
entry:
  tail call i8* @llvm.objc.retain(i8* %x) nounwind
  br i1 %p, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  tail call void @callee()
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  br i1 %q, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  tail call void @use_pointer(i8* %x)
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  tail call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; CHECK-LABEL: define void @test1b_imprecise(
; CHECK: entry:
; CHECK:   tail call i8* @llvm.objc.retain(i8* %x) [[NUW:#[0-9]+]]
; CHECK-NOT: @llvm.objc.
; CHECK: if.end5:
; CHECK:   tail call void @llvm.objc.release(i8* %x) [[NUW]], !clang.imprecise_release ![[RELEASE:[0-9]+]]
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test1b_imprecise(i8* %x, i1 %p, i1 %q) {
entry:
  tail call i8* @llvm.objc.retain(i8* %x) nounwind
  br i1 %p, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  tail call void @callee()
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  br i1 %q, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  tail call void @use_pointer(i8* %x)
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  tail call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  ret void
}


; Like test0 but the pointer is passed to an intervening call,
; so the optimization is not safe.

; CHECK-LABEL: define void @test2_precise(
; CHECK: @llvm.objc.retain(i8* %a)
; CHECK: @llvm.objc.release
; CHECK: }
define void @test2_precise(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  store i32 7, i32* %x
  call void @use_pointer(i8* %0)
  %d = bitcast i32* %x to float*
  store float 3.0, float* %d
  br label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  ret void
}

; CHECK-LABEL: define void @test2_imprecise(
; CHECK: @llvm.objc.retain(i8* %a)
; CHECK: @llvm.objc.release
; CHECK: }
define void @test2_imprecise(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  store i32 7, i32* %x
  call void @use_pointer(i8* %0)
  %d = bitcast i32* %x to float*
  store float 3.0, float* %d
  br label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0
  ret void
}

; Like test0 but the release is in a loop,
; so the optimization is not safe.

; TODO: For now, assume this can't happen.

; CHECK-LABEL: define void @test3_precise(
; TODO: @llvm.objc.retain(i8* %a)
; TODO: @llvm.objc.release
; CHECK: }
define void @test3_precise(i32* %x, i1* %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br label %loop

loop:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  %j = load volatile i1, i1* %q
  br i1 %j, label %loop, label %return

return:
  ret void
}

; CHECK-LABEL: define void @test3_imprecise(
; TODO: @llvm.objc.retain(i8* %a)
; TODO: @llvm.objc.release
; CHECK: }
define void @test3_imprecise(i32* %x, i1* %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br label %loop

loop:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0
  %j = load volatile i1, i1* %q
  br i1 %j, label %loop, label %return

return:
  ret void
}


; TODO: For now, assume this can't happen.

; Like test0 but the retain is in a loop,
; so the optimization is not safe.

; CHECK-LABEL: define void @test4_precise(
; TODO: @llvm.objc.retain(i8* %a)
; TODO: @llvm.objc.release
; CHECK: }
define void @test4_precise(i32* %x, i1* %q) nounwind {
entry:
  br label %loop

loop:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  %j = load volatile i1, i1* %q
  br i1 %j, label %loop, label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  ret void
}

; CHECK-LABEL: define void @test4_imprecise(
; TODO: @llvm.objc.retain(i8* %a)
; TODO: @llvm.objc.release
; CHECK: }
define void @test4_imprecise(i32* %x, i1* %q) nounwind {
entry:
  br label %loop

loop:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  %j = load volatile i1, i1* %q
  br i1 %j, label %loop, label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0
  ret void
}


; Like test0 but the pointer is conditionally passed to an intervening call,
; so the optimization is not safe.

; CHECK-LABEL: define void @test5a(
; CHECK: @llvm.objc.retain(i8*
; CHECK: @llvm.objc.release
; CHECK: }
define void @test5a(i32* %x, i1 %q, i8* %y) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  %s = select i1 %q, i8* %y, i8* %0
  call void @use_pointer(i8* %s)
  store i32 7, i32* %x
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  ret void
}

; CHECK-LABEL: define void @test5b(
; CHECK: @llvm.objc.retain(i8*
; CHECK: @llvm.objc.release
; CHECK: }
define void @test5b(i32* %x, i1 %q, i8* %y) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  %s = select i1 %q, i8* %y, i8* %0
  call void @use_pointer(i8* %s)
  store i32 7, i32* %x
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0
  ret void
}


; retain+release pair deletion, where the release happens on two different
; flow paths.

; CHECK-LABEL: define void @test6a(
; CHECK: entry:
; CHECK:   tail call i8* @llvm.objc.retain
; CHECK: t:
; CHECK:   call void @llvm.objc.release
; CHECK: f:
; CHECK:   call void @llvm.objc.release
; CHECK: return:
; CHECK: }
define void @test6a(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  %ct = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %ct) nounwind
  br label %return

f:
  store i32 7, i32* %x
  call void @callee()
  %cf = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cf) nounwind
  br label %return

return:
  ret void
}

; CHECK-LABEL: define void @test6b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test6b(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  %ct = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %ct) nounwind, !clang.imprecise_release !0
  br label %return

f:
  store i32 7, i32* %x
  call void @callee()
  %cf = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cf) nounwind, !clang.imprecise_release !0
  br label %return

return:
  ret void
}

; CHECK-LABEL: define void @test6c(
; CHECK: entry:
; CHECK:   tail call i8* @llvm.objc.retain
; CHECK: t:
; CHECK:   call void @llvm.objc.release
; CHECK: f:
; CHECK:   call void @llvm.objc.release
; CHECK: return:
; CHECK: }
define void @test6c(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  %ct = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %ct) nounwind
  br label %return

f:
  store i32 7, i32* %x
  call void @callee()
  %cf = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cf) nounwind, !clang.imprecise_release !0
  br label %return

return:
  ret void
}

; CHECK-LABEL: define void @test6d(
; CHECK: entry:
; CHECK:   tail call i8* @llvm.objc.retain
; CHECK: t:
; CHECK:   call void @llvm.objc.release
; CHECK: f:
; CHECK:   call void @llvm.objc.release
; CHECK: return:
; CHECK: }
define void @test6d(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  br i1 %p, label %t, label %f

t:
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  %ct = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %ct) nounwind, !clang.imprecise_release !0
  br label %return

f:
  store i32 7, i32* %x
  call void @callee()
  %cf = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cf) nounwind
  br label %return

return:
  ret void
}


; retain+release pair deletion, where the retain happens on two different
; flow paths.

; CHECK-LABEL:     define void @test7(
; CHECK:     entry:
; CHECK-NOT:   llvm.objc.
; CHECK:     t:
; CHECK:       call i8* @llvm.objc.retain
; CHECK:     f:
; CHECK:       call i8* @llvm.objc.retain
; CHECK:     return:
; CHECK:       call void @llvm.objc.release
; CHECK: }
define void @test7(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  br i1 %p, label %t, label %f

t:
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  %1 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i32 7, i32* %x
  call void @callee()
  br label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  ret void
}

; CHECK-LABEL: define void @test7b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test7b(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  br i1 %p, label %t, label %f

t:
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  %1 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i32 7, i32* %x
  call void @callee()
  br label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0
  ret void
}

; Like test7, but there's a retain/retainBlock mismatch. Don't delete!

; CHECK-LABEL: define void @test7c(
; CHECK: t:
; CHECK:   call i8* @llvm.objc.retainBlock
; CHECK: f:
; CHECK:   call i8* @llvm.objc.retain
; CHECK: return:
; CHECK:   call void @llvm.objc.release
; CHECK: }
define void @test7c(i32* %x, i1 %p) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  br i1 %p, label %t, label %f

t:
  %0 = call i8* @llvm.objc.retainBlock(i8* %a) nounwind
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %return

f:
  %1 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i32 7, i32* %x
  call void @callee()
  br label %return

return:
  %c = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %c) nounwind
  ret void
}

; retain+release pair deletion, where the retain and release both happen on
; different flow paths. Wild!

; CHECK-LABEL: define void @test8a(
; CHECK: entry:
; CHECK: t:
; CHECK:   @llvm.objc.retain
; CHECK: f:
; CHECK:   @llvm.objc.retain
; CHECK: mid:
; CHECK: u:
; CHECK:   @llvm.objc.release
; CHECK: g:
; CHECK:   @llvm.objc.release
; CHECK: return:
; CHECK: }
define void @test8a(i32* %x, i1 %p, i1 %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  br i1 %p, label %t, label %f

t:
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %mid

f:
  %1 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i32 7, i32* %x
  br label %mid

mid:
  br i1 %q, label %u, label %g

u:
  call void @callee()
  %cu = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cu) nounwind
  br label %return

g:
  %cg = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cg) nounwind
  br label %return

return:
  ret void
}

; CHECK-LABEL: define void @test8b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test8b(i32* %x, i1 %p, i1 %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  br i1 %p, label %t, label %f

t:
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %mid

f:
  %1 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i32 7, i32* %x
  br label %mid

mid:
  br i1 %q, label %u, label %g

u:
  call void @callee()
  %cu = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cu) nounwind, !clang.imprecise_release !0
  br label %return

g:
  %cg = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cg) nounwind, !clang.imprecise_release !0
  br label %return

return:
  ret void
}

; CHECK-LABEL: define void @test8c(
; CHECK: entry:
; CHECK: t:
; CHECK-NOT: @llvm.objc.
; CHECK: f:
; CHECK-NOT: @llvm.objc.
; CHECK: mid:
; CHECK: u:
; CHECK:   @llvm.objc.retain
; CHECK:   @llvm.objc.release
; CHECK: g:
; CHECK-NOT: @llvm.objc.
; CHECK: return:
; CHECK: }
define void @test8c(i32* %x, i1 %p, i1 %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  br i1 %p, label %t, label %f

t:
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %mid

f:
  %1 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i32 7, i32* %x
  br label %mid

mid:
  br i1 %q, label %u, label %g

u:
  call void @callee()
  %cu = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cu) nounwind
  br label %return

g:
  %cg = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cg) nounwind, !clang.imprecise_release !0
  br label %return

return:
  ret void
}

; CHECK-LABEL: define void @test8d(
; CHECK: entry:
; CHECK: t:
; CHECK:   @llvm.objc.retain
; CHECK: f:
; CHECK:   @llvm.objc.retain
; CHECK: mid:
; CHECK: u:
; CHECK:   @llvm.objc.release
; CHECK: g:
; CHECK:   @llvm.objc.release
; CHECK: return:
; CHECK: }
define void @test8d(i32* %x, i1 %p, i1 %q) nounwind {
entry:
  %a = bitcast i32* %x to i8*
  br i1 %p, label %t, label %f

t:
  %0 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i8 3, i8* %a
  %b = bitcast i32* %x to float*
  store float 2.0, float* %b
  br label %mid

f:
  %1 = call i8* @llvm.objc.retain(i8* %a) nounwind
  store i32 7, i32* %x
  br label %mid

mid:
  br i1 %q, label %u, label %g

u:
  call void @callee()
  %cu = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cu) nounwind, !clang.imprecise_release !0
  br label %return

g:
  %cg = bitcast i32* %x to i8*
  call void @llvm.objc.release(i8* %cg) nounwind
  br label %return

return:
  ret void
}

; Trivial retain+release pair deletion.

; CHECK-LABEL: define void @test9(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test9(i8* %x) nounwind {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @llvm.objc.release(i8* %0) nounwind
  ret void
}

; Retain+release pair, but on an unknown pointer relationship. Don't delete!

; CHECK-LABEL: define void @test9b(
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK: @llvm.objc.release(i8* %s)
; CHECK: }
define void @test9b(i8* %x, i1 %j, i8* %p) nounwind {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind
  %s = select i1 %j, i8* %x, i8* %p
  call void @llvm.objc.release(i8* %s) nounwind
  ret void
}

; Trivial retain+release pair with intervening calls - don't delete!

; CHECK-LABEL: define void @test10(
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK: @callee
; CHECK: @use_pointer
; CHECK: @llvm.objc.release
; CHECK: }
define void @test10(i8* %x) nounwind {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @callee()
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %0) nounwind
  ret void
}

; Trivial retain+autoreleaserelease pair. Don't delete!
; Also, add a tail keyword, since llvm.objc.retain can never be passed
; a stack argument.

; CHECK-LABEL: define void @test11(
; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK: call i8* @llvm.objc.autorelease(i8* %0) [[NUW]]
; CHECK: }
define void @test11(i8* %x) nounwind {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.autorelease(i8* %0) nounwind
  call void @use_pointer(i8* %x)
  ret void
}

; Same as test11 but with no use_pointer call. Delete the pair!

; CHECK-LABEL: define void @test11a(
; CHECK: entry:
; CHECK-NEXT: ret void
; CHECK: }
define void @test11a(i8* %x) nounwind {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.autorelease(i8* %0) nounwind
  ret void
}

; Same as test11 but the value is returned. Do not perform an RV optimization
; since if the frontend emitted code for an __autoreleasing variable, we may
; want it to be in the autorelease pool.

; CHECK-LABEL: define i8* @test11b(
; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK: call i8* @llvm.objc.autorelease(i8* %0) [[NUW]]
; CHECK: }
define i8* @test11b(i8* %x) nounwind {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.autorelease(i8* %0) nounwind
  ret i8* %x
}

; We can not delete this retain, release since we do not have a post-dominating
; use of the release.

; CHECK-LABEL: define void @test12(
; CHECK-NEXT: entry:
; CHECK-NEXT: @llvm.objc.retain(i8* %x)
; CHECK-NEXT: @llvm.objc.retain
; CHECK: @llvm.objc.release
; CHECK: }
define void @test12(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Trivial retain,autorelease pair. Don't delete!

; CHECK-LABEL: define void @test13(
; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK: @use_pointer(i8* %x)
; CHECK: call i8* @llvm.objc.autorelease(i8* %x) [[NUW]]
; CHECK: }
define void @test13(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call i8* @llvm.objc.autorelease(i8* %x) nounwind
  ret void
}

; Delete the retain+release pair.

; CHECK-LABEL: define void @test13b(
; CHECK-NEXT: entry:
; CHECK-NEXT: @llvm.objc.retain(i8* %x)
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @llvm.objc.release
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test13b(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Don't delete the retain+release pair because there's an
; autoreleasePoolPop in the way.

; CHECK-LABEL: define void @test13c(
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK: @llvm.objc.autoreleasePoolPop
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK: @use_pointer
; CHECK: @llvm.objc.release
; CHECK: }
define void @test13c(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @llvm.objc.autoreleasePoolPop(i8* undef)
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Like test13c, but there's an autoreleasePoolPush in the way, but that
; doesn't matter.

; CHECK-LABEL: define void @test13d(
; CHECK-NEXT: entry:
; CHECK-NEXT: @llvm.objc.retain(i8* %x)
; CHECK-NEXT: @llvm.objc.autoreleasePoolPush
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @llvm.objc.release
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test13d(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.autoreleasePoolPush()
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Trivial retain,release pair with intervening call, and it's post-dominated by
; another release. But it is not known safe in the top down direction. We can
; not eliminate it.

; CHECK-LABEL: define void @test14(
; CHECK-NEXT: entry:
; CHECK-NEXT: @llvm.objc.retain
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @llvm.objc.release
; CHECK-NEXT: @llvm.objc.release
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test14(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Trivial retain,autorelease pair with intervening call, but it's post-dominated
; by another release. Don't delete anything.

; CHECK-LABEL: define void @test15(
; CHECK-NEXT: entry:
; CHECK-NEXT: @llvm.objc.retain(i8* %x)
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @llvm.objc.autorelease(i8* %x)
; CHECK-NEXT: @llvm.objc.release
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test15(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call i8* @llvm.objc.autorelease(i8* %x) nounwind
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Trivial retain,autorelease pair, post-dominated
; by another release. Delete the retain and release.

; CHECK-LABEL: define void @test15b(
; CHECK-NEXT: entry:
; CHECK-NEXT: @llvm.objc.retain
; CHECK-NEXT: @llvm.objc.autorelease
; CHECK-NEXT: @llvm.objc.release
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test15b(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.autorelease(i8* %x) nounwind
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; CHECK-LABEL: define void @test15c(
; CHECK-NEXT: entry:
; CHECK-NEXT: @llvm.objc.autorelease
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test15c(i8* %x, i64 %n) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.autorelease(i8* %x) nounwind
  call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  ret void
}

; Retain+release pairs in diamonds, all dominated by a retain.

; CHECK-LABEL: define void @test16a(
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK-NOT: @objc
; CHECK: purple:
; CHECK: @use_pointer
; CHECK: @llvm.objc.release
; CHECK: }
define void @test16a(i1 %a, i1 %b, i8* %x) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br i1 %a, label %red, label %orange

red:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

orange:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

yellow:
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  br i1 %b, label %green, label %blue

green:
  call void @llvm.objc.release(i8* %x) nounwind
  br label %purple

blue:
  call void @llvm.objc.release(i8* %x) nounwind
  br label %purple

purple:
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; CHECK-LABEL: define void @test16b(
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK-NOT: @objc
; CHECK: purple:
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @use_pointer
; CHECK-NEXT: @llvm.objc.release
; CHECK: }
define void @test16b(i1 %a, i1 %b, i8* %x) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br i1 %a, label %red, label %orange

red:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

orange:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

yellow:
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  br i1 %b, label %green, label %blue

green:
  call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  br label %purple

blue:
  call void @llvm.objc.release(i8* %x) nounwind
  br label %purple

purple:
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; CHECK-LABEL: define void @test16c(
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK-NOT: @objc
; CHECK: purple:
; CHECK: @use_pointer
; CHECK: @llvm.objc.release
; CHECK: }
define void @test16c(i1 %a, i1 %b, i8* %x) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br i1 %a, label %red, label %orange

red:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

orange:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

yellow:
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  br i1 %b, label %green, label %blue

green:
  call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  br label %purple

blue:
  call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  br label %purple

purple:
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  ret void
}

; CHECK-LABEL: define void @test16d(
; CHECK: @llvm.objc.retain(i8* %x)
; CHECK: @llvm.objc
; CHECK: }
define void @test16d(i1 %a, i1 %b, i8* %x) {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br i1 %a, label %red, label %orange

red:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

orange:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  br label %yellow

yellow:
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  br i1 %b, label %green, label %blue

green:
  call void @llvm.objc.release(i8* %x) nounwind
  br label %purple

blue:
  call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  br label %purple

purple:
  ret void
}

; Delete no-ops.

; CHECK-LABEL: define void @test18(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test18() {
  call i8* @llvm.objc.retain(i8* null)
  call void @llvm.objc.release(i8* null)
  call i8* @llvm.objc.autorelease(i8* null)
  ret void
}

; Delete no-ops where undef can be assumed to be null.

; CHECK-LABEL: define void @test18b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test18b() {
  call i8* @llvm.objc.retain(i8* undef)
  call void @llvm.objc.release(i8* undef)
  call i8* @llvm.objc.autorelease(i8* undef)
  ret void
}

; Replace uses of arguments with uses of return values, to reduce
; register pressure.

; CHECK: define void @test19(i32* %y) {
; CHECK:   %z = bitcast i32* %y to i8*
; CHECK:   %0 = bitcast i32* %y to i8*
; CHECK:   %1 = tail call i8* @llvm.objc.retain(i8* %0)
; CHECK:   call void @use_pointer(i8* %z)
; CHECK:   call void @use_pointer(i8* %z)
; CHECK:   %2 = bitcast i32* %y to i8*
; CHECK:   call void @llvm.objc.release(i8* %2)
; CHECK:   ret void
; CHECK: }
define void @test19(i32* %y) {
entry:
  %x = bitcast i32* %y to i8*
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind
  %z = bitcast i32* %y to i8*
  call void @use_pointer(i8* %z)
  call void @use_pointer(i8* %z)
  call void @llvm.objc.release(i8* %x)
  ret void
}

; Bitcast insertion

; CHECK-LABEL: define void @test20(
; CHECK: %tmp1 = tail call i8* @llvm.objc.retain(i8* %tmp) [[NUW]]
; CHECK-NEXT: invoke
; CHECK: }
define void @test20(double* %self) personality i32 (...)* @__gxx_personality_v0 {
if.then12:
  %tmp = bitcast double* %self to i8*
  %tmp1 = call i8* @llvm.objc.retain(i8* %tmp) nounwind
  invoke void @invokee()
          to label %invoke.cont23 unwind label %lpad20

invoke.cont23:                                    ; preds = %if.then12
  invoke void @invokee()
          to label %if.end unwind label %lpad20

lpad20:                                           ; preds = %invoke.cont23, %if.then12
  %tmp502 = phi double* [ undef, %invoke.cont23 ], [ %self, %if.then12 ]
  %exn = landingpad {i8*, i32}
           cleanup
  unreachable

if.end:                                           ; preds = %invoke.cont23
  ret void
}

; Delete a redundant retain,autorelease when forwaring a call result
; directly to a return value.

; CHECK-LABEL: define i8* @test21(
; CHECK: call i8* @returner()
; CHECK-NEXT: ret i8* %call
; CHECK-NEXT: }
define i8* @test21() {
entry:
  %call = call i8* @returner()
  %0 = call i8* @llvm.objc.retain(i8* %call) nounwind
  %1 = call i8* @llvm.objc.autorelease(i8* %0) nounwind
  ret i8* %1
}

; Move an objc call up through a phi that has null operands.

; CHECK-LABEL: define void @test22(
; CHECK: B:
; CHECK:   %1 = bitcast double* %p to i8*
; CHECK:   call void @llvm.objc.release(i8* %1)
; CHECK:   br label %C
; CHECK: C:                                                ; preds = %B, %A
; CHECK-NOT: @llvm.objc.release
; CHECK: }
define void @test22(double* %p, i1 %a) {
  br i1 %a, label %A, label %B
A:
  br label %C
B:
  br label %C
C:
  %h = phi double* [ null, %A ], [ %p, %B ]
  %c = bitcast double* %h to i8*
  call void @llvm.objc.release(i8* %c), !clang.imprecise_release !0
  ret void
}

; Do not move an llvm.objc.release that doesn't have the clang.imprecise_release tag.

; CHECK-LABEL: define void @test22_precise(
; CHECK: %[[P0:.*]] = phi double*
; CHECK: %[[V0:.*]] = bitcast double* %[[P0]] to i8*
; CHECK: call void @llvm.objc.release(i8* %[[V0]])
; CHECK: ret void
define void @test22_precise(double* %p, i1 %a) {
  br i1 %a, label %A, label %B
A:
  br label %C
B:
  br label %C
C:
  %h = phi double* [ null, %A ], [ %p, %B ]
  %c = bitcast double* %h to i8*
  call void @llvm.objc.release(i8* %c)
  ret void
}

; Any call can decrement a retain count.

; CHECK-LABEL: define void @test24(
; CHECK: @llvm.objc.retain(i8* %a)
; CHECK: @llvm.objc.release
; CHECK: }
define void @test24(i8* %r, i8* %a) {
  call i8* @llvm.objc.retain(i8* %a)
  call void @use_pointer(i8* %r)
  %q = load i8, i8* %a
  call void @llvm.objc.release(i8* %a)
  ret void
}

; Don't move a retain/release pair if the release can be moved
; but the retain can't be moved to balance it.

; CHECK-LABEL: define void @test25(
; CHECK: entry:
; CHECK:   call i8* @llvm.objc.retain(i8* %p)
; CHECK: true:
; CHECK: done:
; CHECK:   call void @llvm.objc.release(i8* %p)
; CHECK: }
define void @test25(i8* %p, i1 %x) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  br i1 %x, label %true, label %done

true:
  store i8 0, i8* %p
  br label %done

done:
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Don't move a retain/release pair if the retain can be moved
; but the release can't be moved to balance it.

; CHECK-LABEL: define void @test26(
; CHECK: entry:
; CHECK:   call i8* @llvm.objc.retain(i8* %p)
; CHECK: true:
; CHECK: done:
; CHECK:   call void @llvm.objc.release(i8* %p)
; CHECK: }
define void @test26(i8* %p, i1 %x) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  br label %done

done:
  store i8 0, i8* %p
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Don't sink the retain,release into the loop.

; CHECK-LABEL: define void @test27(
; CHECK: entry:
; CHECK: call i8* @llvm.objc.retain(i8* %p)
; CHECK: loop:
; CHECK-NOT: @llvm.objc.
; CHECK: done:
; CHECK: call void @llvm.objc.release
; CHECK: }
define void @test27(i8* %p, i1 %x, i1 %y) {
entry: 
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %loop, label %done

loop:
  call void @callee()
  store i8 0, i8* %p
  br i1 %y, label %done, label %loop
  
done: 
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Trivial code motion case: Triangle.

; CHECK-LABEL: define void @test28(
; CHECK-NOT: @llvm.objc.
; CHECK: true:
; CHECK: call i8* @llvm.objc.retain
; CHECK: call void @callee()
; CHECK: store
; CHECK: call void @llvm.objc.release
; CHECK: done:
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test28(i8* %p, i1 %x) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  store i8 0, i8* %p
  br label %done

done:
  call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0
  ret void
}

; Trivial code motion case: Triangle, but no metadata. Don't move past
; unrelated memory references!

; CHECK-LABEL: define void @test28b(
; CHECK: call i8* @llvm.objc.retain
; CHECK: true:
; CHECK-NOT: @llvm.objc.
; CHECK: call void @callee()
; CHECK-NOT: @llvm.objc.
; CHECK: store
; CHECK-NOT: @llvm.objc.
; CHECK: done:
; CHECK: @llvm.objc.release
; CHECK: }
define void @test28b(i8* %p, i1 %x, i8* noalias %t) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  store i8 0, i8* %p
  br label %done

done:
  store i8 0, i8* %t
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Trivial code motion case: Triangle, with metadata. Do move past
; unrelated memory references! And preserve the metadata.

; CHECK-LABEL: define void @test28c(
; CHECK-NOT: @llvm.objc.
; CHECK: true:
; CHECK: call i8* @llvm.objc.retain
; CHECK: call void @callee()
; CHECK: store
; CHECK: call void @llvm.objc.release(i8* %p) [[NUW]], !clang.imprecise_release
; CHECK: done:
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test28c(i8* %p, i1 %x, i8* noalias %t) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  store i8 0, i8* %p
  br label %done

done:
  store i8 0, i8* %t
  call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0
  ret void
}

; Like test28. but with two releases.

; CHECK-LABEL: define void @test29(
; CHECK: call i8* @llvm.objc.retain
; CHECK: true:
; CHECK: call void @callee()
; CHECK: store
; CHECK: done:
; CHECK: call void @llvm.objc.release
; CHECK: ohno:
; CHECK: call void @llvm.objc.release
; CHECK: }
define void @test29(i8* %p, i1 %x, i1 %y) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  store i8 0, i8* %p
  br i1 %y, label %done, label %ohno

done:
  call void @llvm.objc.release(i8* %p)
  ret void

ohno:
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Basic case with the use and call in a diamond
; with an extra release.

; CHECK-LABEL: define void @test30(
; CHECK: call i8* @llvm.objc.retain
; CHECK: true:
; CHECK: call void @callee()
; CHECK: store
; CHECK: false:
; CHECK: done:
; CHECK: call void @llvm.objc.release
; CHECK: ohno:
; CHECK: call void @llvm.objc.release
; CHECK: }
define void @test30(i8* %p, i1 %x, i1 %y, i1 %z) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %false

true:
  call void @callee()
  store i8 0, i8* %p
  br i1 %y, label %done, label %ohno

false:
  br i1 %z, label %done, label %ohno

done:
  call void @llvm.objc.release(i8* %p)
  ret void

ohno:
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Basic case with a mergeable release.

; CHECK-LABEL: define void @test31(
; CHECK: call i8* @llvm.objc.retain(i8* %p)
; CHECK: call void @callee()
; CHECK: store
; CHECK: true:
; CHECK: call void @llvm.objc.release
; CHECK: false:
; CHECK: call void @llvm.objc.release
; CHECK: ret void
; CHECK: }
define void @test31(i8* %p, i1 %x) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  store i8 0, i8* %p
  br i1 %x, label %true, label %false
true:
  call void @llvm.objc.release(i8* %p)
  ret void
false:
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Don't consider bitcasts or getelementptrs direct uses.

; CHECK-LABEL: define void @test32(
; CHECK: call i8* @llvm.objc.retain
; CHECK: true:
; CHECK: call void @callee()
; CHECK: store
; CHECK: done:
; CHECK: call void @llvm.objc.release
; CHECK: }
define void @test32(i8* %p, i1 %x) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  store i8 0, i8* %p
  br label %done

done:
  %g = bitcast i8* %p to i8*
  %h = getelementptr i8, i8* %g, i64 0
  call void @llvm.objc.release(i8* %g)
  ret void
}

; Do consider icmps to be direct uses.

; CHECK-LABEL: define void @test33(
; CHECK: call i8* @llvm.objc.retain
; CHECK: true:
; CHECK: call void @callee()
; CHECK: icmp
; CHECK: done:
; CHECK: call void @llvm.objc.release
; CHECK: }
define void @test33(i8* %p, i1 %x, i8* %y) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  %v = icmp eq i8* %p, %y
  br label %done

done:
  %g = bitcast i8* %p to i8*
  %h = getelementptr i8, i8* %g, i64 0
  call void @llvm.objc.release(i8* %g)
  ret void
}

; Delete retain,release if there's just a possible dec and we have imprecise
; releases.

; CHECK-LABEL: define void @test34a(
; CHECK:   call i8* @llvm.objc.retain
; CHECK: true:
; CHECK: done:
; CHECK: call void @llvm.objc.release
; CHECK: }
define void @test34a(i8* %p, i1 %x, i8* %y) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  br label %done

done:
  %g = bitcast i8* %p to i8*
  %h = getelementptr i8, i8* %g, i64 0
  call void @llvm.objc.release(i8* %g)
  ret void
}

; CHECK-LABEL: define void @test34b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test34b(i8* %p, i1 %x, i8* %y) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  call void @callee()
  br label %done

done:
  %g = bitcast i8* %p to i8*
  %h = getelementptr i8, i8* %g, i64 0
  call void @llvm.objc.release(i8* %g), !clang.imprecise_release !0
  ret void
}


; Delete retain,release if there's just a use and we do not have a precise
; release.

; Precise.
; CHECK-LABEL: define void @test35a(
; CHECK: entry:
; CHECK:   call i8* @llvm.objc.retain
; CHECK: true:
; CHECK: done:
; CHECK:   call void @llvm.objc.release
; CHECK: }
define void @test35a(i8* %p, i1 %x, i8* %y) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  %v = icmp eq i8* %p, %y
  br label %done

done:
  %g = bitcast i8* %p to i8*
  %h = getelementptr i8, i8* %g, i64 0
  call void @llvm.objc.release(i8* %g)
  ret void
}

; Imprecise.
; CHECK-LABEL: define void @test35b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test35b(i8* %p, i1 %x, i8* %y) {
entry:
  %f0 = call i8* @llvm.objc.retain(i8* %p)
  br i1 %x, label %true, label %done

true:
  %v = icmp eq i8* %p, %y
  br label %done

done:
  %g = bitcast i8* %p to i8*
  %h = getelementptr i8, i8* %g, i64 0
  call void @llvm.objc.release(i8* %g), !clang.imprecise_release !0
  ret void
}

; Delete a retain,release if there's no actual use and we have precise release.

; CHECK-LABEL: define void @test36a(
; CHECK: @llvm.objc.retain
; CHECK: call void @callee()
; CHECK-NOT: @llvm.objc.
; CHECK: call void @callee()
; CHECK: @llvm.objc.release
; CHECK: }
define void @test36a(i8* %p) {
entry:
  call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  call void @callee()
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Like test36, but with metadata.

; CHECK-LABEL: define void @test36b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test36b(i8* %p) {
entry:
  call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  call void @callee()
  call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0
  ret void
}

; Be aggressive about analyzing phis to eliminate possible uses.

; CHECK-LABEL: define void @test38(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test38(i8* %p, i1 %u, i1 %m, i8* %z, i8* %y, i8* %x, i8* %w) {
entry:
  call i8* @llvm.objc.retain(i8* %p)
  br i1 %u, label %true, label %false
true:
  br i1 %m, label %a, label %b
false:
  br i1 %m, label %c, label %d
a:
  br label %e
b:
  br label %e
c:
  br label %f
d:
  br label %f
e:
  %j = phi i8* [ %z, %a ], [ %y, %b ]
  br label %g
f:
  %k = phi i8* [ %w, %c ], [ %x, %d ]
  br label %g
g:
  %h = phi i8* [ %j, %e ], [ %k, %f ]
  call void @use_pointer(i8* %h)
  call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0
  ret void
}

; Delete retain,release pairs around loops.

; CHECK-LABEL: define void @test39(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test39(i8* %p) {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %p)
  br label %loop

loop:                                             ; preds = %loop, %entry
  br i1 undef, label %loop, label %exit

exit:                                             ; preds = %loop
  call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0
  ret void
}

; Delete retain,release pairs around loops containing uses.

; CHECK-LABEL: define void @test39b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test39b(i8* %p) {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %p)
  br label %loop

loop:                                             ; preds = %loop, %entry
  store i8 0, i8* %0
  br i1 undef, label %loop, label %exit

exit:                                             ; preds = %loop
  call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0
  ret void
}

; Delete retain,release pairs around loops containing potential decrements.

; CHECK-LABEL: define void @test39c(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test39c(i8* %p) {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %p)
  br label %loop

loop:                                             ; preds = %loop, %entry
  call void @use_pointer(i8* %0)
  br i1 undef, label %loop, label %exit

exit:                                             ; preds = %loop
  call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0
  ret void
}

; Delete retain,release pairs around loops even if
; the successors are in a different order.

; CHECK-LABEL: define void @test40(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test40(i8* %p) {
entry:
  %0 = call i8* @llvm.objc.retain(i8* %p)
  br label %loop

loop:                                             ; preds = %loop, %entry
  call void @use_pointer(i8* %0)
  br i1 undef, label %exit, label %loop

exit:                                             ; preds = %loop
  call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0
  ret void
}

; Do the known-incremented retain+release elimination even if the pointer
; is also autoreleased.

; CHECK-LABEL: define void @test42(
; CHECK-NEXT: entry:
; CHECK-NEXT: call i8* @llvm.objc.retain(i8* %p)
; CHECK-NEXT: call i8* @llvm.objc.autorelease(i8* %p)
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @llvm.objc.release(i8* %p)
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test42(i8* %p) {
entry:
  call i8* @llvm.objc.retain(i8* %p)
  call i8* @llvm.objc.autorelease(i8* %p)
  call i8* @llvm.objc.retain(i8* %p)
  call void @use_pointer(i8* %p)
  call void @use_pointer(i8* %p)
  call void @llvm.objc.release(i8* %p)
  call void @use_pointer(i8* %p)
  call void @use_pointer(i8* %p)
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Don't the known-incremented retain+release elimination if the pointer is
; autoreleased and there's an autoreleasePoolPop.

; CHECK-LABEL: define void @test43(
; CHECK-NEXT: entry:
; CHECK-NEXT: call i8* @llvm.objc.retain(i8* %p)
; CHECK-NEXT: call i8* @llvm.objc.autorelease(i8* %p)
; CHECK-NEXT: call i8* @llvm.objc.retain
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @llvm.objc.autoreleasePoolPop(i8* undef)
; CHECK-NEXT: call void @llvm.objc.release
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test43(i8* %p) {
entry:
  call i8* @llvm.objc.retain(i8* %p)
  call i8* @llvm.objc.autorelease(i8* %p)
  call i8* @llvm.objc.retain(i8* %p)
  call void @use_pointer(i8* %p)
  call void @use_pointer(i8* %p)
  call void @llvm.objc.autoreleasePoolPop(i8* undef)
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Do the known-incremented retain+release elimination if the pointer is
; autoreleased and there's an autoreleasePoolPush.

; CHECK-LABEL: define void @test43b(
; CHECK-NEXT: entry:
; CHECK-NEXT: call i8* @llvm.objc.retain(i8* %p)
; CHECK-NEXT: call i8* @llvm.objc.autorelease(i8* %p)
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call i8* @llvm.objc.autoreleasePoolPush()
; CHECK-NEXT: call void @use_pointer(i8* %p)
; CHECK-NEXT: call void @llvm.objc.release
; CHECK-NEXT: ret void
; CHECK-NEXT: }
define void @test43b(i8* %p) {
entry:
  call i8* @llvm.objc.retain(i8* %p)
  call i8* @llvm.objc.autorelease(i8* %p)
  call i8* @llvm.objc.retain(i8* %p)
  call void @use_pointer(i8* %p)
  call void @use_pointer(i8* %p)
  call i8* @llvm.objc.autoreleasePoolPush()
  call void @llvm.objc.release(i8* %p)
  call void @use_pointer(i8* %p)
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Do retain+release elimination for non-provenance pointers.

; CHECK-LABEL: define void @test44(
; CHECK-NOT: llvm.objc.
; CHECK: }
define void @test44(i8** %pp) {
  %p = load i8*, i8** %pp
  %q = call i8* @llvm.objc.retain(i8* %p)
  call void @llvm.objc.release(i8* %q)
  ret void
}

; Don't delete retain+release with an unknown-provenance
; may-alias llvm.objc.release between them.

; CHECK-LABEL: define void @test45(
; CHECK: call i8* @llvm.objc.retain(i8* %p)
; CHECK: call void @llvm.objc.release(i8* %q)
; CHECK: call void @use_pointer(i8* %p)
; CHECK: call void @llvm.objc.release(i8* %p)
; CHECK: }
define void @test45(i8** %pp, i8** %qq) {
  %p = load i8*, i8** %pp
  %q = load i8*, i8** %qq
  call i8* @llvm.objc.retain(i8* %p)
  call void @llvm.objc.release(i8* %q)
  call void @use_pointer(i8* %p)
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Don't delete retain and autorelease here.

; CHECK-LABEL: define void @test46(
; CHECK: tail call i8* @llvm.objc.retain(i8* %p) [[NUW]]
; CHECK: true:
; CHECK: call i8* @llvm.objc.autorelease(i8* %p) [[NUW]]
; CHECK: }
define void @test46(i8* %p, i1 %a) {
entry:
  call i8* @llvm.objc.retain(i8* %p)
  br i1 %a, label %true, label %false

true:
  call i8* @llvm.objc.autorelease(i8* %p)
  call void @use_pointer(i8* %p)
  ret void

false:
  ret void
}

; Delete no-op cast calls.

; CHECK-LABEL: define i8* @test47(
; CHECK-NOT: call
; CHECK: ret i8* %p
; CHECK: }
define i8* @test47(i8* %p) nounwind {
  %x = call i8* @llvm.objc.retainedObject(i8* %p)
  ret i8* %x
}

; Delete no-op cast calls.

; CHECK-LABEL: define i8* @test48(
; CHECK-NOT: call
; CHECK: ret i8* %p
; CHECK: }
define i8* @test48(i8* %p) nounwind {
  %x = call i8* @llvm.objc.unretainedObject(i8* %p)
  ret i8* %x
}

; Delete no-op cast calls.

; CHECK-LABEL: define i8* @test49(
; CHECK-NOT: call
; CHECK: ret i8* %p
; CHECK: }
define i8* @test49(i8* %p) nounwind {
  %x = call i8* @llvm.objc.unretainedPointer(i8* %p)
  ret i8* %x
}

; Do delete retain+release with intervening stores of the address value if we
; have imprecise release attached to llvm.objc.release.

; CHECK-LABEL:      define void @test50a(
; CHECK-NEXT:   call i8* @llvm.objc.retain
; CHECK-NEXT:   call void @callee
; CHECK-NEXT:   store
; CHECK-NEXT:   call void @llvm.objc.release
; CHECK-NEXT:   ret void
; CHECK-NEXT: }
define void @test50a(i8* %p, i8** %pp) {
  call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  store i8* %p, i8** %pp
  call void @llvm.objc.release(i8* %p)
  ret void
}

; CHECK-LABEL: define void @test50b(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test50b(i8* %p, i8** %pp) {
  call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  store i8* %p, i8** %pp
  call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0
  ret void
}


; Don't delete retain+release with intervening stores through the
; address value.

; CHECK-LABEL: define void @test51a(
; CHECK: call i8* @llvm.objc.retain(i8* %p)
; CHECK: call void @llvm.objc.release(i8* %p)
; CHECK: ret void
; CHECK: }
define void @test51a(i8* %p) {
  call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  store i8 0, i8* %p
  call void @llvm.objc.release(i8* %p)
  ret void
}

; CHECK-LABEL: define void @test51b(
; CHECK: call i8* @llvm.objc.retain(i8* %p)
; CHECK: call void @llvm.objc.release(i8* %p)
; CHECK: ret void
; CHECK: }
define void @test51b(i8* %p) {
  call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  store i8 0, i8* %p
  call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0
  ret void
}

; Don't delete retain+release with intervening use of a pointer of
; unknown provenance.

; CHECK-LABEL: define void @test52a(
; CHECK: call i8* @llvm.objc.retain
; CHECK: call void @callee()
; CHECK: call void @use_pointer(i8* %z)
; CHECK: call void @llvm.objc.release
; CHECK: ret void
; CHECK: }
define void @test52a(i8** %zz, i8** %pp) {
  %p = load i8*, i8** %pp
  %1 = call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  %z = load i8*, i8** %zz
  call void @use_pointer(i8* %z)
  call void @llvm.objc.release(i8* %p)
  ret void
}

; CHECK-LABEL: define void @test52b(
; CHECK: call i8* @llvm.objc.retain
; CHECK: call void @callee()
; CHECK: call void @use_pointer(i8* %z)
; CHECK: call void @llvm.objc.release
; CHECK: ret void
; CHECK: }
define void @test52b(i8** %zz, i8** %pp) {
  %p = load i8*, i8** %pp
  %1 = call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  %z = load i8*, i8** %zz
  call void @use_pointer(i8* %z)
  call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0
  ret void
}

; Like test52, but the pointer has function type, so it's assumed to
; be not reference counted.
; Oops. That's wrong. Clang sometimes uses function types gratuitously.
; See rdar://10551239.

; CHECK-LABEL: define void @test53(
; CHECK: @llvm.objc.
; CHECK: }
define void @test53(void ()** %zz, i8** %pp) {
  %p = load i8*, i8** %pp
  %1 = call i8* @llvm.objc.retain(i8* %p)
  call void @callee()
  %z = load void ()*, void ()** %zz
  call void @callee_fnptr(void ()* %z)
  call void @llvm.objc.release(i8* %p)
  ret void
}

; Convert autorelease to release if the value is unused.

; CHECK-LABEL: define void @test54(
; CHECK: call i8* @returner()
; CHECK-NEXT: call void @llvm.objc.release(i8* %t) [[NUW]], !clang.imprecise_release ![[RELEASE]]
; CHECK-NEXT: ret void
; CHECK: }
define void @test54() {
  %t = call i8* @returner()
  call i8* @llvm.objc.autorelease(i8* %t)
  ret void
}

; Nested retain+release pairs. Delete them both.

; CHECK-LABEL: define void @test55(
; CHECK-NOT: @objc
; CHECK: }
define void @test55(i8* %x) { 
entry: 
  %0 = call i8* @llvm.objc.retain(i8* %x) nounwind 
  %1 = call i8* @llvm.objc.retain(i8* %x) nounwind 
  call void @llvm.objc.release(i8* %x) nounwind 
  call void @llvm.objc.release(i8* %x) nounwind 
  ret void 
}

; Nested retain+release pairs where the inner pair depends
; on the outer pair to be removed, and then the outer pair
; can be partially eliminated. Plus an extra outer pair to
; eliminate, for fun.

; CHECK-LABEL: define void @test56(
; CHECK-NOT: @objc
; CHECK: if.then:
; CHECK-NEXT: %0 = tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK-NEXT: tail call void @use_pointer(i8* %x)
; CHECK-NEXT: tail call void @use_pointer(i8* %x)
; CHECK-NEXT: tail call void @llvm.objc.release(i8* %x) [[NUW]], !clang.imprecise_release ![[RELEASE]]
; CHECK-NEXT: br label %if.end
; CHECK-NOT: @objc
; CHECK: }
define void @test56(i8* %x, i32 %n) {
entry:
  %0 = tail call i8* @llvm.objc.retain(i8* %x) nounwind
  %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind
  %tobool = icmp eq i32 %n, 0
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  %2 = tail call i8* @llvm.objc.retain(i8* %1) nounwind
  tail call void @use_pointer(i8* %2)
  tail call void @use_pointer(i8* %2)
  tail call void @llvm.objc.release(i8* %2) nounwind, !clang.imprecise_release !0
  br label %if.end

if.end:                                           ; preds = %entry, %if.then
  tail call void @llvm.objc.release(i8* %1) nounwind, !clang.imprecise_release !0
  tail call void @llvm.objc.release(i8* %0) nounwind, !clang.imprecise_release !0
  ret void
}

; When there are adjacent retain+release pairs, the first one is known
; unnecessary because the presence of the second one means that the first one
; won't be deleting the object.

; CHECK-LABEL:      define void @test57(
; CHECK-NEXT: entry:
; CHECK-NEXT:   tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   call void @llvm.objc.release(i8* %x) [[NUW]]
; CHECK-NEXT:   ret void
; CHECK-NEXT: }
define void @test57(i8* %x) nounwind {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; An adjacent retain+release pair is sufficient even if it will be
; removed itself.

; CHECK-LABEL:      define void @test58(
; CHECK-NEXT: entry:
; CHECK-NEXT:   @llvm.objc.retain
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   ret void
; CHECK-NEXT: }
define void @test58(i8* %x) nounwind {
entry:
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Don't delete the second retain+release pair in an adjacent set.

; CHECK-LABEL:      define void @test59(
; CHECK-NEXT: entry:
; CHECK-NEXT:   %0 = tail call i8* @llvm.objc.retain(i8* %x) [[NUW]]
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   call void @use_pointer(i8* %x)
; CHECK-NEXT:   call void @llvm.objc.release(i8* %x) [[NUW]]
; CHECK-NEXT:   ret void
; CHECK-NEXT: }
define void @test59(i8* %x) nounwind {
entry:
  %a = call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @llvm.objc.release(i8* %x) nounwind
  %b = call i8* @llvm.objc.retain(i8* %x) nounwind
  call void @use_pointer(i8* %x)
  call void @use_pointer(i8* %x)
  call void @llvm.objc.release(i8* %x) nounwind
  ret void
}

; Constant pointers to objects don't need reference counting.

@constptr = external constant i8*
@something = external global i8*

; We have a precise lifetime retain/release here. We can not remove them since
; @something is not constant.

; CHECK-LABEL: define void @test60a(
; CHECK: call i8* @llvm.objc.retain
; CHECK: call void @llvm.objc.release
; CHECK: }
define void @test60a() {
  %t = load i8*, i8** @constptr
  %s = load i8*, i8** @something
  call i8* @llvm.objc.retain(i8* %s)
  call void @callee()
  call void @use_pointer(i8* %t)
  call void @llvm.objc.release(i8* %s)
  ret void
}

; CHECK-LABEL: define void @test60b(
; CHECK: call i8* @llvm.objc.retain
; CHECK-NOT: call i8* @llvm.objc.retain
; CHECK-NOT: call i8* @llvm.objc.release
; CHECK: }
define void @test60b() {
  %t = load i8*, i8** @constptr
  %s = load i8*, i8** @something
  call i8* @llvm.objc.retain(i8* %t)
  call i8* @llvm.objc.retain(i8* %t)
  call void @callee()
  call void @use_pointer(i8* %s)
  call void @llvm.objc.release(i8* %t)
  ret void
}

; CHECK-LABEL: define void @test60c(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test60c() {
  %t = load i8*, i8** @constptr
  %s = load i8*, i8** @something
  call i8* @llvm.objc.retain(i8* %t)
  call void @callee()
  call void @use_pointer(i8* %s)
  call void @llvm.objc.release(i8* %t), !clang.imprecise_release !0
  ret void
}

; CHECK-LABEL: define void @test60d(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test60d() {
  %t = load i8*, i8** @constptr
  %s = load i8*, i8** @something
  call i8* @llvm.objc.retain(i8* %t)
  call void @callee()
  call void @use_pointer(i8* %s)
  call void @llvm.objc.release(i8* %t)
  ret void
}

; CHECK-LABEL: define void @test60e(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test60e() {
  %t = load i8*, i8** @constptr
  %s = load i8*, i8** @something
  call i8* @llvm.objc.retain(i8* %t)
  call void @callee()
  call void @use_pointer(i8* %s)
  call void @llvm.objc.release(i8* %t), !clang.imprecise_release !0
  ret void
}

; Constant pointers to objects don't need to be considered related to other
; pointers.

; CHECK-LABEL: define void @test61(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test61() {
  %t = load i8*, i8** @constptr
  call i8* @llvm.objc.retain(i8* %t)
  call void @callee()
  call void @use_pointer(i8* %t)
  call void @llvm.objc.release(i8* %t)
  ret void
}

; Delete a retain matched by releases when one is inside the loop and the
; other is outside the loop.

; CHECK-LABEL: define void @test62(
; CHECK-NOT: @llvm.objc.
; CHECK: }
define void @test62(i8* %x, i1* %p) nounwind {
entry:
  br label %loop

loop:
  call i8* @llvm.objc.retain(i8* %x)
  %q = load i1, i1* %p
  br i1 %q, label %loop.more, label %exit

loop.more:
  call void @llvm.objc.release(i8* %x)
  br label %loop

exit:
  call void @llvm.objc.release(i8* %x)
  ret void
}

; Like test62 but with no release in exit.
; Don't delete anything!

; CHECK-LABEL: define void @test63(
; CHECK: loop:
; CHECK:   tail call i8* @llvm.objc.retain(i8* %x)
; CHECK: loop.more:
; CHECK:   call void @llvm.objc.release(i8* %x)
; CHECK: }
define void @test63(i8* %x, i1* %p) nounwind {
entry:
  br label %loop

loop:
  call i8* @llvm.objc.retain(i8* %x)
  %q = load i1, i1* %p
  br i1 %q, label %loop.more, label %exit

loop.more:
  call void @llvm.objc.release(i8* %x)
  br label %loop

exit:
  ret void
}

; Like test62 but with no release in loop.more.
; Don't delete anything!

; CHECK-LABEL: define void @test64(
; CHECK: loop:
; CHECK:   tail call i8* @llvm.objc.retain(i8* %x)
; CHECK: exit:
; CHECK:   call void @llvm.objc.release(i8* %x)
; CHECK: }
define void @test64(i8* %x, i1* %p) nounwind {
entry:
  br label %loop

loop:
  call i8* @llvm.objc.retain(i8* %x)
  %q = load i1, i1* %p
  br i1 %q, label %loop.more, label %exit

loop.more:
  br label %loop

exit:
  call void @llvm.objc.release(i8* %x)
  ret void
}

; Move an autorelease past a phi with a null.

; CHECK-LABEL: define i8* @test65(
; CHECK: if.then:
; CHECK:   call i8* @llvm.objc.autorelease(
; CHECK: return:
; CHECK-NOT: @llvm.objc.autorelease
; CHECK: }
define i8* @test65(i1 %x) {
entry:
  br i1 %x, label %return, label %if.then

if.then:                                          ; preds = %entry
  %c = call i8* @returner()
  %s = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %c) nounwind
  br label %return

return:                                           ; preds = %if.then, %entry
  %retval = phi i8* [ %s, %if.then ], [ null, %entry ]
  %q = call i8* @llvm.objc.autorelease(i8* %retval) nounwind
  ret i8* %retval
}

; Don't move an autorelease past an autorelease pool boundary.

; CHECK-LABEL: define i8* @test65b(
; CHECK: if.then:
; CHECK-NOT: @llvm.objc.autorelease
; CHECK: return:
; CHECK:   call i8* @llvm.objc.autorelease(
; CHECK: }
define i8* @test65b(i1 %x) {
entry:
  %t = call i8* @llvm.objc.autoreleasePoolPush()
  br i1 %x, label %return, label %if.then

if.then:                                          ; preds = %entry
  %c = call i8* @returner()
  %s = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %c) nounwind
  br label %return

return:                                           ; preds = %if.then, %entry
  %retval = phi i8* [ %s, %if.then ], [ null, %entry ]
  call void @llvm.objc.autoreleasePoolPop(i8* %t)
  %q = call i8* @llvm.objc.autorelease(i8* %retval) nounwind
  ret i8* %retval
}

; Don't move an autoreleaseReuturnValue, which would break
; the RV optimization.

; CHECK-LABEL: define i8* @test65c(
; CHECK: if.then:
; CHECK-NOT: @llvm.objc.autorelease
; CHECK: return:
; CHECK:   call i8* @llvm.objc.autoreleaseReturnValue(
; CHECK: }
define i8* @test65c(i1 %x) {
entry:
  br i1 %x, label %return, label %if.then

if.then:                                          ; preds = %entry
  %c = call i8* @returner()
  %s = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %c) nounwind
  br label %return

return:                                           ; preds = %if.then, %entry
  %retval = phi i8* [ %s, %if.then ], [ null, %entry ]
  %q = call i8* @llvm.objc.autoreleaseReturnValue(i8* %retval) nounwind
  ret i8* %retval
}

; CHECK-LABEL: define i8* @test65d(
; CHECK: if.then:
; CHECK-NOT: @llvm.objc.autorelease
; CHECK: return:
; CHECK:   call i8* @llvm.objc.autoreleaseReturnValue(
; CHECK: }
define i8* @test65d(i1 %x) {
entry:
  br i1 %x, label %return, label %if.then

if.then:                                          ; preds = %entry
  %c = call i8* @returner()
  %s = call i8* @llvm.objc.unsafeClaimAutoreleasedReturnValue(i8* %c) nounwind
  br label %return

return:                                           ; preds = %if.then, %entry
  %retval = phi i8* [ %s, %if.then ], [ null, %entry ]
  %q = call i8* @llvm.objc.autoreleaseReturnValue(i8* %retval) nounwind
  ret i8* %retval
}

; An llvm.objc.retain can serve as a may-use for a different pointer.
; rdar://11931823

; CHECK-LABEL: define void @test66a(
; CHECK:   tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %call) [[NUW]]
; CHECK:   tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %cond) [[NUW]]
; CHECK: }
define void @test66a(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) {
entry:
  br i1 %tobool, label %cond.true, label %cond.end

cond.true:
  br label %cond.end

cond.end:                                         ; preds = %cond.true, %entry
  %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ]
  %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind
  tail call void @llvm.objc.release(i8* %call) nounwind
  %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar
  %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind
  tail call void @llvm.objc.release(i8* %cond) nounwind
  ret void
}

; CHECK-LABEL: define void @test66b(
; CHECK:   tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %call) [[NUW]]
; CHECK:   tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %cond) [[NUW]]
; CHECK: }
define void @test66b(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) {
entry:
  br i1 %tobool, label %cond.true, label %cond.end

cond.true:
  br label %cond.end

cond.end:                                         ; preds = %cond.true, %entry
  %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ]
  %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind
  tail call void @llvm.objc.release(i8* %call) nounwind, !clang.imprecise_release !0
  %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar
  %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind
  tail call void @llvm.objc.release(i8* %cond) nounwind
  ret void
}

; CHECK-LABEL: define void @test66c(
; CHECK:   tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %call) [[NUW]]
; CHECK:   tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %cond) [[NUW]]
; CHECK: }
define void @test66c(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) {
entry:
  br i1 %tobool, label %cond.true, label %cond.end

cond.true:
  br label %cond.end

cond.end:                                         ; preds = %cond.true, %entry
  %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ]
  %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind
  tail call void @llvm.objc.release(i8* %call) nounwind
  %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar
  %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind, !clang.imprecise_release !0
  tail call void @llvm.objc.release(i8* %cond) nounwind
  ret void
}

; CHECK-LABEL: define void @test66d(
; CHECK:   tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %call) [[NUW]]
; CHECK:   tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]]
; CHECK:   tail call void @llvm.objc.release(i8* %cond) [[NUW]]
; CHECK: }
define void @test66d(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) {
entry:
  br i1 %tobool, label %cond.true, label %cond.end

cond.true:
  br label %cond.end

cond.end:                                         ; preds = %cond.true, %entry
  %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ]
  %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind
  tail call void @llvm.objc.release(i8* %call) nounwind, !clang.imprecise_release !0
  %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar
  %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind
  tail call void @llvm.objc.release(i8* %cond) nounwind, !clang.imprecise_release !0
  ret void
}

; A few real-world testcases.

@.str4 = private unnamed_addr constant [33 x i8] c"-[A z] = { %f, %f, { %f, %f } }\0A\00"
@"OBJC_IVAR_$_A.myZ" = global i64 20, section "__DATA, __objc_const", align 8
declare i32 @printf(i8* nocapture, ...) nounwind
declare i32 @puts(i8* nocapture) nounwind
@str = internal constant [16 x i8] c"-[ Top0 _getX ]\00"

; CHECK: define { <2 x float>, <2 x float> } @"\01-[A z]"({}* %self, i8* nocapture %_cmd) [[NUW]] {
; CHECK-NOT: @llvm.objc.
; CHECK: }

define {<2 x float>, <2 x float>} @"\01-[A z]"({}* %self, i8* nocapture %_cmd) nounwind {
invoke.cont:
  %0 = bitcast {}* %self to i8*
  %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind
  tail call void @llvm.dbg.value(metadata {}* %self, metadata !DILocalVariable(scope: !2), metadata !DIExpression()), !dbg !DILocation(scope: !2)
  tail call void @llvm.dbg.value(metadata {}* %self, metadata !DILocalVariable(scope: !2), metadata !DIExpression()), !dbg !DILocation(scope: !2)
  %ivar = load i64, i64* @"OBJC_IVAR_$_A.myZ", align 8
  %add.ptr = getelementptr i8, i8* %0, i64 %ivar
  %tmp1 = bitcast i8* %add.ptr to float*
  %tmp2 = load float, float* %tmp1, align 4
  %conv = fpext float %tmp2 to double
  %add.ptr.sum = add i64 %ivar, 4
  %tmp6 = getelementptr inbounds i8, i8* %0, i64 %add.ptr.sum
  %2 = bitcast i8* %tmp6 to float*
  %tmp7 = load float, float* %2, align 4
  %conv8 = fpext float %tmp7 to double
  %add.ptr.sum36 = add i64 %ivar, 8
  %tmp12 = getelementptr inbounds i8, i8* %0, i64 %add.ptr.sum36
  %arrayidx = bitcast i8* %tmp12 to float*
  %tmp13 = load float, float* %arrayidx, align 4
  %conv14 = fpext float %tmp13 to double
  %tmp12.sum = add i64 %ivar, 12
  %arrayidx19 = getelementptr inbounds i8, i8* %0, i64 %tmp12.sum
  %3 = bitcast i8* %arrayidx19 to float*
  %tmp20 = load float, float* %3, align 4
  %conv21 = fpext float %tmp20 to double
  %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str4, i64 0, i64 0), double %conv, double %conv8, double %conv14, double %conv21)
  %ivar23 = load i64, i64* @"OBJC_IVAR_$_A.myZ", align 8
  %add.ptr24 = getelementptr i8, i8* %0, i64 %ivar23
  %4 = bitcast i8* %add.ptr24 to i128*
  %srcval = load i128, i128* %4, align 4
  tail call void @llvm.objc.release(i8* %0) nounwind
  %tmp29 = trunc i128 %srcval to i64
  %tmp30 = bitcast i64 %tmp29 to <2 x float>
  %tmp31 = insertvalue {<2 x float>, <2 x float>} undef, <2 x float> %tmp30, 0
  %tmp32 = lshr i128 %srcval, 64
  %tmp33 = trunc i128 %tmp32 to i64
  %tmp34 = bitcast i64 %tmp33 to <2 x float>
  %tmp35 = insertvalue {<2 x float>, <2 x float>} %tmp31, <2 x float> %tmp34, 1
  ret {<2 x float>, <2 x float>} %tmp35
}

; CHECK: @"\01-[Top0 _getX]"({}* %self, i8* nocapture %_cmd) [[NUW]] {
; CHECK-NOT: @llvm.objc.
; CHECK: }

define i32 @"\01-[Top0 _getX]"({}* %self, i8* nocapture %_cmd) nounwind {
invoke.cont:
  %0 = bitcast {}* %self to i8*
  %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind
  %puts = tail call i32 @puts(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @str, i64 0, i64 0))
  tail call void @llvm.objc.release(i8* %0) nounwind
  ret i32 0
}

@"\01L_OBJC_METH_VAR_NAME_" = internal global [5 x i8] c"frob\00", section "__TEXT,__cstring,cstring_literals", align 1@"\01L_OBJC_SELECTOR_REFERENCES_" = internal global i8* getelementptr inbounds ([5 x i8], [5 x i8]* @"\01L_OBJC_METH_VAR_NAME_", i64 0, i64 0), section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_IMAGE_INFO" = internal constant [2 x i32] [i32 0, i32 16], section "__DATA, __objc_imageinfo, regular, no_dead_strip"
@llvm.used = appending global [3 x i8*] [i8* getelementptr inbounds ([5 x i8], [5 x i8]* @"\01L_OBJC_METH_VAR_NAME_", i32 0, i32 0), i8* bitcast (i8** @"\01L_OBJC_SELECTOR_REFERENCES_" to i8*), i8* bitcast ([2 x i32]* @"\01L_OBJC_IMAGE_INFO" to i8*)], section "llvm.metadata"

; A simple loop. Eliminate the retain and release inside of it!

; CHECK: define void @loop(i8* %x, i64 %n) {
; CHECK: for.body:
; CHECK-NOT: @llvm.objc.
; CHECK: @objc_msgSend
; CHECK-NOT: @llvm.objc.
; CHECK: for.end:
; CHECK: }
define void @loop(i8* %x, i64 %n) {
entry:
  %0 = tail call i8* @llvm.objc.retain(i8* %x) nounwind
  %cmp9 = icmp sgt i64 %n, 0
  br i1 %cmp9, label %for.body, label %for.end

for.body:                                         ; preds = %entry, %for.body
  %i.010 = phi i64 [ %inc, %for.body ], [ 0, %entry ]
  %1 = tail call i8* @llvm.objc.retain(i8* %x) nounwind
  %tmp5 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_", align 8
  %call = tail call i8* (i8*, i8*, ...) @objc_msgSend(i8* %1, i8* %tmp5)
  tail call void @llvm.objc.release(i8* %1) nounwind, !clang.imprecise_release !0
  %inc = add nsw i64 %i.010, 1
  %exitcond = icmp eq i64 %inc, %n
  br i1 %exitcond, label %for.end, label %for.body

for.end:                                          ; preds = %for.body, %entry
  tail call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0
  ret void
}

; ObjCARCOpt can delete the retain,release on self.

; CHECK: define void @TextEditTest(%2* %self, %3* %pboard) {
; CHECK-NOT: call i8* @llvm.objc.retain(i8* %tmp7)
; CHECK: }

%0 = type { i8* (i8*, %struct._message_ref_t*, ...)*, i8* }
%1 = type opaque
%2 = type opaque
%3 = type opaque
%4 = type opaque
%5 = type opaque
%struct.NSConstantString = type { i32*, i32, i8*, i64 }
%struct._NSRange = type { i64, i64 }
%struct.__CFString = type opaque
%struct.__method_list_t = type { i32, i32, [0 x %struct._objc_method] }
%struct._class_ro_t = type { i32, i32, i32, i8*, i8*, %struct.__method_list_t*, %struct._objc_protocol_list*, %struct._ivar_list_t*, i8*, %struct._prop_list_t* }
%struct._class_t = type { %struct._class_t*, %struct._class_t*, %struct._objc_cache*, i8* (i8*, i8*)**, %struct._class_ro_t* }
%struct._ivar_list_t = type { i32, i32, [0 x %struct._ivar_t] }
%struct._ivar_t = type { i64*, i8*, i8*, i32, i32 }
%struct._message_ref_t = type { i8*, i8* }
%struct._objc_cache = type opaque
%struct._objc_method = type { i8*, i8*, i8* }
%struct._objc_protocol_list = type { i64, [0 x %struct._protocol_t*] }
%struct._prop_list_t = type { i32, i32, [0 x %struct._message_ref_t] }
%struct._protocol_t = type { i8*, i8*, %struct._objc_protocol_list*, %struct.__method_list_t*, %struct.__method_list_t*, %struct.__method_list_t*, %struct.__method_list_t*, %struct._prop_list_t*, i32, i32 }

@"\01L_OBJC_CLASSLIST_REFERENCES_$_17" = external hidden global %struct._class_t*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
@kUTTypePlainText = external constant %struct.__CFString*
@"\01L_OBJC_SELECTOR_REFERENCES_19" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_21" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_23" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_25" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_CLASSLIST_REFERENCES_$_26" = external hidden global %struct._class_t*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
@"\01L_OBJC_SELECTOR_REFERENCES_28" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_CLASSLIST_REFERENCES_$_29" = external hidden global %struct._class_t*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
@"\01L_OBJC_SELECTOR_REFERENCES_31" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_33" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_35" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_37" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_CLASSLIST_REFERENCES_$_38" = external hidden global %struct._class_t*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
@"\01L_OBJC_SELECTOR_REFERENCES_40" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_42" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@_unnamed_cfstring_44 = external hidden constant %struct.NSConstantString, section "__DATA,__cfstring"
@"\01L_OBJC_SELECTOR_REFERENCES_46" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_48" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01l_objc_msgSend_fixup_isEqual_" = external hidden global %0, section "__DATA, __objc_msgrefs, coalesced", align 16
@"\01L_OBJC_CLASSLIST_REFERENCES_$_50" = external hidden global %struct._class_t*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
@NSCocoaErrorDomain = external constant %1*
@"\01L_OBJC_CLASSLIST_REFERENCES_$_51" = external hidden global %struct._class_t*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
@NSFilePathErrorKey = external constant %1*
@"\01L_OBJC_SELECTOR_REFERENCES_53" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_55" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_CLASSLIST_REFERENCES_$_56" = external hidden global %struct._class_t*, section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
@"\01L_OBJC_SELECTOR_REFERENCES_58" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_SELECTOR_REFERENCES_60" = external hidden global i8*, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"

declare %1* @truncatedString(%1*, i64)
define void @TextEditTest(%2* %self, %3* %pboard) {
entry:
  %err = alloca %4*, align 8
  %tmp7 = bitcast %2* %self to i8*
  %tmp8 = call i8* @llvm.objc.retain(i8* %tmp7) nounwind
  store %4* null, %4** %err, align 8
  %tmp1 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_17", align 8
  %tmp2 = load %struct.__CFString*, %struct.__CFString** @kUTTypePlainText, align 8
  %tmp3 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_19", align 8
  %tmp4 = bitcast %struct._class_t* %tmp1 to i8*
  %call5 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp4, i8* %tmp3, %struct.__CFString* %tmp2)
  %tmp5 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_21", align 8
  %tmp6 = bitcast %3* %pboard to i8*
  %call76 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp6, i8* %tmp5, i8* %call5)
  %tmp9 = call i8* @llvm.objc.retain(i8* %call76) nounwind
  %tobool = icmp eq i8* %tmp9, null
  br i1 %tobool, label %end, label %land.lhs.true

land.lhs.true:                                    ; preds = %entry
  %tmp11 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_23", align 8
  %call137 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp6, i8* %tmp11, i8* %tmp9)
  %tmp = bitcast i8* %call137 to %1*
  %tmp10 = call i8* @llvm.objc.retain(i8* %call137) nounwind
  call void @llvm.objc.release(i8* null) nounwind
  %tmp12 = call i8* @llvm.objc.retain(i8* %call137) nounwind
  call void @llvm.objc.release(i8* null) nounwind
  %tobool16 = icmp eq i8* %call137, null
  br i1 %tobool16, label %end, label %if.then

if.then:                                          ; preds = %land.lhs.true
  %tmp19 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_25", align 8
  %call21 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*)*)(i8* %call137, i8* %tmp19)
  %tobool22 = icmp eq i8 %call21, 0
  br i1 %tobool22, label %if.then44, label %land.lhs.true23

land.lhs.true23:                                  ; preds = %if.then
  %tmp24 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_26", align 8
  %tmp26 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_28", align 8
  %tmp27 = bitcast %struct._class_t* %tmp24 to i8*
  %call2822 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp27, i8* %tmp26, i8* %call137)
  %tmp13 = bitcast i8* %call2822 to %5*
  %tmp14 = call i8* @llvm.objc.retain(i8* %call2822) nounwind
  call void @llvm.objc.release(i8* null) nounwind
  %tobool30 = icmp eq i8* %call2822, null
  br i1 %tobool30, label %if.then44, label %if.end

if.end:                                           ; preds = %land.lhs.true23
  %tmp32 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_29", align 8
  %tmp33 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_31", align 8
  %tmp34 = bitcast %struct._class_t* %tmp32 to i8*
  %call35 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp34, i8* %tmp33)
  %tmp37 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_33", align 8
  %call3923 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call35, i8* %tmp37, i8* %call2822, i32 signext 1, %4** %err)
  %cmp = icmp eq i8* %call3923, null
  br i1 %cmp, label %if.then44, label %end

if.then44:                                        ; preds = %if.end, %land.lhs.true23, %if.then
  %url.025 = phi %5* [ %tmp13, %if.end ], [ %tmp13, %land.lhs.true23 ], [ null, %if.then ]
  %tmp49 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_35", align 8
  %call51 = call %struct._NSRange bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to %struct._NSRange (i8*, i8*, i64, i64)*)(i8* %call137, i8* %tmp49, i64 0, i64 0)
  %call513 = extractvalue %struct._NSRange %call51, 0
  %call514 = extractvalue %struct._NSRange %call51, 1
  %tmp52 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_37", align 8
  %call548 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call137, i8* %tmp52, i64 %call513, i64 %call514)
  %tmp55 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_38", align 8
  %tmp56 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_40", align 8
  %tmp57 = bitcast %struct._class_t* %tmp55 to i8*
  %call58 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp57, i8* %tmp56)
  %tmp59 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_42", align 8
  %call6110 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call548, i8* %tmp59, i8* %call58)
  %tmp15 = call i8* @llvm.objc.retain(i8* %call6110) nounwind
  call void @llvm.objc.release(i8* %call137) nounwind
  %tmp64 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_46", align 8
  %call66 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, %1*)*)(i8* %call6110, i8* %tmp64, %1* bitcast (%struct.NSConstantString* @_unnamed_cfstring_44 to %1*))
  %tobool67 = icmp eq i8 %call66, 0
  br i1 %tobool67, label %if.end74, label %if.then68

if.then68:                                        ; preds = %if.then44
  %tmp70 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_48", align 8
  %call7220 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call6110, i8* %tmp70)
  %tmp16 = call i8* @llvm.objc.retain(i8* %call7220) nounwind
  call void @llvm.objc.release(i8* %call6110) nounwind
  br label %if.end74

if.end74:                                         ; preds = %if.then68, %if.then44
  %filename.0.in = phi i8* [ %call7220, %if.then68 ], [ %call6110, %if.then44 ]
  %filename.0 = bitcast i8* %filename.0.in to %1*
  %tmp17 = load i8*, i8** bitcast (%0* @"\01l_objc_msgSend_fixup_isEqual_" to i8**), align 16
  %tmp18 = bitcast i8* %tmp17 to i8 (i8*, %struct._message_ref_t*, i8*, ...)*
  %call78 = call signext i8 (i8*, %struct._message_ref_t*, i8*, ...) %tmp18(i8* %call137, %struct._message_ref_t* bitcast (%0* @"\01l_objc_msgSend_fixup_isEqual_" to %struct._message_ref_t*), i8* %filename.0.in)
  %tobool79 = icmp eq i8 %call78, 0
  br i1 %tobool79, label %land.lhs.true80, label %if.then109

land.lhs.true80:                                  ; preds = %if.end74
  %tmp82 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_25", align 8
  %call84 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*)*)(i8* %filename.0.in, i8* %tmp82)
  %tobool86 = icmp eq i8 %call84, 0
  br i1 %tobool86, label %if.then109, label %if.end106

if.end106:                                        ; preds = %land.lhs.true80
  %tmp88 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_26", align 8
  %tmp90 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_28", align 8
  %tmp91 = bitcast %struct._class_t* %tmp88 to i8*
  %call9218 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp91, i8* %tmp90, i8* %filename.0.in)
  %tmp20 = bitcast i8* %call9218 to %5*
  %tmp21 = call i8* @llvm.objc.retain(i8* %call9218) nounwind
  %tmp22 = bitcast %5* %url.025 to i8*
  call void @llvm.objc.release(i8* %tmp22) nounwind
  %tmp94 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_29", align 8
  %tmp95 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_31", align 8
  %tmp96 = bitcast %struct._class_t* %tmp94 to i8*
  %call97 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp96, i8* %tmp95)
  %tmp99 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_33", align 8
  %call10119 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call97, i8* %tmp99, i8* %call9218, i32 signext 1, %4** %err)
  %phitmp = icmp eq i8* %call10119, null
  br i1 %phitmp, label %if.then109, label %end

if.then109:                                       ; preds = %if.end106, %land.lhs.true80, %if.end74
  %url.129 = phi %5* [ %tmp20, %if.end106 ], [ %url.025, %if.end74 ], [ %url.025, %land.lhs.true80 ]
  %tmp110 = load %4*, %4** %err, align 8
  %tobool111 = icmp eq %4* %tmp110, null
  br i1 %tobool111, label %if.then112, label %if.end125

if.then112:                                       ; preds = %if.then109
  %tmp113 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_50", align 8
  %tmp114 = load %1*, %1** @NSCocoaErrorDomain, align 8
  %tmp115 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_51", align 8
  %call117 = call %1* @truncatedString(%1* %filename.0, i64 1034)
  %tmp118 = load %1*, %1** @NSFilePathErrorKey, align 8
  %tmp119 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_53", align 8
  %tmp120 = bitcast %struct._class_t* %tmp115 to i8*
  %call12113 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp120, i8* %tmp119, %1* %call117, %1* %tmp118, i8* null)
  %tmp122 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_55", align 8
  %tmp123 = bitcast %struct._class_t* %tmp113 to i8*
  %call12414 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp123, i8* %tmp122, %1* %tmp114, i64 258, i8* %call12113)
  %tmp23 = call i8* @llvm.objc.retain(i8* %call12414) nounwind
  %tmp25 = call i8* @llvm.objc.autorelease(i8* %tmp23) nounwind
  %tmp28 = bitcast i8* %tmp25 to %4*
  store %4* %tmp28, %4** %err, align 8
  br label %if.end125

if.end125:                                        ; preds = %if.then112, %if.then109
  %tmp127 = phi %4* [ %tmp110, %if.then109 ], [ %tmp28, %if.then112 ]
  %tmp126 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_56", align 8
  %tmp128 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_58", align 8
  %tmp129 = bitcast %struct._class_t* %tmp126 to i8*
  %call13015 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp129, i8* %tmp128, %4* %tmp127)
  %tmp131 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_60", align 8
  %call13317 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call13015, i8* %tmp131)
  br label %end

end:                                              ; preds = %if.end125, %if.end106, %if.end, %land.lhs.true, %entry
  %filename.2 = phi %1* [ %filename.0, %if.end106 ], [ %filename.0, %if.end125 ], [ %tmp, %land.lhs.true ], [ null, %entry ], [ %tmp, %if.end ]
  %origFilename.0 = phi %1* [ %tmp, %if.end106 ], [ %tmp, %if.end125 ], [ %tmp, %land.lhs.true ], [ null, %entry ], [ %tmp, %if.end ]
  %url.2 = phi %5* [ %tmp20, %if.end106 ], [ %url.129, %if.end125 ], [ null, %land.lhs.true ], [ null, %entry ], [ %tmp13, %if.end ]
  call void @llvm.objc.release(i8* %tmp9) nounwind, !clang.imprecise_release !0
  %tmp29 = bitcast %5* %url.2 to i8*
  call void @llvm.objc.release(i8* %tmp29) nounwind, !clang.imprecise_release !0
  %tmp30 = bitcast %1* %origFilename.0 to i8*
  call void @llvm.objc.release(i8* %tmp30) nounwind, !clang.imprecise_release !0
  %tmp31 = bitcast %1* %filename.2 to i8*
  call void @llvm.objc.release(i8* %tmp31) nounwind, !clang.imprecise_release !0
  call void @llvm.objc.release(i8* %tmp7) nounwind, !clang.imprecise_release !0
  ret void
}

declare i32 @__gxx_personality_v0(...)

declare i32 @llvm.objc.sync.enter(i8*)
declare i32 @llvm.objc.sync.exit(i8*)

; Make sure that we understand that objc_sync_{enter,exit} are IC_User not
; IC_Call/IC_CallOrUser.

; CHECK-LABEL:      define void @test67(
; CHECK-NEXT:   call i32 @llvm.objc.sync.enter(i8* %x)
; CHECK-NEXT:   call i32 @llvm.objc.sync.exit(i8* %x)
; CHECK-NEXT:   ret void
; CHECK-NEXT: }
define void @test67(i8* %x) {
  call i8* @llvm.objc.retain(i8* %x)
  call i32 @llvm.objc.sync.enter(i8* %x)
  call i32 @llvm.objc.sync.exit(i8* %x)
  call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0
  ret void
}

; CHECK-LABEL: define void @test68(
; CHECK-NOT:     call
; CHECK:         call void @callee2(
; CHECK-NOT:     call
; CHECK:         ret void

define void @test68(i8* %a, i8* %b) {
  call i8* @llvm.objc.retain(i8* %a)
  call i8* @llvm.objc.retain(i8* %b)
  call void @callee2(i8* %a, i8* %b)
  call void @llvm.objc.release(i8* %b), !clang.imprecise_release !0
  call void @llvm.objc.release(i8* %a), !clang.imprecise_release !0
  ret void
}

!llvm.module.flags = !{!1}
!llvm.dbg.cu = !{!3}

!0 = !{}
!1 = !{i32 1, !"Debug Info Version", i32 3}
!2 = distinct !DISubprogram(unit: !3)
!3 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
                             file: !4,
                             isOptimized: true, flags: "-O2",
                             splitDebugFilename: "abc.debug", emissionKind: 2)
!4 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
!5 = !{i32 2, !"Debug Info Version", i32 3}

; CHECK: attributes [[NUW]] = { nounwind }
; CHECK: attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
; CHECK: ![[RELEASE]] = !{}
