; Test a bunch of cases where the cfg simplification code should
; be able to fold PHI nodes into computation in common cases.  Folding the PHI
; nodes away allows the branches to be eliminated, performing a simple form of
; 'if conversion'.

; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S > %t.xform
; RUN:   not grep phi %t.xform
; RUN:   grep ret %t.xform

declare void @use(i1)

declare void @use.upgrd.1(i32)


define void @test(i1 %c, i32 %V, i32 %V2) {
; <label>:0
        br i1 %c, label %T, label %F
T:              ; preds = %0
        br label %F
F:              ; preds = %T, %0
        %B1 = phi i1 [ true, %0 ], [ false, %T ]                ; <i1> [#uses=1]
        %I6 = phi i32 [ %V, %0 ], [ 0, %T ]             ; <i32> [#uses=1]
        call void @use( i1 %B1 )
        call void @use.upgrd.1( i32 %I6 )
        ret void
}

