1
- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all -- version 4
2
2
; RUN: opt < %s -passes=jump-table-to-switch -verify-dom-info -S | FileCheck %s
3
3
; RUN: opt < %s -passes=jump-table-to-switch -jump-table-to-switch-size-threshold=0 -verify-dom-info -S | FileCheck %s --check-prefix=THRESHOLD-0
4
4
5
5
@func_array = constant [2 x ptr ] [ptr @func0 , ptr @func1 ]
6
6
7
+ ;.
8
+ ; CHECK: @func_array = constant [2 x ptr] [ptr @func0, ptr @func1]
9
+ ; CHECK: @void_func_array = constant [2 x ptr] [ptr @void_func0, ptr @void_func1]
10
+ ; CHECK: @func_array_addrspace_42 = addrspace(42) constant [2 x ptr addrspace(42)] [ptr addrspace(42) @func0_addrspace_42, ptr addrspace(42) @func1_addrspace_42]
11
+ ;.
12
+ ; THRESHOLD-0: @func_array = constant [2 x ptr] [ptr @func0, ptr @func1]
13
+ ; THRESHOLD-0: @void_func_array = constant [2 x ptr] [ptr @void_func0, ptr @void_func1]
14
+ ; THRESHOLD-0: @func_array_addrspace_42 = addrspace(42) constant [2 x ptr addrspace(42)] [ptr addrspace(42) @func0_addrspace_42, ptr addrspace(42) @func1_addrspace_42]
15
+ ;.
7
16
define i32 @func0 () !guid !0 {
17
+ ; CHECK-LABEL: define i32 @func0(
18
+ ; CHECK-SAME: ) !guid [[META0:![0-9]+]] {
19
+ ; CHECK-NEXT: ret i32 1
20
+ ;
21
+ ; THRESHOLD-0-LABEL: define i32 @func0(
22
+ ; THRESHOLD-0-SAME: ) !guid [[META0:![0-9]+]] {
23
+ ; THRESHOLD-0-NEXT: ret i32 1
24
+ ;
8
25
ret i32 1
9
26
}
10
27
11
28
define i32 @func1 () !guid !1 {
29
+ ; CHECK-LABEL: define i32 @func1(
30
+ ; CHECK-SAME: ) !guid [[META1:![0-9]+]] {
31
+ ; CHECK-NEXT: ret i32 2
32
+ ;
33
+ ; THRESHOLD-0-LABEL: define i32 @func1(
34
+ ; THRESHOLD-0-SAME: ) !guid [[META1:![0-9]+]] {
35
+ ; THRESHOLD-0-NEXT: ret i32 2
36
+ ;
12
37
ret i32 2
13
38
}
14
39
@@ -20,7 +45,7 @@ define i32 @function_with_jump_table(i32 %index) {
20
45
; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
21
46
; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
22
47
; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
23
- ; CHECK-NEXT: ]
48
+ ; CHECK-NEXT: ], !prof [[PROF2:![0-9]+]]
24
49
; CHECK: default.switch.case.unreachable:
25
50
; CHECK-NEXT: unreachable
26
51
; CHECK: call.0:
@@ -37,7 +62,7 @@ define i32 @function_with_jump_table(i32 %index) {
37
62
; THRESHOLD-0-SAME: i32 [[INDEX:%.*]]) {
38
63
; THRESHOLD-0-NEXT: [[GEP:%.*]] = getelementptr inbounds [2 x ptr], ptr @func_array, i32 0, i32 [[INDEX]]
39
64
; THRESHOLD-0-NEXT: [[FUNC_PTR:%.*]] = load ptr, ptr [[GEP]], align 8
40
- ; THRESHOLD-0-NEXT: [[RESULT:%.*]] = call i32 [[FUNC_PTR]]()
65
+ ; THRESHOLD-0-NEXT: [[RESULT:%.*]] = call i32 [[FUNC_PTR]](), !prof [[PROF2:![0-9]+]]
41
66
; THRESHOLD-0-NEXT: ret i32 [[RESULT]]
42
67
;
43
68
%gep = getelementptr inbounds [2 x ptr ], ptr @func_array , i32 0 , i32 %index
@@ -54,7 +79,7 @@ define i32 @basic_block_splitted_twice(i32 %index) {
54
79
; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
55
80
; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
56
81
; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
57
- ; CHECK-NEXT: ]
82
+ ; CHECK-NEXT: ], !prof [[PROF3:![0-9]+]]
58
83
; CHECK: default.switch.case.unreachable:
59
84
; CHECK-NEXT: unreachable
60
85
; CHECK: call.0:
@@ -70,7 +95,7 @@ define i32 @basic_block_splitted_twice(i32 %index) {
70
95
; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE1:%.*]] [
71
96
; CHECK-NEXT: i32 0, label [[CALL_02:%.*]]
72
97
; CHECK-NEXT: i32 1, label [[CALL_13:%.*]]
73
- ; CHECK-NEXT: ]
98
+ ; CHECK-NEXT: ], !prof [[PROF3]]
74
99
; CHECK: default.switch.case.unreachable1:
75
100
; CHECK-NEXT: unreachable
76
101
; CHECK: call.02:
@@ -106,10 +131,22 @@ define i32 @basic_block_splitted_twice(i32 %index) {
106
131
}
107
132
108
133
define void @void_func0 () {
134
+ ; CHECK-LABEL: define void @void_func0() {
135
+ ; CHECK-NEXT: ret void
136
+ ;
137
+ ; THRESHOLD-0-LABEL: define void @void_func0() {
138
+ ; THRESHOLD-0-NEXT: ret void
139
+ ;
109
140
ret void
110
141
}
111
142
112
143
define void @void_func1 () {
144
+ ; CHECK-LABEL: define void @void_func1() {
145
+ ; CHECK-NEXT: ret void
146
+ ;
147
+ ; THRESHOLD-0-LABEL: define void @void_func1() {
148
+ ; THRESHOLD-0-NEXT: ret void
149
+ ;
113
150
ret void
114
151
}
115
152
@@ -123,7 +160,7 @@ define void @void_function_with_jump_table(i32 %index) {
123
160
; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
124
161
; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
125
162
; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
126
- ; CHECK-NEXT: ]
163
+ ; CHECK-NEXT: ], !prof [[PROF3]]
127
164
; CHECK: default.switch.case.unreachable:
128
165
; CHECK-NEXT: unreachable
129
166
; CHECK: call.0:
@@ -156,7 +193,7 @@ define void @void_function_with_jump_table_and_call_site_attr(i32 %index) {
156
193
; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
157
194
; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
158
195
; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
159
- ; CHECK-NEXT: ]
196
+ ; CHECK-NEXT: ], !prof [[PROF3]]
160
197
; CHECK: default.switch.case.unreachable:
161
198
; CHECK-NEXT: unreachable
162
199
; CHECK: call.0:
@@ -183,10 +220,22 @@ define void @void_function_with_jump_table_and_call_site_attr(i32 %index) {
183
220
184
221
185
222
define i32 @func0_addrspace_42 () addrspace (42 ) {
223
+ ; CHECK-LABEL: define i32 @func0_addrspace_42() addrspace(42) {
224
+ ; CHECK-NEXT: ret i32 1
225
+ ;
226
+ ; THRESHOLD-0-LABEL: define i32 @func0_addrspace_42() addrspace(42) {
227
+ ; THRESHOLD-0-NEXT: ret i32 1
228
+ ;
186
229
ret i32 1
187
230
}
188
231
189
232
define i32 @func1_addrspace_42 () addrspace (42 ) {
233
+ ; CHECK-LABEL: define i32 @func1_addrspace_42() addrspace(42) {
234
+ ; CHECK-NEXT: ret i32 2
235
+ ;
236
+ ; THRESHOLD-0-LABEL: define i32 @func1_addrspace_42() addrspace(42) {
237
+ ; THRESHOLD-0-NEXT: ret i32 2
238
+ ;
190
239
ret i32 2
191
240
}
192
241
@@ -200,7 +249,7 @@ define i32 @function_with_jump_table_addrspace_42(i32 %index) addrspace(42) {
200
249
; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
201
250
; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
202
251
; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
203
- ; CHECK-NEXT: ]
252
+ ; CHECK-NEXT: ], !prof [[PROF3]]
204
253
; CHECK: default.switch.case.unreachable:
205
254
; CHECK-NEXT: unreachable
206
255
; CHECK: call.0:
@@ -228,4 +277,18 @@ define i32 @function_with_jump_table_addrspace_42(i32 %index) addrspace(42) {
228
277
229
278
!0 = !{i64 5678 }
230
279
!1 = !{i64 5555 }
231
- !2 = !{!"VP" , i32 0 , i64 25 , i64 5678 , i64 20 , i64 5555 , i64 5 }
280
+ !2 = !{!"VP" , i32 0 , i64 25 , i64 5678 , i64 20 , i64 5555 , i64 5 }
281
+ ;.
282
+ ; CHECK: attributes #[[ATTR0]] = { nounwind }
283
+ ;.
284
+ ; THRESHOLD-0: attributes #[[ATTR0]] = { nounwind }
285
+ ;.
286
+ ; CHECK: [[META0]] = !{i64 5678}
287
+ ; CHECK: [[META1]] = !{i64 5555}
288
+ ; CHECK: [[PROF2]] = !{!"branch_weights", i32 0, i32 20, i32 5}
289
+ ; CHECK: [[PROF3]] = !{!"unknown"}
290
+ ;.
291
+ ; THRESHOLD-0: [[META0]] = !{i64 5678}
292
+ ; THRESHOLD-0: [[META1]] = !{i64 5555}
293
+ ; THRESHOLD-0: [[PROF2]] = !{!"VP", i32 0, i64 25, i64 5678, i64 20, i64 5555, i64 5}
294
+ ;.
0 commit comments