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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
; RUN: llc -march=hexagon -hexagon-initial-cfg-cleanup=0 -hexagon-instsimplify=0 < %s | FileCheck %s
; REQUIRES: asserts
; Test that the compiler doesn't assert because IMPLICIT_DEF instructions are
; are added to the same packet as a use. This test case asserts if the
; IMPLICIT_DEFs are not handled properly.
;
; r0 = IMPLICIT_DEF
; r1 = IMPLICIT_DEF
; S2_storerd_io r29, 0, d0
; CHECK: memd(r29+#0) = r{{[0-9]+}}:{{[0-9]+}}
; CHECK: memd(r29+#0) = r{{[0-9]+}}:{{[0-9]+}}
define ptr @f0(ptr %a0) local_unnamed_addr {
b0:
%v0 = tail call ptr @f1(i32 0)
%v1 = tail call ptr @f1(i32 8)
%v3 = load i32, ptr undef, align 4
%v4 = tail call ptr @f4(ptr %a0, i32 0, i32 %v3)
%v5 = sub nsw i32 %v3, 0
br label %b1
b1: ; preds = %b0
switch i8 undef, label %b3 [
i8 0, label %b4
i8 92, label %b2
i8 44, label %b4
]
b2: ; preds = %b1
unreachable
b3: ; preds = %b1
unreachable
b4: ; preds = %b1, %b1
br label %b5
b5: ; preds = %b4
br i1 undef, label %b27, label %b6
b6: ; preds = %b5
%v6 = ptrtoint ptr %v4 to i32
%v7 = sub i32 0, %v6
%v8 = call ptr @f4(ptr nonnull %v4, i32 0, i32 %v7)
%v9 = call ptr @f4(ptr nonnull %v4, i32 undef, i32 %v5)
br label %b7
b7: ; preds = %b6
br i1 undef, label %b8, label %b9
b8: ; preds = %b7
br label %b9
b9: ; preds = %b8, %b7
%v10 = phi i32 [ 2, %b8 ], [ 0, %b7 ]
%v11 = load i8, ptr %v9, align 1
switch i8 %v11, label %b12 [
i8 43, label %b10
i8 45, label %b10
]
b10: ; preds = %b9, %b9
br i1 undef, label %b11, label %b12
b11: ; preds = %b10
%v12 = call i64 @f6(ptr nonnull %v9, ptr nonnull undef, i32 10)
%v13 = load ptr, ptr undef, align 4
%v14 = ptrtoint ptr %v13 to i32
br label %b15
b12: ; preds = %b10, %b9
switch i8 undef, label %b14 [
i8 0, label %b13
i8 46, label %b13
]
b13: ; preds = %b12, %b12
br label %b15
b14: ; preds = %b12
unreachable
b15: ; preds = %b13, %b11
%v15 = phi i32 [ undef, %b13 ], [ %v14, %b11 ]
%v16 = phi i32 [ 2, %b13 ], [ 1, %b11 ]
%v17 = phi i64 [ undef, %b13 ], [ %v12, %b11 ]
%v18 = call ptr @f5()
br label %b16
b16: ; preds = %b15
%v19 = icmp ne i32 %v10, %v16
%v20 = or i1 undef, %v19
br i1 %v20, label %b17, label %b18
b17: ; preds = %b16
call void @f2(ptr %v8)
br label %b27
b18: ; preds = %b16
br i1 undef, label %b19, label %b20
b19: ; preds = %b18
br label %b24
b20: ; preds = %b18
%v21 = add i32 %v5, -2
%v22 = sub i32 %v21, %v7
%v23 = add i32 %v22, %v15
%v24 = sub i32 %v23, 0
br label %b21
b21: ; preds = %b20
%v25 = icmp ne i32 %v24, 2
%v26 = and i1 %v25, undef
br i1 %v26, label %b22, label %b23
b22: ; preds = %b21
unreachable
b23: ; preds = %b21
br label %b24
b24: ; preds = %b23, %b19
%v27 = phi i64 [ 0, %b19 ], [ %v17, %b23 ]
br label %b25
b25: ; preds = %b24
%v28 = icmp sgt i64 0, %v27
br i1 %v28, label %b28, label %b26
b26: ; preds = %b25
unreachable
b27: ; preds = %b17, %b5
call void @f2(ptr %v4)
call void @f2(ptr %v0)
%v29 = call ptr @f3(ptr undef, ptr nonnull %a0)
ret ptr %v1
b28: ; preds = %b25
call void @f2(ptr %v9)
unreachable
}
declare ptr @f1(i32) local_unnamed_addr
declare void @f2(ptr nocapture) local_unnamed_addr
declare ptr @f3(ptr, ptr nocapture readonly) local_unnamed_addr
declare ptr @f4(ptr, i32, i32) local_unnamed_addr
declare ptr @f5() local_unnamed_addr
declare i64 @f6(ptr, ptr, i32) local_unnamed_addr
|