blob: 5b61bd30051282ada089f9772d4581e82042d697 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -S -passes=dfa-jump-threading %s | FileCheck %s
define i64 @multiple-phi-def() {
; CHECK-LABEL: define i64 @multiple-phi-def() {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: br label %[[LBL_ENTRY:.*]]
; CHECK: [[LBL_ENTRY]]:
; CHECK-NEXT: [[PHI3:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[PHI1:%.*]], %[[CASE2:.*]] ]
; CHECK-NEXT: br i1 true, label %[[THEN:.*]], label %[[SWITCH_BB:.*]]
; CHECK: [[THEN]]:
; CHECK-NEXT: br label %[[CASE2]]
; CHECK: [[CASE2]]:
; CHECK-NEXT: [[PHI1]] = phi i16 [ 0, %[[THEN]] ], [ 0, %[[SWITCH_BB]] ]
; CHECK-NEXT: [[PHI2:%.*]] = phi i16 [ 1, %[[THEN]] ], [ 0, %[[SWITCH_BB]] ]
; CHECK-NEXT: br i1 true, label %[[SWITCH_BB]], label %[[LBL_ENTRY]]
; CHECK: [[SWITCH_BB]]:
; CHECK-NEXT: [[PHI_OF_SWITCH:%.*]] = phi i16 [ [[PHI3]], %[[LBL_ENTRY]] ], [ [[PHI2]], %[[CASE2]] ]
; CHECK-NEXT: switch i16 [[PHI_OF_SWITCH]], label %[[DEFAULT_BB:.*]] [
; CHECK-NEXT: i16 1, label %[[CASE1:.*]]
; CHECK-NEXT: i16 2, label %[[CASE2]]
; CHECK-NEXT: ]
; CHECK: [[CASE1]]:
; CHECK-NEXT: ret i64 1
; CHECK: [[DEFAULT_BB]]:
; CHECK-NEXT: ret i64 0
;
entry:
br label %lbl_entry
lbl_entry: ; preds = %case2, %entry
%phi3 = phi i16 [ 0, %entry ], [ %phi1, %case2 ]
br i1 true, label %then, label %switch_bb
then: ; preds = %lbl_entry
br label %case2
case2: ; preds = %switch_bb, %then
%phi1 = phi i16 [ 0, %then ], [ 0, %switch_bb ]
%phi2 = phi i16 [ 1, %then ], [ 0, %switch_bb ]
br i1 true, label %switch_bb, label %lbl_entry
switch_bb: ; preds = %case2, %lbl_entry
%phi_of_switch = phi i16 [ %phi3, %lbl_entry ], [ %phi2, %case2 ]
switch i16 %phi_of_switch, label %default_bb [
i16 1, label %case1
i16 2, label %case2
]
case1: ; preds = %switch_bb
ret i64 1
default_bb: ; preds = %switch_bb
ret i64 0
}