183 lines
3.6 KiB
LLVM
183 lines
3.6 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
|
|
; RUN: opt -passes=ipsccp < %s -S | FileCheck %s
|
|
; RUN: opt -passes='ipsccp,ipsccp' < %s -S | FileCheck %s
|
|
|
|
define void @barney() {
|
|
; CHECK-LABEL: define {{[^@]+}}@barney() {
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: br label [[BB9:%.*]]
|
|
; CHECK: bb6:
|
|
; CHECK-NEXT: unreachable
|
|
; CHECK: bb9:
|
|
; CHECK-NEXT: br label [[BB6:%.*]]
|
|
;
|
|
bb:
|
|
br label %bb9
|
|
|
|
bb6: ; preds = %bb9
|
|
unreachable
|
|
|
|
bb7: ; preds = %bb9
|
|
unreachable
|
|
|
|
bb9: ; preds = %bb
|
|
switch i16 0, label %bb6 [
|
|
i16 61, label %bb7
|
|
]
|
|
}
|
|
|
|
define void @blam() {
|
|
; CHECK-LABEL: define {{[^@]+}}@blam() {
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: br label [[BB16:%.*]]
|
|
; CHECK: bb16:
|
|
; CHECK-NEXT: br label [[BB38:%.*]]
|
|
; CHECK: bb38:
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
bb:
|
|
br label %bb16
|
|
|
|
bb16: ; preds = %bb
|
|
switch i32 0, label %bb38 [
|
|
i32 66, label %bb17
|
|
i32 63, label %bb18
|
|
i32 86, label %bb19
|
|
]
|
|
|
|
bb17: ; preds = %bb16
|
|
unreachable
|
|
|
|
bb18: ; preds = %bb16
|
|
unreachable
|
|
|
|
bb19: ; preds = %bb16
|
|
unreachable
|
|
|
|
bb38: ; preds = %bb16
|
|
unreachable
|
|
}
|
|
|
|
|
|
define void @hoge() {
|
|
; CHECK-LABEL: define {{[^@]+}}@hoge() {
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
bb:
|
|
switch i16 undef, label %bb1 [
|
|
i16 135, label %bb2
|
|
i16 66, label %bb2
|
|
]
|
|
|
|
bb1: ; preds = %bb
|
|
ret void
|
|
|
|
bb2: ; preds = %bb, %bb
|
|
switch i16 0, label %bb3 [
|
|
i16 61, label %bb4
|
|
i16 54, label %bb4
|
|
i16 49, label %bb4
|
|
]
|
|
|
|
bb3: ; preds = %bb2
|
|
unreachable
|
|
|
|
bb4: ; preds = %bb2, %bb2, %bb2
|
|
unreachable
|
|
}
|
|
|
|
; Test case from PR49573. %default.bb is unfeasible. Make sure it gets replaced
|
|
; by an unreachable block.
|
|
define void @pr49573_main() {
|
|
; CHECK-LABEL: define {{[^@]+}}@pr49573_main() {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[TGT:%.*]] = call i16 @pr49573_fn()
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
entry:
|
|
%tgt = call i16 @pr49573_fn()
|
|
switch i16 %tgt, label %default.bb [
|
|
i16 0, label %case.0
|
|
i16 1, label %case.1
|
|
i16 2, label %case.2
|
|
]
|
|
|
|
case.0:
|
|
unreachable
|
|
|
|
default.bb:
|
|
ret void
|
|
|
|
case.1:
|
|
ret void
|
|
|
|
case.2:
|
|
br label %next
|
|
|
|
next:
|
|
%tgt.2 = call i16 @pr49573_fn_2()
|
|
switch i16 %tgt.2, label %default.bb [
|
|
i16 0, label %case.0
|
|
i16 2, label %case.2
|
|
]
|
|
}
|
|
|
|
; Make sure a new unreachable BB is created.
|
|
define void @pr49573_main_2() {
|
|
; CHECK-LABEL: define {{[^@]+}}@pr49573_main_2() {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[TGT:%.*]] = call i16 @pr49573_fn()
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
entry:
|
|
%tgt = call i16 @pr49573_fn()
|
|
switch i16 %tgt, label %default.bb [
|
|
i16 0, label %case.0
|
|
i16 1, label %case.1
|
|
i16 2, label %case.2
|
|
]
|
|
|
|
case.0:
|
|
unreachable
|
|
|
|
default.bb:
|
|
ret void
|
|
|
|
case.1:
|
|
ret void
|
|
|
|
case.2:
|
|
ret void
|
|
}
|
|
|
|
define internal i16 @pr49573_fn() {
|
|
; CHECK-LABEL: define {{[^@]+}}@pr49573_fn() {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
entry:
|
|
br i1 undef, label %then, label %else
|
|
|
|
then:
|
|
ret i16 0
|
|
|
|
else:
|
|
ret i16 2
|
|
}
|
|
|
|
define internal i16 @pr49573_fn_2() {
|
|
; CHECK-LABEL: define {{[^@]+}}@pr49573_fn_2() {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
entry:
|
|
br i1 undef, label %then, label %else
|
|
|
|
then:
|
|
ret i16 0
|
|
|
|
else:
|
|
ret i16 2
|
|
}
|