1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
2 ; RUN: opt -passes=ipsccp < %s -S | FileCheck %s
3 ; RUN: opt -passes='ipsccp,ipsccp' < %s -S | FileCheck %s
5 define void @barney() {
6 ; CHECK-LABEL: define {{[^@]+}}@barney() {
8 ; CHECK-NEXT: br label [[BB9:%.*]]
10 ; CHECK-NEXT: unreachable
12 ; CHECK-NEXT: br label [[BB6:%.*]]
24 switch i16 0, label %bb6 [
30 ; CHECK-LABEL: define {{[^@]+}}@blam() {
32 ; CHECK-NEXT: br label [[BB16:%.*]]
34 ; CHECK-NEXT: br label [[BB38:%.*]]
36 ; CHECK-NEXT: unreachable
42 switch i32 0, label %bb38 [
62 define void @hoge(i1 %arg, i16 %arg2) {
63 ; CHECK-LABEL: define {{[^@]+}}@hoge
64 ; CHECK-SAME: (i1 [[ARG:%.*]], i16 [[ARG2:%.*]]) {
66 ; CHECK-NEXT: switch i16 [[ARG2]], label [[BB1:%.*]] [
67 ; CHECK-NEXT: i16 135, label [[BB2:%.*]]
68 ; CHECK-NEXT: i16 66, label [[BB2]]
71 ; CHECK-NEXT: ret void
73 ; CHECK-NEXT: br label [[BB3:%.*]]
75 ; CHECK-NEXT: unreachable
78 switch i16 %arg2, label %bb1 [
86 bb2: ; preds = %bb, %bb
87 switch i16 0, label %bb3 [
96 bb4: ; preds = %bb2, %bb2, %bb2
100 ; Test case from PR49573. %default.bb is unfeasible. Make sure it gets replaced
101 ; by an unreachable block.
102 define void @pr49573_main(i1 %arg) {
104 %tgt = call i16 @pr49573_fn(i1 %arg)
105 switch i16 %tgt, label %default.bb [
124 %tgt.2 = call i16 @pr49573_fn_2(i1 %arg)
125 switch i16 %tgt.2, label %default.bb [
131 ; Make sure a new unreachable BB is created.
132 define void @pr49573_main_2(i1 %arg) {
134 %tgt = call i16 @pr49573_fn(i1 %arg)
135 switch i16 %tgt, label %default.bb [
154 define internal i16 @pr49573_fn(i1 %arg) {
155 ; CHECK-LABEL: define {{[^@]+}}@pr49573_fn
156 ; CHECK-SAME: (i1 [[ARG:%.*]]) {
158 ; CHECK-NEXT: br i1 [[ARG]], label [[THEN:%.*]], label [[ELSE:%.*]]
160 ; CHECK-NEXT: ret i16 0
162 ; CHECK-NEXT: ret i16 2
165 br i1 %arg, label %then, label %else
174 define internal i16 @pr49573_fn_2(i1 %arg) {
175 ; CHECK-LABEL: define {{[^@]+}}@pr49573_fn_2
176 ; CHECK-SAME: (i1 [[ARG:%.*]]) {
178 ; CHECK-NEXT: br i1 [[ARG]], label [[THEN:%.*]], label [[ELSE:%.*]]
180 ; CHECK-NEXT: ret i16 0
182 ; CHECK-NEXT: ret i16 2
185 br i1 %arg, label %then, label %else