1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes='simplifycfg<hoist-common-insts;no-sink-common-insts>' -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
4 define i1 @common_instr_with_unreachable(i64 %a, i64 %b, i64 %c) {
5 ; CHECK-LABEL: @common_instr_with_unreachable(
7 ; CHECK-NEXT: switch i64 [[A:%.*]], label [[UNREACHABLE:%.*]] [
8 ; CHECK-NEXT: i64 0, label [[BB0:%.*]]
9 ; CHECK-NEXT: i64 1, label [[BB1:%.*]]
10 ; CHECK-NEXT: i64 2, label [[BB2:%.*]]
13 ; CHECK-NEXT: unreachable
15 ; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i64 [[B:%.*]], [[C:%.*]]
16 ; CHECK-NEXT: br label [[EXIT:%.*]]
18 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[B]], [[C]]
19 ; CHECK-NEXT: br label [[EXIT]]
21 ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[B]], [[C]]
22 ; CHECK-NEXT: br label [[EXIT]]
24 ; CHECK-NEXT: [[RESULT:%.*]] = phi i1 [ [[TMP0]], [[BB0]] ], [ [[TMP1]], [[BB1]] ], [ [[TMP2]], [[BB2]] ]
25 ; CHECK-NEXT: ret i1 [[RESULT]]
28 switch i64 %a, label %unreachable [
38 %0 = icmp eq i64 %b, %c
42 %1 = icmp eq i64 %b, %c
46 %2 = icmp eq i64 %b, %c
49 exit: ; preds = %bb2, %bb1, %bb0
50 %result = phi i1 [ %0, %bb0 ], [ %1, %bb1 ], [ %2, %bb2 ]
54 define i1 @common_instr_with_unreachable_2(i64 %a, i64 %b, i64 %c) {
55 ; CHECK-LABEL: @common_instr_with_unreachable_2(
57 ; CHECK-NEXT: switch i64 [[A:%.*]], label [[BB1:%.*]] [
58 ; CHECK-NEXT: i64 0, label [[BB0:%.*]]
59 ; CHECK-NEXT: i64 2, label [[BB2:%.*]]
62 ; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i64 [[B:%.*]], [[C:%.*]]
63 ; CHECK-NEXT: br label [[EXIT:%.*]]
65 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[B]], [[C]]
66 ; CHECK-NEXT: br label [[EXIT]]
68 ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[B]], [[C]]
69 ; CHECK-NEXT: br label [[EXIT]]
71 ; CHECK-NEXT: [[RESULT:%.*]] = phi i1 [ [[TMP0]], [[BB0]] ], [ [[TMP1]], [[BB1]] ], [ [[TMP2]], [[BB2]] ]
72 ; CHECK-NEXT: ret i1 [[RESULT]]
75 switch i64 %a, label %bb1 [
77 i64 1, label %unreachable
85 %0 = icmp eq i64 %b, %c
89 %1 = icmp eq i64 %b, %c
93 %2 = icmp eq i64 %b, %c
96 exit: ; preds = %bb2, %bb1, %bb0
97 %result = phi i1 [ %0, %bb0 ], [ %1, %bb1 ], [ %2, %bb2 ]