; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes="ipsccp<func-spec>" -S < %s | FileCheck %s

%mystruct = type { i32, [2 x i64] }

define internal ptr @myfunc(ptr %arg) {
; CHECK-LABEL: @myfunc(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_COND:%.*]]
; CHECK:       for.cond:
; CHECK-NEXT:    br label [[FOR_COND2:%.*]]
; CHECK:       for.cond2:
; CHECK-NEXT:    br label [[FOR_BODY2:%.*]]
; CHECK:       for.body2:
; CHECK-NEXT:    br label [[FOR_COND2]]
;
entry:
  br label %for.cond

for.cond:                                     ; preds = %for.body, %entry
  %phi = phi ptr [ undef, %for.body ], [ null, %entry ]
  %cond = icmp eq ptr %phi, null
  br i1 %cond, label %for.cond2, label %for.body

for.body:                                     ; preds = %for.cond
  call void @callee(ptr nonnull %phi)
  br label %for.cond

for.cond2:                                     ; preds = %for.body2, %for.cond
  %phi2 = phi ptr [ undef, %for.body2 ], [ null, %for.cond ]
  br i1 false, label %for.end, label %for.body2

for.body2:                                     ; preds = %for.cond2
  %arrayidx = getelementptr inbounds %mystruct, ptr %phi2, i64 0, i32 1, i64 3
  br label %for.cond2

for.end:                                      ; preds = %for.cond2
  ret ptr %arg
}

define ptr @caller() {
; CHECK-LABEL: @caller(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[CALL:%.*]] = call ptr @myfunc(ptr undef)
; CHECK-NEXT:    ret ptr undef
;
entry:
  %call = call ptr @myfunc(ptr undef)
  ret ptr %call
}

declare void @callee(ptr)

