; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -S -passes=instcombine < %s | FileCheck %s

; Make sure this does not crash.

define void @pr150338(ptr %arg) {
; CHECK-LABEL: define void @pr150338(
; CHECK-SAME: ptr [[ARG:%.*]]) {
; CHECK-NEXT:    store i1 true, ptr poison, align 1
; CHECK-NEXT:    ret void
;
  %a = alloca i32
  store ptr %a, ptr %arg
  store i1 true, ptr poison
  call void @llvm.lifetime.end.p0(ptr %a)
  ret void
}

define ptr @pr151119() {
; CHECK-LABEL: define ptr @pr151119() {
; CHECK-NEXT:  [[ENTRY:.*:]]
; CHECK-NEXT:    store i1 false, ptr poison, align 1
; CHECK-NEXT:    br i1 false, label %[[BB1:.*]], label %[[BB2:.*]]
; CHECK:       [[BB1]]:
; CHECK-NEXT:    br label %[[BB2]]
; CHECK:       [[BB2]]:
; CHECK-NEXT:    br label %[[BB1]]
;
entry:
  %a = alloca i32, align 4
  store i1 false, ptr poison
  br i1 false, label %bb1, label %bb2

bb1:
  %phi1 = phi ptr [ null, %entry ], [ %phi2, %bb2 ]
  call void @llvm.lifetime.start.p0(ptr %a)
  br label %bb2

bb2:
  %phi2 = phi ptr [ null, %entry ], [ %a, %bb1 ]
  br label %bb1
}

define void @lifetime_poison() {
; CHECK-LABEL: define void @lifetime_poison() {
; CHECK-NEXT:    ret void
;
  call void @llvm.lifetime.start.p0(ptr poison)
  call void @llvm.lifetime.end.p0(ptr poison)
  ret void
}
