[AMDGPU] Add True16 register classes.
[llvm-project.git] / llvm / test / Transforms / SimplifyCFG / hoist-common-code-with-unreachable.ll
blob8cb6339713d6f6a88e66665bb6b5596ebacb397e
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(
6 ; CHECK-NEXT:  start:
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:%.*]]
11 ; CHECK-NEXT:    ]
12 ; CHECK:       unreachable:
13 ; CHECK-NEXT:    unreachable
14 ; CHECK:       bb0:
15 ; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i64 [[B:%.*]], [[C:%.*]]
16 ; CHECK-NEXT:    br label [[EXIT:%.*]]
17 ; CHECK:       bb1:
18 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i64 [[B]], [[C]]
19 ; CHECK-NEXT:    br label [[EXIT]]
20 ; CHECK:       bb2:
21 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[B]], [[C]]
22 ; CHECK-NEXT:    br label [[EXIT]]
23 ; CHECK:       exit:
24 ; CHECK-NEXT:    [[RESULT:%.*]] = phi i1 [ [[TMP0]], [[BB0]] ], [ [[TMP1]], [[BB1]] ], [ [[TMP2]], [[BB2]] ]
25 ; CHECK-NEXT:    ret i1 [[RESULT]]
27 start:
28   switch i64 %a, label %unreachable [
29   i64 0, label %bb0
30   i64 1, label %bb1
31   i64 2, label %bb2
32   ]
34 unreachable:
35   unreachable
37 bb0:                                              ; preds = %start
38   %0 = icmp eq i64 %b, %c
39   br label %exit
41 bb1:                                              ; preds = %start
42   %1 = icmp eq i64 %b, %c
43   br label %exit
45 bb2:                                              ; preds = %start
46   %2 = icmp eq i64 %b, %c
47   br label %exit
49 exit:                                             ; preds = %bb2, %bb1, %bb0
50   %result = phi i1 [ %0, %bb0 ], [ %1, %bb1 ], [ %2, %bb2 ]
51   ret i1 %result
54 define i1 @common_instr_with_unreachable_2(i64 %a, i64 %b, i64 %c) {
55 ; CHECK-LABEL: @common_instr_with_unreachable_2(
56 ; CHECK-NEXT:  start:
57 ; CHECK-NEXT:    switch i64 [[A:%.*]], label [[BB1:%.*]] [
58 ; CHECK-NEXT:    i64 0, label [[BB0:%.*]]
59 ; CHECK-NEXT:    i64 2, label [[BB2:%.*]]
60 ; CHECK-NEXT:    ]
61 ; CHECK:       bb0:
62 ; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i64 [[B:%.*]], [[C:%.*]]
63 ; CHECK-NEXT:    br label [[EXIT:%.*]]
64 ; CHECK:       bb1:
65 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i64 [[B]], [[C]]
66 ; CHECK-NEXT:    br label [[EXIT]]
67 ; CHECK:       bb2:
68 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[B]], [[C]]
69 ; CHECK-NEXT:    br label [[EXIT]]
70 ; CHECK:       exit:
71 ; CHECK-NEXT:    [[RESULT:%.*]] = phi i1 [ [[TMP0]], [[BB0]] ], [ [[TMP1]], [[BB1]] ], [ [[TMP2]], [[BB2]] ]
72 ; CHECK-NEXT:    ret i1 [[RESULT]]
74 start:
75   switch i64 %a, label %bb1 [
76   i64 0, label %bb0
77   i64 1, label %unreachable
78   i64 2, label %bb2
79   ]
81 unreachable:
82   unreachable
84 bb0:                                              ; preds = %start
85   %0 = icmp eq i64 %b, %c
86   br label %exit
88 bb1:                                              ; preds = %start
89   %1 = icmp eq i64 %b, %c
90   br label %exit
92 bb2:                                              ; preds = %start
93   %2 = icmp eq i64 %b, %c
94   br label %exit
96 exit:                                             ; preds = %bb2, %bb1, %bb0
97   %result = phi i1 [ %0, %bb0 ], [ %1, %bb1 ], [ %2, %bb2 ]
98   ret i1 %result