1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| # RUN: llc -mtriple=arm-apple-ios -o - %s -run-pass if-converter | FileCheck %s
---
name: f1
body: |
bb.0:
successors: %bb.1
B %bb.1
bb.1:
successors: %bb.2, %bb.4
Bcc %bb.4, 1, $cpsr
bb.2:
successors: %bb.3, %bb.5
Bcc %bb.5, 1, $cpsr
bb.3:
successors: %bb.5
B %bb.5
bb.4:
successors:
bb.5:
successors: %bb.1, %bb.6
Bcc %bb.1, 1, $cpsr
bb.6:
BX_RET 14, _
...
# IfConversion.cpp/canFallThroughTo thought there was a fallthrough from
# bb.4 to bb5 even if the successor list was empty.
# bb.4 is empty, so it surely looks like it can fallthrough, but this is what
# happens for a bb just containing an "unreachable".
#CHECK: body: |
#CHECK: bb.0:
#CHECK: successors: %bb.1
#CHECK: bb.1:
#CHECK: successors: %bb.3({{.*}}), %bb.2
# The original brr_cond from bb.1, jumping to the empty bb
#CHECK: Bcc %bb.2
#CHECK: B %bb.3
# Empty bb.2, originally containing "unreachable" and thus has no successors
# and we cannot guess them: we should print an empty list of successors.
#CHECK: bb.2:
#CHECK: successors:{{ *$}}
#CHECK: bb.3:
#CHECK: successors: %bb.1
# Conditional BX_RET and then loop back to bb.1
#CHECK: BX_RET 0
#CHECK: B %bb.1
|