66
77declare  ptr  @memchr (ptr , i32 , i64 )
88
9- define  i1  @test_memchr_null (i32  %x ) {
9+ define  i1  @test_memchr_null (i32  %x ) !prof   !0   {
1010; CHECK-LABEL: define i1 @test_memchr_null( 
11- ; CHECK-SAME: i32 [[X:%.*]]) { 
11+ ; CHECK-SAME: i32 [[X:%.*]])  
12+ ; CHECK: !prof [[PROF_0:![0-9]+]] { 
1213; CHECK-NEXT:  [[ENTRY:.*]]: 
1314; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[X]] to i8 
1415; CHECK-NEXT:    switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [ 
@@ -40,9 +41,10 @@ entry:
4041  ret  i1  %isnull 
4142}
4243
43- define  ptr  @test_memchr (i32  %x ) {
44+ define  ptr  @test_memchr (i32  %x ) !prof   !0   {
4445; CHECK-LABEL: define ptr @test_memchr( 
45- ; CHECK-SAME: i32 [[X:%.*]]) { 
46+ ; CHECK-SAME: i32 [[X:%.*]])  
47+ ; CHECK: !prof [[PROF_0]] { 
4648; CHECK-NEXT:  [[ENTRY:.*]]: 
4749; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[X]] to i8 
4850; CHECK-NEXT:    switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [ 
@@ -72,16 +74,17 @@ entry:
7274  ret  ptr  %memchr 
7375}
7476
75- define  ptr  @test_memchr_smaller_n (i32  %x ) {
77+ define  ptr  @test_memchr_smaller_n (i32  %x ) !prof   !0   {
7678; CHECK-LABEL: define ptr @test_memchr_smaller_n( 
77- ; CHECK-SAME: i32 [[X:%.*]]) { 
79+ ; CHECK-SAME: i32 [[X:%.*]])  
80+ ; CHECK: !prof [[PROF_0]] { 
7881; CHECK-NEXT:  [[ENTRY:.*]]: 
7982; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[X]] to i8 
8083; CHECK-NEXT:    switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [ 
8184; CHECK-NEXT:      i8 48, label %[[MEMCHR_CASE:.*]] 
8285; CHECK-NEXT:      i8 49, label %[[MEMCHR_CASE1:.*]] 
8386; CHECK-NEXT:      i8 0, label %[[MEMCHR_CASE2:.*]] 
84- ; CHECK-NEXT:    ] 
87+ ; CHECK-NEXT:    ], !prof [[PROF_1:![0-9]+]]  
8588; CHECK:       [[MEMCHR_CASE]]: 
8689; CHECK-NEXT:    br label %[[MEMCHR_SUCCESS:.*]] 
8790; CHECK:       [[MEMCHR_CASE1]]: 
@@ -103,9 +106,10 @@ entry:
103106
104107; negative tests 
105108
106- define  ptr  @test_memchr_larger_n (i32  %x ) {
109+ define  ptr  @test_memchr_larger_n (i32  %x ) !prof   !0   {
107110; CHECK-LABEL: define ptr @test_memchr_larger_n( 
108- ; CHECK-SAME: i32 [[X:%.*]]) { 
111+ ; CHECK-SAME: i32 [[X:%.*]]) 
112+ ; CHECK: !prof [[PROF_0]] { 
109113; CHECK-NEXT:  [[ENTRY:.*:]] 
110114; CHECK-NEXT:    [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 [[X]], i64 6) 
111115; CHECK-NEXT:    ret ptr [[MEMCHR]] 
@@ -115,9 +119,10 @@ entry:
115119  ret  ptr  %memchr 
116120}
117121
118- define  ptr  @test_memchr_non_constant (i32  %x , ptr  %str ) {
122+ define  ptr  @test_memchr_non_constant (i32  %x , ptr  %str ) !prof   !0   {
119123; 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]] { 
121126; CHECK-NEXT:  [[ENTRY:.*:]] 
122127; CHECK-NEXT:    [[MEMCHR:%.*]] = call ptr @memchr(ptr [[STR]], i32 [[X]], i64 5) 
123128; CHECK-NEXT:    ret ptr [[MEMCHR]] 
@@ -127,8 +132,9 @@ entry:
127132  ret  ptr  %memchr 
128133}
129134
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]] { 
132138; CHECK-NEXT:  [[ENTRY:.*:]] 
133139; CHECK-NEXT:    [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 49, i64 5) 
134140; CHECK-NEXT:    ret ptr [[MEMCHR]] 
@@ -138,9 +144,10 @@ entry:
138144  ret  ptr  %memchr 
139145}
140146
141- define  ptr  @test_memchr_dynamic_n (i32  %x , i32  %y ) {
147+ define  ptr  @test_memchr_dynamic_n (i32  %x , i32  %y ) !prof   !0   {
142148; 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]] { 
144151; CHECK-NEXT:  [[ENTRY:.*:]] 
145152; CHECK-NEXT:    [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 [[X]], i32 [[Y]]) 
146153; CHECK-NEXT:    ret ptr [[MEMCHR]] 
@@ -150,9 +157,10 @@ entry:
150157  ret  ptr  %memchr 
151158}
152159
153- define  ptr  @test_memchr_long (i32  %x ) {
160+ define  ptr  @test_memchr_long (i32  %x ) !prof   !0   {
154161; CHECK-LABEL: define ptr @test_memchr_long( 
155- ; CHECK-SAME: i32 [[X:%.*]]) { 
162+ ; CHECK-SAME: i32 [[X:%.*]]) 
163+ ; CHECK: !prof [[PROF_0]] { 
156164; CHECK-NEXT:  [[ENTRY:.*:]] 
157165; CHECK-NEXT:    [[MEMCHR:%.*]] = call ptr @memchr(ptr @str_long, i32 [[X]], i64 8) 
158166; CHECK-NEXT:    ret ptr [[MEMCHR]] 
@@ -163,9 +171,10 @@ entry:
163171}
164172
165173; 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   {
167175; 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]] { 
169178; CHECK-NEXT:  [[ENTRY:.*:]] 
170179; CHECK-NEXT:    [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 [[X]], i64 [[LEN]]) 
171180; CHECK-NEXT:    ret ptr [[MEMCHR]] 
@@ -174,3 +183,7 @@ entry:
174183  %memchr  = call  ptr  @memchr (ptr  @str , i32  %x , i64  %len )
175184  ret  ptr  %memchr 
176185}
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