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
22; RUN: opt < %s -passes=jump-table-to-switch -verify-dom-info -S | FileCheck %s
33; 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
44
55@func_array = constant [2 x ptr ] [ptr @func0 , ptr @func1 ]
66
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+ ;.
716define 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+ ;
825 ret i32 1
926}
1027
1128define 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+ ;
1237 ret i32 2
1338}
1439
@@ -20,7 +45,7 @@ define i32 @function_with_jump_table(i32 %index) {
2045; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
2146; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
2247; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
23- ; CHECK-NEXT: ]
48+ ; CHECK-NEXT: ], !prof [[PROF2:![0-9]+]]
2449; CHECK: default.switch.case.unreachable:
2550; CHECK-NEXT: unreachable
2651; CHECK: call.0:
@@ -37,7 +62,7 @@ define i32 @function_with_jump_table(i32 %index) {
3762; THRESHOLD-0-SAME: i32 [[INDEX:%.*]]) {
3863; THRESHOLD-0-NEXT: [[GEP:%.*]] = getelementptr inbounds [2 x ptr], ptr @func_array, i32 0, i32 [[INDEX]]
3964; 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]+]]
4166; THRESHOLD-0-NEXT: ret i32 [[RESULT]]
4267;
4368 %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) {
5479; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
5580; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
5681; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
57- ; CHECK-NEXT: ]
82+ ; CHECK-NEXT: ], !prof [[PROF3:![0-9]+]]
5883; CHECK: default.switch.case.unreachable:
5984; CHECK-NEXT: unreachable
6085; CHECK: call.0:
@@ -70,7 +95,7 @@ define i32 @basic_block_splitted_twice(i32 %index) {
7095; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE1:%.*]] [
7196; CHECK-NEXT: i32 0, label [[CALL_02:%.*]]
7297; CHECK-NEXT: i32 1, label [[CALL_13:%.*]]
73- ; CHECK-NEXT: ]
98+ ; CHECK-NEXT: ], !prof [[PROF3]]
7499; CHECK: default.switch.case.unreachable1:
75100; CHECK-NEXT: unreachable
76101; CHECK: call.02:
@@ -106,10 +131,22 @@ define i32 @basic_block_splitted_twice(i32 %index) {
106131}
107132
108133define 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+ ;
109140 ret void
110141}
111142
112143define 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+ ;
113150 ret void
114151}
115152
@@ -123,7 +160,7 @@ define void @void_function_with_jump_table(i32 %index) {
123160; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
124161; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
125162; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
126- ; CHECK-NEXT: ]
163+ ; CHECK-NEXT: ], !prof [[PROF3]]
127164; CHECK: default.switch.case.unreachable:
128165; CHECK-NEXT: unreachable
129166; CHECK: call.0:
@@ -156,7 +193,7 @@ define void @void_function_with_jump_table_and_call_site_attr(i32 %index) {
156193; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
157194; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
158195; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
159- ; CHECK-NEXT: ]
196+ ; CHECK-NEXT: ], !prof [[PROF3]]
160197; CHECK: default.switch.case.unreachable:
161198; CHECK-NEXT: unreachable
162199; CHECK: call.0:
@@ -183,10 +220,22 @@ define void @void_function_with_jump_table_and_call_site_attr(i32 %index) {
183220
184221
185222define 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+ ;
186229 ret i32 1
187230}
188231
189232define 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+ ;
190239 ret i32 2
191240}
192241
@@ -200,7 +249,7 @@ define i32 @function_with_jump_table_addrspace_42(i32 %index) addrspace(42) {
200249; CHECK-NEXT: switch i32 [[INDEX]], label [[DEFAULT_SWITCH_CASE_UNREACHABLE:%.*]] [
201250; CHECK-NEXT: i32 0, label [[CALL_0:%.*]]
202251; CHECK-NEXT: i32 1, label [[CALL_1:%.*]]
203- ; CHECK-NEXT: ]
252+ ; CHECK-NEXT: ], !prof [[PROF3]]
204253; CHECK: default.switch.case.unreachable:
205254; CHECK-NEXT: unreachable
206255; CHECK: call.0:
@@ -228,4 +277,18 @@ define i32 @function_with_jump_table_addrspace_42(i32 %index) addrspace(42) {
228277
229278!0 = !{i64 5678 }
230279!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