; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; The unify-function-exit-nodes pass often makes basic blocks that just contain
; a PHI node and a return.  Make sure the simplify cfg can straighten out this
; important case.  This is basically the most trivial form of tail-duplication.

; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -hoist-common-insts=true -S | FileCheck %s

define i32 @test(i1 %B, i32 %A, i32 %B.upgrd.1) {
; CHECK-LABEL: @test(
; CHECK-NEXT:  ret:
; CHECK-NEXT:    [[B_UPGRD_1_A:%.*]] = select i1 [[B:%.*]], i32 [[B_UPGRD_1:%.*]], i32 [[A:%.*]]
; CHECK-NEXT:    ret i32 [[B_UPGRD_1_A]]
;
  br i1 %B, label %T, label %F
T:              ; preds = %0
  br label %ret
F:              ; preds = %0
  br label %ret
ret:            ; preds = %F, %T
  %X = phi i32 [ %A, %F ], [ %B.upgrd.1, %T ]             ; <i32> [#uses=1]
  ret i32 %X
}


; Make sure it's willing to move unconditional branches to return instructions
; as well, even if the return block is shared and the source blocks are
; non-empty.
define i32 @test2(i1 %B, i32 %A, i32 %B.upgrd.2) {
; CHECK-LABEL: @test2(
; CHECK-NEXT:  ret:
; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @test(i1 true, i32 5, i32 8)
; CHECK-NEXT:    ret i32 [[A:%.*]]
;
  br i1 %B, label %T, label %F
T:              ; preds = %0
  call i32 @test( i1 true, i32 5, i32 8 )         ; <i32>:1 [#uses=0]
  br label %ret
F:              ; preds = %0
  call i32 @test( i1 true, i32 5, i32 8 )         ; <i32>:2 [#uses=0]
  br label %ret
ret:            ; preds = %F, %T
  ret i32 %A
}
