; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -instsimplify < %s | FileCheck %s

declare void @bar(i8* %a, i8* nonnull %b)

; 'y' must be nonnull.

define i1 @caller1(i8* %x, i8* %y) {
; CHECK-LABEL: @caller1(
; CHECK-NEXT:    call void @bar(i8* %x, i8* %y)
; CHECK-NEXT:    ret i1 false
;
  call void @bar(i8* %x, i8* %y)
  %null_check = icmp eq i8* %y, null
  ret i1 %null_check
}

; Don't know anything about 'y'.

define i1 @caller2(i8* %x, i8* %y) {
; CHECK-LABEL: @caller2(
; CHECK-NEXT:    call void @bar(i8* %y, i8* %x)
; CHECK-NEXT:    [[NULL_CHECK:%.*]] = icmp eq i8* %y, null
; CHECK-NEXT:    ret i1 [[NULL_CHECK]]
;
  call void @bar(i8* %y, i8* %x)
  %null_check = icmp eq i8* %y, null
  ret i1 %null_check
}

; 'y' must be nonnull.

define i1 @caller3(i8* %x, i8* %y) {
; CHECK-LABEL: @caller3(
; CHECK-NEXT:    call void @bar(i8* %x, i8* %y)
; CHECK-NEXT:    ret i1 true
;
  call void @bar(i8* %x, i8* %y)
  %null_check = icmp ne i8* %y, null
  ret i1 %null_check
}

; FIXME: The call is guaranteed to execute, so 'y' must be nonnull throughout.

define i1 @caller4(i8* %x, i8* %y) {
; CHECK-LABEL: @caller4(
; CHECK-NEXT:    [[NULL_CHECK:%.*]] = icmp ne i8* %y, null
; CHECK-NEXT:    call void @bar(i8* %x, i8* %y)
; CHECK-NEXT:    ret i1 [[NULL_CHECK]]
;
  %null_check = icmp ne i8* %y, null
  call void @bar(i8* %x, i8* %y)
  ret i1 %null_check
}

; The call to bar() does not dominate the null check, so no change.

define i1 @caller5(i8* %x, i8* %y) {
; CHECK-LABEL: @caller5(
; CHECK-NEXT:    [[NULL_CHECK:%.*]] = icmp eq i8* %y, null
; CHECK-NEXT:    br i1 [[NULL_CHECK]], label %t, label %f
; CHECK:       t:
; CHECK-NEXT:    ret i1 [[NULL_CHECK]]
; CHECK:       f:
; CHECK-NEXT:    call void @bar(i8* %x, i8* %y)
; CHECK-NEXT:    ret i1 [[NULL_CHECK]]
;
  %null_check = icmp eq i8* %y, null
  br i1 %null_check, label %t, label %f
t:
  ret i1 %null_check
f:
  call void @bar(i8* %x, i8* %y)
  ret i1 %null_check
}

; Make sure that an invoke works similarly to a call.

declare i32 @esfp(...)

define i1 @caller6(i8* %x, i8* %y) personality i8* bitcast (i32 (...)* @esfp to i8*){
; CHECK-LABEL: @caller6(
; CHECK-NEXT:    invoke void @bar(i8* %x, i8* nonnull %y)
; CHECK-NEXT:    to label %cont unwind label %exc
; CHECK:       cont:
; CHECK-NEXT:    ret i1 false
;
  invoke void @bar(i8* %x, i8* nonnull %y)
    to label %cont unwind label %exc

cont:
  %null_check = icmp eq i8* %y, null
  ret i1 %null_check

exc:
  %lp = landingpad { i8*, i32 }
    filter [0 x i8*] zeroinitializer
  unreachable
}

declare i8* @returningPtr(i8* returned %p)

define i1 @nonnullReturnTest(i8* nonnull %x) {
; CHECK-LABEL: @nonnullReturnTest(
; CHECK-NEXT:    %x2 = call i8* @returningPtr(i8* %x)
; CHECK-NEXT:    ret i1 false
  %x2 = call i8* @returningPtr(i8* %x)
  %null_check = icmp eq i8* %x2, null
  ret i1 %null_check
}

define i1 @unknownReturnTest(i8* %x) {
; CHECK-LABEL: @unknownReturnTest(
; CHECK-NEXT:    %x2 = call i8* @returningPtr(i8* %x)
; CHECK-NEXT:    %null_check = icmp eq i8* %x2, null
; CHECK-NEXT:    ret i1 %null_check
  %x2 = call i8* @returningPtr(i8* %x)
  %null_check = icmp eq i8* %x2, null
  ret i1 %null_check
}

