1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 | FileCheck %s
3
4define void @callbr_duplicate_dest() {
5; CHECK-LABEL: @callbr_duplicate_dest(
6; CHECK-NEXT:  entry:
7; CHECK-NEXT:    callbr void asm sideeffect "", "!i"()
8; CHECK-NEXT:    to label [[BB:%.*]] [label %bb]
9; CHECK:       bb:
10; CHECK-NEXT:    ret void
11;
12entry:
13  callbr void asm sideeffect "", "!i"()
14  to label %bb [label %bb]
15
16bb:
17  ret void
18}
19
20define void @callbr_can_fold_to_duplicate_dest1() {
21; CHECK-LABEL: @callbr_can_fold_to_duplicate_dest1(
22; CHECK-NEXT:  entry:
23; CHECK-NEXT:    callbr void asm sideeffect "", "!i"()
24; CHECK-NEXT:    to label [[COMMON_RET:%.*]] [label %common.ret]
25; CHECK:       common.ret:
26; CHECK-NEXT:    ret void
27;
28entry:
29  callbr void asm sideeffect "", "!i"()
30  to label %bb2 [label %bb1]
31
32bb1:
33  ret void
34
35bb2:
36  ret void
37}
38
39define void @callbr_can_fold_to_duplicate_dest2() {
40; CHECK-LABEL: @callbr_can_fold_to_duplicate_dest2(
41; CHECK-NEXT:  entry:
42; CHECK-NEXT:    callbr void asm sideeffect "", "!i,!i"()
43; CHECK-NEXT:    to label [[COMMON_RET:%.*]] [label [[COMMON_RET]], label %common.ret]
44; CHECK:       common.ret:
45; CHECK-NEXT:    ret void
46;
47entry:
48  callbr void asm sideeffect "", "!i,!i"()
49  to label %bb1 [label %bb2, label %bb3]
50
51bb1:
52  ret void
53
54bb2:
55  ret void
56
57bb3:
58  ret void
59}
60