; Test that functions with dynamic allocas get inlined in a case where
; naively inlining it would result in a miscompilation.
; Functions with dynamic allocas can only be inlined into functions that
; already have dynamic allocas.

; RUN: opt < %s -inline -S | \
; RUN:   grep llvm.stacksave
; RUN: opt < %s -inline -S | not grep callee


declare void @ext(i32*)

define internal void @callee(i32 %N) {
        %P = alloca i32, i32 %N         ; <i32*> [#uses=1]
        call void @ext( i32* %P )
        ret void
}

define void @foo(i32 %N) {
; <label>:0
        %P = alloca i32, i32 %N         ; <i32*> [#uses=1]
        call void @ext( i32* %P )
        br label %Loop

Loop:           ; preds = %Loop, %0
        %count = phi i32 [ 0, %0 ], [ %next, %Loop ]            ; <i32> [#uses=2]
        %next = add i32 %count, 1               ; <i32> [#uses=1]
        call void @callee( i32 %N )
        %cond = icmp eq i32 %count, 100000              ; <i1> [#uses=1]
        br i1 %cond, label %out, label %Loop

out:            ; preds = %Loop
        ret void
}

