6
6
7
7
declare ptr @memchr (ptr , i32 , i64 )
8
8
9
- define i1 @test_memchr_null (i32 %x ) {
9
+ define i1 @test_memchr_null (i32 %x ) !prof !0 {
10
10
; CHECK-LABEL: define i1 @test_memchr_null(
11
- ; CHECK-SAME: i32 [[X:%.*]]) {
11
+ ; CHECK-SAME: i32 [[X:%.*]])
12
+ ; CHECK: !prof [[PROF_0:![0-9]+]] {
12
13
; CHECK-NEXT: [[ENTRY:.*]]:
13
14
; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[X]] to i8
14
15
; CHECK-NEXT: switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [
@@ -40,9 +41,10 @@ entry:
40
41
ret i1 %isnull
41
42
}
42
43
43
- define ptr @test_memchr (i32 %x ) {
44
+ define ptr @test_memchr (i32 %x ) !prof !0 {
44
45
; CHECK-LABEL: define ptr @test_memchr(
45
- ; CHECK-SAME: i32 [[X:%.*]]) {
46
+ ; CHECK-SAME: i32 [[X:%.*]])
47
+ ; CHECK: !prof [[PROF_0]] {
46
48
; CHECK-NEXT: [[ENTRY:.*]]:
47
49
; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[X]] to i8
48
50
; CHECK-NEXT: switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [
@@ -72,16 +74,17 @@ entry:
72
74
ret ptr %memchr
73
75
}
74
76
75
- define ptr @test_memchr_smaller_n (i32 %x ) {
77
+ define ptr @test_memchr_smaller_n (i32 %x ) !prof !0 {
76
78
; CHECK-LABEL: define ptr @test_memchr_smaller_n(
77
- ; CHECK-SAME: i32 [[X:%.*]]) {
79
+ ; CHECK-SAME: i32 [[X:%.*]])
80
+ ; CHECK: !prof [[PROF_0]] {
78
81
; CHECK-NEXT: [[ENTRY:.*]]:
79
82
; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[X]] to i8
80
83
; CHECK-NEXT: switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [
81
84
; CHECK-NEXT: i8 48, label %[[MEMCHR_CASE:.*]]
82
85
; CHECK-NEXT: i8 49, label %[[MEMCHR_CASE1:.*]]
83
86
; CHECK-NEXT: i8 0, label %[[MEMCHR_CASE2:.*]]
84
- ; CHECK-NEXT: ]
87
+ ; CHECK-NEXT: ], !prof [[PROF_1:![0-9]+]]
85
88
; CHECK: [[MEMCHR_CASE]]:
86
89
; CHECK-NEXT: br label %[[MEMCHR_SUCCESS:.*]]
87
90
; CHECK: [[MEMCHR_CASE1]]:
@@ -103,9 +106,10 @@ entry:
103
106
104
107
; negative tests
105
108
106
- define ptr @test_memchr_larger_n (i32 %x ) {
109
+ define ptr @test_memchr_larger_n (i32 %x ) !prof !0 {
107
110
; CHECK-LABEL: define ptr @test_memchr_larger_n(
108
- ; CHECK-SAME: i32 [[X:%.*]]) {
111
+ ; CHECK-SAME: i32 [[X:%.*]])
112
+ ; CHECK: !prof [[PROF_0]] {
109
113
; CHECK-NEXT: [[ENTRY:.*:]]
110
114
; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 [[X]], i64 6)
111
115
; CHECK-NEXT: ret ptr [[MEMCHR]]
@@ -115,9 +119,10 @@ entry:
115
119
ret ptr %memchr
116
120
}
117
121
118
- define ptr @test_memchr_non_constant (i32 %x , ptr %str ) {
122
+ define ptr @test_memchr_non_constant (i32 %x , ptr %str ) !prof !0 {
119
123
; CHECK-LABEL: define ptr @test_memchr_non_constant(
120
- ; CHECK-SAME: i32 [[X:%.*]], ptr [[STR:%.*]]) {
124
+ ; CHECK-SAME: i32 [[X:%.*]], ptr [[STR:%.*]])
125
+ ; CHECK: !prof [[PROF_0]] {
121
126
; CHECK-NEXT: [[ENTRY:.*:]]
122
127
; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr [[STR]], i32 [[X]], i64 5)
123
128
; CHECK-NEXT: ret ptr [[MEMCHR]]
@@ -127,8 +132,9 @@ entry:
127
132
ret ptr %memchr
128
133
}
129
134
130
- define ptr @test_memchr_constant_ch () {
131
- ; CHECK-LABEL: define ptr @test_memchr_constant_ch() {
135
+ define ptr @test_memchr_constant_ch () !prof !0 {
136
+ ; CHECK-LABEL: define ptr @test_memchr_constant_ch()
137
+ ; CHECK: !prof [[PROF_0]] {
132
138
; CHECK-NEXT: [[ENTRY:.*:]]
133
139
; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 49, i64 5)
134
140
; CHECK-NEXT: ret ptr [[MEMCHR]]
@@ -138,9 +144,10 @@ entry:
138
144
ret ptr %memchr
139
145
}
140
146
141
- define ptr @test_memchr_dynamic_n (i32 %x , i32 %y ) {
147
+ define ptr @test_memchr_dynamic_n (i32 %x , i32 %y ) !prof !0 {
142
148
; CHECK-LABEL: define ptr @test_memchr_dynamic_n(
143
- ; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
149
+ ; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]])
150
+ ; CHECK: !prof [[PROF_0]] {
144
151
; CHECK-NEXT: [[ENTRY:.*:]]
145
152
; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 [[X]], i32 [[Y]])
146
153
; CHECK-NEXT: ret ptr [[MEMCHR]]
@@ -150,9 +157,10 @@ entry:
150
157
ret ptr %memchr
151
158
}
152
159
153
- define ptr @test_memchr_long (i32 %x ) {
160
+ define ptr @test_memchr_long (i32 %x ) !prof !0 {
154
161
; CHECK-LABEL: define ptr @test_memchr_long(
155
- ; CHECK-SAME: i32 [[X:%.*]]) {
162
+ ; CHECK-SAME: i32 [[X:%.*]])
163
+ ; CHECK: !prof [[PROF_0]] {
156
164
; CHECK-NEXT: [[ENTRY:.*:]]
157
165
; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr @str_long, i32 [[X]], i64 8)
158
166
; CHECK-NEXT: ret ptr [[MEMCHR]]
@@ -163,9 +171,10 @@ entry:
163
171
}
164
172
165
173
; We want to check that the compiler still calls memchr if the length is non-constant:
166
- define ptr @test_memchr_non_constant_length2 (i32 %x , i64 %len ) {
174
+ define ptr @test_memchr_non_constant_length2 (i32 %x , i64 %len ) !prof !0 {
167
175
; CHECK-LABEL: define ptr @test_memchr_non_constant_length2(
168
- ; CHECK-SAME: i32 [[X:%.*]], i64 [[LEN:%.*]]) {
176
+ ; CHECK-SAME: i32 [[X:%.*]], i64 [[LEN:%.*]])
177
+ ; CHECK: !prof [[PROF_0]] {
169
178
; CHECK-NEXT: [[ENTRY:.*:]]
170
179
; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 [[X]], i64 [[LEN]])
171
180
; CHECK-NEXT: ret ptr [[MEMCHR]]
@@ -174,3 +183,7 @@ entry:
174
183
%memchr = call ptr @memchr (ptr @str , i32 %x , i64 %len )
175
184
ret ptr %memchr
176
185
}
186
+
187
+ !0 = !{!"function_entry_count" , i64 1000 }
188
+ ; CHECK: [[PROF_0]] = !{!"function_entry_count", i64 1000}
189
+ ; CHECK: [[PROF_1]] = !{!"unknown", !"aggressive-instcombine"}
0 commit comments